Added option to show underscore on PS only

This commit is contained in:
Sjef Verhoeven PE5PVB
2025-01-22 10:49:36 +01:00
parent fc0aa0f9a0
commit bd9eef15ca
4 changed files with 86 additions and 43 deletions

View File

@@ -635,9 +635,9 @@ void TEF6686::readRDS(byte showrdserrors) {
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
RDScharConverter(ps_buffer2, PStext, sizeof(PStext) / sizeof(wchar_t), (underscore > 0 ? true : false)); // 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
rds.stationName = extractUTF8Substring(utf8String, 0, 8, (underscore > 0 ? true : false)); // Make sure PS does not exceed 8 characters
for (byte x = 0; x < 8; x++) {
ps_buffer[x] = '\0';
ps_buffer2[x] = '\0';
@@ -650,9 +650,9 @@ void TEF6686::readRDS(byte showrdserrors) {
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
RDScharConverter(ps_buffer, PStext, sizeof(PStext) / sizeof(wchar_t), (underscore > 0 ? true : false)); // Convert 8 bit ASCII to 16 bit ASCII
String utf8String = convertToUTF8(PStext); // Convert RDS characterset to ASCII
rds.stationName = extractUTF8Substring(utf8String, 0, 8, true);
rds.stationName = extractUTF8Substring(utf8String, 0, 8, (underscore > 0 ? true : false));
if (packet0 && packet1 && packet2 && packet3) ps_process = true; // OK, we had one runs, now let's go the idle PS writing
}
@@ -1207,9 +1207,9 @@ void TEF6686::readRDS(byte showrdserrors) {
}
wchar_t RTtext[65] = L""; // Create 16 bit char buffer for Extended ASCII
RDScharConverter(rt_buffer_temp, RTtext, sizeof(RTtext) / sizeof(wchar_t), true); // Convert 8 bit ASCII to 16 bit ASCII
RDScharConverter(rt_buffer_temp, RTtext, sizeof(RTtext) / sizeof(wchar_t), (underscore > 1 ? true : false)); // Convert 8 bit ASCII to 16 bit ASCII
rds.stationText = convertToUTF8(RTtext); // Convert RDS characterset to ASCII
rds.stationText = extractUTF8Substring(rds.stationText, 0, endmarkerRT64, true); // Make sure RT does not exceed 64 characters
rds.stationText = extractUTF8Substring(rds.stationText, 0, endmarkerRT64, (underscore > 1 ? true : false)); // Make sure RT does not exceed 64 characters
rds.stationText = trimTrailingSpaces(rds.stationText); // Trim empty spaces at the end
}
@@ -1242,9 +1242,9 @@ void TEF6686::readRDS(byte showrdserrors) {
}
wchar_t RTtext[65] = L""; // Create 16 bit char buffer for Extended ASCII
RDScharConverter(rt_buffer_temp, RTtext, sizeof(RTtext) / sizeof(wchar_t), true); // Convert 8 bit ASCII to 16 bit ASCII
RDScharConverter(rt_buffer_temp, RTtext, sizeof(RTtext) / sizeof(wchar_t), (underscore > 1 ? true : false)); // Convert 8 bit ASCII to 16 bit ASCII
rds.stationText = convertToUTF8(RTtext); // Convert RDS characterset to ASCII
rds.stationText = extractUTF8Substring(rds.stationText, 0, endmarkerRT64, true); // Make sure RT does not exceed 64 characters
rds.stationText = extractUTF8Substring(rds.stationText, 0, endmarkerRT64, (underscore > 1 ? true : false)); // Make sure RT does not exceed 64 characters
rds.stationText = trimTrailingSpaces(rds.stationText); // Trim empty spaces at the end
}
@@ -1293,9 +1293,9 @@ void TEF6686::readRDS(byte showrdserrors) {
}
wchar_t RTtext[33] = L""; // Create 16 bit char buffer for Extended ASCII
RDScharConverter(rt_buffer_temp, RTtext, sizeof(RTtext) / sizeof(wchar_t), true); // Convert 8 bit ASCII to 16 bit ASCII
RDScharConverter(rt_buffer_temp, RTtext, sizeof(RTtext) / sizeof(wchar_t), (underscore > 1 ? true : false)); // Convert 8 bit ASCII to 16 bit ASCII
rds.stationText32 = convertToUTF8(RTtext); // Convert RDS characterset to ASCII
rds.stationText32 = extractUTF8Substring(rds.stationText32, 0, endmarkerRT32, true);// Make sure RT does not exceed 32 characters
rds.stationText32 = extractUTF8Substring(rds.stationText32, 0, endmarkerRT32, (underscore > 1 ? true : false));// Make sure RT does not exceed 32 characters
rds.stationText32 = trimTrailingSpaces(rds.stationText32); // Trim empty spaces at the end
}
} break;
@@ -1916,7 +1916,7 @@ String TEF6686::extractUTF8Substring(const String & utf8String, size_t start, si
charIndex++;
}
if (under && underscore) {
if (under) {
while (substring.length() < length) {
substring += '_';
}
@@ -1930,8 +1930,8 @@ void TEF6686::RDScharConverter(const char* input, wchar_t* output, size_t size,
for (size_t i = 0; i < size - 1; i++) {
char currentChar = input[i];
switch (currentChar) {
case 0x0A: if (under && underscore) output[i] = L'_'; else output[i] = L' '; break;
case 0x20: if (under && underscore) output[i] = L'_'; else output[i] = L' '; break;
case 0x0A: if (under) output[i] = L'_'; else output[i] = L' '; break;
case 0x20: if (under) output[i] = L'_'; else output[i] = L' '; break;
case 0x21 ... 0x5D: output[i] = static_cast<wchar_t>(currentChar); break;
case 0x5E: output[i] = L''; break;
case 0x5F: output[i] = L'_'; break;

View File

@@ -719,7 +719,7 @@ class TEF6686 {
uint8_t rdsblock;
bool mute;
bool afmethodB;
bool underscore;
byte underscore;
bool ps_process;
byte af_updatecounter;

View File

@@ -790,7 +790,11 @@ void ShowOneLine(byte position, byte item, bool selected) {
FullLineSprite.setTextDatum(TR_DATUM);
FullLineSprite.setTextColor(PrimaryColor, PrimaryColorSmooth, false);
FullLineSprite.drawString((radio.underscore ? myLanguage[language][42] : myLanguage[language][30]), 298, 2);
switch (radio.underscore) {
case 0: FullLineSprite.drawString(myLanguage[language][30], 298, 2); break;
case 1: FullLineSprite.drawString(myLanguage[language][304], 298, 2); break;
case 2: FullLineSprite.drawString(myLanguage[language][42], 298, 2); break;
}
break;
case FMSETTINGS:
@@ -1885,7 +1889,11 @@ void ShowOneButton(byte position, byte item, bool selected) {
PSSprite.drawString(shortLine(removeNewline(myLanguage[language][49])), 75, 1);
PSSprite.setTextColor(PrimaryColor, PrimaryColorSmooth, false);
PSSprite.drawString((radio.underscore ? myLanguage[language][42] : myLanguage[language][30]), 75, 15);
switch (radio.underscore) {
case 0: PSSprite.drawString(myLanguage[language][30], 75, 15); break;
case 1: PSSprite.drawString(myLanguage[language][304], 75, 15); break;
case 2: PSSprite.drawString(myLanguage[language][42], 75, 15); break;
}
break;
case FMSETTINGS:
@@ -3511,9 +3519,14 @@ void MenuUp() {
break;
case ITEM3:
radio.underscore = !radio.underscore;
radio.underscore++;
if (radio.underscore > 2) radio.underscore = 0;
OneBigLineSprite.drawString((radio.underscore ? myLanguage[language][42] : myLanguage[language][30]), 135, 0);
switch (radio.underscore) {
case 0: OneBigLineSprite.drawString(myLanguage[language][30], 135, 0); break;
case 1: OneBigLineSprite.drawString(myLanguage[language][304], 135, 0); break;
case 2: OneBigLineSprite.drawString(myLanguage[language][42], 135, 0); break;
}
OneBigLineSprite.pushSprite(24, 118);
break;
@@ -4521,9 +4534,14 @@ void MenuDown() {
break;
case ITEM3:
radio.underscore = !radio.underscore;
radio.underscore--;
if (radio.underscore > 2) radio.underscore = 2;
OneBigLineSprite.drawString((radio.underscore ? myLanguage[language][42] : myLanguage[language][30]), 135, 0);
switch (radio.underscore) {
case 0: OneBigLineSprite.drawString(myLanguage[language][30], 135, 0); break;
case 1: OneBigLineSprite.drawString(myLanguage[language][304], 135, 0); break;
case 2: OneBigLineSprite.drawString(myLanguage[language][42], 135, 0); break;
}
OneBigLineSprite.pushSprite(24, 118);
break;
@@ -5582,7 +5600,11 @@ void DoMenu() {
case ITEM3:
Infoboxprint(myLanguage[language][49]);
OneBigLineSprite.drawString((radio.underscore ? myLanguage[language][42] : myLanguage[language][30]), 135, 0);
switch (radio.underscore) {
case 0: OneBigLineSprite.drawString(myLanguage[language][30], 135, 0); break;
case 1: OneBigLineSprite.drawString(myLanguage[language][304], 135, 0); break;
case 2: OneBigLineSprite.drawString(myLanguage[language][42], 135, 0); break;
}
OneBigLineSprite.pushSprite(24, 118);
break;

View File

@@ -5,7 +5,7 @@
// [number of languages][number of texts]
static const char* const myLanguage[21][304] PROGMEM = {
static const char* const myLanguage[21][305] PROGMEM = {
{ "English", // English
"Rotary direction changed", // 1
"Please release button", // 2
@@ -309,7 +309,8 @@ static const char* const myLanguage[21][304] PROGMEM = {
"The logbook contains over 130 entries, which the viewer cannot process. Please download the CSV file to process it.", // 300
"PI locked CT sync", // 301
"Error! No RDS signal", // 302
"Hold BW to stop" // 303
"Hold BW to stop", // 303
"PS Only" // 304
},
{ "Nederlands", // Dutch
@@ -615,7 +616,8 @@ static const char* const myLanguage[21][304] PROGMEM = {
"Het logboek bevat meer dan 130 items, die de viewer niet kan verwerken. Download alstublieft het CSV-bestand om het te bekijken.", // 300
"PI gebonden CT sync", // 301
"Fout! Geen RDS!", // 302
"Stoppen: BW lang indrukken" // 303
"Stoppen: BW lang indrukken", // 303
"Alleen PS" // 304
},
{ "Polski", // Polish
@@ -921,7 +923,8 @@ static const char* const myLanguage[21][304] PROGMEM = {
"Wykaz zawiera ponad 130 wpisów, których przeglądarka nie może pokazać. Pobierz plik CSV, aby je przetworzyć.", // 300
"Synch. CT przy zablokowanym PI", // 301
"Błąd! Brak sygnału RDS", // 302
"Hold BW to stop" // 303
"Hold BW to stop", // 303
"PS Only" // 304
},
{ "Hrvatski", // Croatian
@@ -1227,7 +1230,8 @@ static const char* const myLanguage[21][304] PROGMEM = {
"The logbook contains over 130 entries, which the viewer cannot process. Please download the CSV file to process it.", // 300
"PI locked CT sync", // 301
"Error! No RDS signal", // 302
"Hold BW to stop" // 303
"Hold BW to stop", // 303
"PS Only" // 304
},
{ "Ελληνικά", // Greek
@@ -1533,7 +1537,8 @@ static const char* const myLanguage[21][304] PROGMEM = {
"Το βιβλίο περιέχει πάνω από 130 καταγραφές, και είναι αδύνατη η επεξεργασία τους από το χρήστη. Κάντε λήψη του αρχείου CSV για να το επεξεργαστείτε.", // 300
"Συγχρονισμός CT σε\nκλείδωμα PI ", // 301
"Δεν υπάρχει σήμα RDS!", // 302
"Hold BW to stop" // 303
"Hold BW to stop", // 303
"PS Only" // 304
},
{ "Română", // Romanian
@@ -1839,7 +1844,8 @@ static const char* const myLanguage[21][304] PROGMEM = {
"Jurnalul conține peste 130 de intrări, pe care vizualizatorul nu le poate procesa. Te rog descarcă fișierul CSV pentru a le procesa.", // 300
"PI blocat pe sincronizare CT", // 301
"Eroare! Fără semnal RDS", // 302
"Hold BW to stop" // 303
"Hold BW to stop", // 303
"PS Only" // 304
},
{ "Deutsch", // German
@@ -2145,7 +2151,8 @@ static const char* const myLanguage[21][304] PROGMEM = {
"Das Logbuch enthält mehr als 130 Einträge, was das Anzeigeprogramm nicht verarbeiten kann. Bitte lade die CSV-Datei zum Verarbeiten herunter.", // 300
"Synchronisiere CT\nbei bestimmtem PI", // 301
"Fehler! Kein RDS-Signal", // 302
"Hold BW to stop" // 303
"Hold BW to stop", // 303
"PS Only" // 304
},
{ "Čeština", // Czech
@@ -2451,7 +2458,8 @@ static const char* const myLanguage[21][304] PROGMEM = {
"Logbook obsahuje více než 130 položek, které prohlížeč nedokáže zpracovat. Pro zpracování všech položek si stáhněte CSV soubor.", // 300
"Synchronizovat CT, když je PI uzamčeno", // 301
"Chyba! Žádný RDS signál", // 302
"Hold BW to stop" // 303
"Hold BW to stop", // 303
"PS Only" // 304
},
{ "Magyar", // Hungarian
@@ -2757,7 +2765,8 @@ static const char* const myLanguage[21][304] PROGMEM = {
"The logbook contains over 130 entries, which the viewer cannot process. Please download the CSV file to process it.", // 300
"PI locked CT sync", // 301
"Error! No RDS signal", // 302
"Hold BW to stop" // 303
"Hold BW to stop", // 303
"PS Only" // 304
},
{ "Français", // French
@@ -3063,7 +3072,8 @@ static const char* const myLanguage[21][304] PROGMEM = {
"Le journal de bord contient plus de 130 entrées que le spectateur ne peut pas traiter. Télécharger le fichier CSV pour le traiter.", // 300
"Synch CT sur\nPI verrouillé", // 301
"Erreur ! Pas de signal RDS", // 302
"Hold BW to stop" // 303
"Hold BW to stop", // 303
"PS Only" // 304
},
{ "Български", // Bulgarian
@@ -3369,7 +3379,8 @@ static const char* const myLanguage[21][304] PROGMEM = {
"The logbook contains over 130 entries, which the viewer cannot process. Please download the CSV file to process it.", // 300
"PI locked CT sync", // 301
"Error! No RDS signal", // 302
"Hold BW to stop" // 303
"Hold BW to stop", // 303
"PS Only" // 304
},
{ "Русский", // Russian
@@ -3675,7 +3686,8 @@ static const char* const myLanguage[21][304] PROGMEM = {
"В журнале содержится более 130 записей, которые программа просмотра не может обработать. Загрузите файл CSV для его обработки.", // 300
"PI-синхронизация трансформатора тока с блокировкой", // 301
"Ошибка! Нет сигнала RDS", // 302
"Hold BW to stop" // 303
"Hold BW to stop", // 303
"PS Only" // 304
},
{ "Українська", // Ukranian
@@ -3981,7 +3993,8 @@ static const char* const myLanguage[21][304] PROGMEM = {
"Журнал містить понад 130 записів, які програма перегляду не може обробити. Будь ласка, завантажте файл CSV, щоб обробити його.", // 300
"PI locked CT sync", // 301
"Помилка! Немає сигналу RDS", // 302
"Hold BW to stop" // 303
"Hold BW to stop", // 303
"PS Only" // 304
},
{ "Italiano", // Italian
@@ -4287,7 +4300,8 @@ static const char* const myLanguage[21][304] PROGMEM = {
"The logbook contains over 130 entries, which the viewer cannot process. Please download the CSV file to process it.",// 300
"PI locked CT sync", // 301
"Error! No RDS signal", // 302
"Hold BW to stop" // 303
"Hold BW to stop", // 303
"PS Only" // 304
},
{ "Simplified Chinese", // Simplified Chinese
@@ -4593,7 +4607,8 @@ static const char* const myLanguage[21][304] PROGMEM = {
"The logbook contains over 130 entries, which the viewer cannot process. Please download the CSV file to process it.", // 300
"PI locked CT sync", // 301
"错误! 无RDS信号", // 302
"Hold BW to stop" // 303
"Hold BW to stop", // 303
"PS Only" // 304
},
{ "Norsk", // Norwegian
"Rotasjonsretning endret", // 1
@@ -4898,7 +4913,8 @@ static const char* const myLanguage[21][304] PROGMEM = {
"Loggboken inneholder over 130 oppføringer, som en ikke kan behandle. Last ned CSV-filen for å behandle den.", // 300
"PI-låst CT-synk", // 301
"Feil! Ingen RDS-signal", // 302
"Hold BW to stop" // 303
"Hold BW to stop", // 303
"PS Only" // 304
},
{ "Español", // Spanish
@@ -5204,7 +5220,8 @@ static const char* const myLanguage[21][304] PROGMEM = {
"El libro de registro contiene más de 130 entradas que el visor no puede procesar. Descargue el archivo CSV para procesarlo.", // 300
"Sync CT en\nPI bloqueado", // 301
"Error! No hay señal RDS", // 302
"Hold BW to stop" // 303
"Hold BW to stop", // 303
"PS Only" // 304
},
{ "Português", // Portuguese
@@ -5510,7 +5527,8 @@ static const char* const myLanguage[21][304] PROGMEM = {
"O diário de bordo contém mais de 130 entradas que o espectador não consegue processar. Descarregue o ficheiro CSV para processá-lo.", // 300
"Sincronizar CT\nno PI bloqueado", // 301
"Erro! Sem sinal RDS", // 302
"Hold BW to stop" // 303
"Hold BW to stop", // 303
"PS Only" // 304
},
{ "Srpski", // Serbian
@@ -5816,7 +5834,8 @@ static const char* const myLanguage[21][304] PROGMEM = {
"Dnevnik sadrži više od 130 unosa, što viewer ne može obraditi. Preuzmite CSV fajl za obradu.", // 300
"PI zaključan\nCT sinhronizacija", // 301
"Nema RDS signala!", // 302
"Hold BW to stop" // 303
"Hold BW to stop", // 303
"PS Only" // 304
},
{ "Suomi", // Finnish
@@ -6122,7 +6141,8 @@ static const char* const myLanguage[21][304] PROGMEM = {
"Lokikirjassa on yli 130 merkintää, joita katselija ei voi käsitellä. Lataa CSV-tiedosto käsitelläksesi sen.", // 300
"PI lukittu\nCT synkronointi", // 301
"Ei RDS-signaalia!", // 302
"Hold BW to stop" // 303
"Hold BW to stop", // 303
"PS Only" // 304
},
{ "Dansk", // Danish
@@ -6428,7 +6448,8 @@ static const char* const myLanguage[21][304] PROGMEM = {
"Logbogen indeholder over 130 poster, som fremviseren ikke kan behandle. Download CSV-filen for at behandle den.", // 300
"PI låst CT sync", // 301
"Fejl! Ingen RDS signal", // 302
"Hold BW to stop" // 303
"Hold BW to stop", // 303
"PS Only" // 304
}
};
#endif