diff --git a/src/TEF6686.cpp b/src/TEF6686.cpp index 3f59ca9..b0a42cc 100644 --- a/src/TEF6686.cpp +++ b/src/TEF6686.cpp @@ -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(currentChar); break; case 0x5E: output[i] = L'―'; break; case 0x5F: output[i] = L'_'; break; diff --git a/src/TEF6686.h b/src/TEF6686.h index 869d648..ea27b1e 100644 --- a/src/TEF6686.h +++ b/src/TEF6686.h @@ -719,7 +719,7 @@ class TEF6686 { uint8_t rdsblock; bool mute; bool afmethodB; - bool underscore; + byte underscore; bool ps_process; byte af_updatecounter; diff --git a/src/gui.cpp b/src/gui.cpp index 86fb114..13f5f37 100644 --- a/src/gui.cpp +++ b/src/gui.cpp @@ -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; diff --git a/src/language.h b/src/language.h index 384ff5a..00281dc 100644 --- a/src/language.h +++ b/src/language.h @@ -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 \ No newline at end of file