diff --git a/TEF6686_ESP32.ino b/TEF6686_ESP32.ino index 15893a4..fab3fc3 100644 --- a/TEF6686_ESP32.ino +++ b/TEF6686_ESP32.ino @@ -1690,7 +1690,7 @@ void ButtonPress() { tft.setTextColor(TFT_WHITE); tft.drawCentreString(myLanguage[language][68], 155, 70, GFXFF); tft.setTextColor(TFT_YELLOW); - if (specialstepOIRT) tft.drawCentreString("ON", 155, 110, GFXFF); else tft.drawCentreString("OFF", 155, 110, GFXFF); + if (specialstepOIRT) tft.drawCentreString(myLanguage[language][42], 155, 110, GFXFF); else tft.drawCentreString(myLanguage[language][30], 155, 110, GFXFF); break; } break; diff --git a/src/TEF6686.cpp b/src/TEF6686.cpp index 5fb3d1c..de856b3 100644 --- a/src/TEF6686.cpp +++ b/src/TEF6686.cpp @@ -306,7 +306,7 @@ void TEF6686::readRDS(bool showrdserrors) switch (rds.rdsB >> 11) { case RDS_GROUP_0A: - case RDS_GROUP_0B: { + { //PS decoder if (showrdserrors || rds.correct) { @@ -417,6 +417,7 @@ void TEF6686::readRDS(bool showrdserrors) case RDS_GROUP_4A: case RDS_GROUP_4B: { if (rds.correct) { + // CT uint32_t mjd; rds.hasCT = true; mjd = (rds.rdsB & 0x03); @@ -446,7 +447,21 @@ void TEF6686::readRDS(bool showrdserrors) } } break; - case RDS_GROUP_10A: + case RDS_GROUP_10A: { + if (rds.correct) { + // PTYN + offset = bitRead(rds.rdsB, 0); // Get char offset + + ptyn_buffer[(offset * 4) + 0] = rds.rdsC >> 8; // Get position 1 and 5 + ptyn_buffer[(offset * 4) + 1] = rds.rdsC & 0xFF; // Get position 2 and 6 + ptyn_buffer[(offset * 4) + 2] = rds.rdsD >> 8; // Get position 3 and 7 + ptyn_buffer[(offset * 4) + 3] = rds.rdsD & 0xFF; // Get position 4 and 8 + 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 + } + } break; + case RDS_GROUP_10B: case RDS_GROUP_11A: case RDS_GROUP_11B: @@ -541,7 +556,8 @@ void TEF6686::readRDS(bool showrdserrors) case RDS_GROUP_14A: { if (rds.correct) rds.hasEON = true; // Group is there, so we have EON - } break; + } + break; } } rdsBprevious = rds.rdsB; @@ -569,6 +585,8 @@ void TEF6686::clearRDS (bool fullsearchrds) for (i = 0; i < 9; i++) { ps_buffer[i] = 0; PStext[i] = L'\0'; + ptyn_buffer[i] = 0; + PTYNtext[i] = L'\0'; } for (i = 0; i < 65; i++) rt_buffer[i] = 0; for (i = 0; i < 18; i++) rds.stationType[i] = 0; @@ -635,7 +653,7 @@ String TEF6686::convertToUTF8(const wchar_t* input) { return output; } -String TEF6686::extractUTF8Substring(const String& utf8String, size_t start, size_t length, bool under) { +String TEF6686::extractUTF8Substring(const String & utf8String, size_t start, size_t length, bool under) { String substring; size_t utf8Length = utf8String.length(); size_t utf8Index = 0; diff --git a/src/TEF6686.h b/src/TEF6686.h index 00778b7..f21ae43 100644 --- a/src/TEF6686.h +++ b/src/TEF6686.h @@ -101,6 +101,7 @@ typedef struct _rds_ { String RTTitle; String RTHost; String RTEvent; + String PTYN; char stationType[18]; char picode[6]; uint16_t hours, minutes, days, months, years, offsetplusmin, rdsA, rdsB, rdsC, rdsD, rdsErr; @@ -189,6 +190,7 @@ class TEF6686 { String extractUTF8Substring(const String& utf8String, size_t start, size_t length, bool under); char ps_buffer[9]; char ps_buffer2[9]; + char ptyn_buffer[9]; bool ps_process; bool rt_process; char rt_buffer[65]; @@ -203,6 +205,7 @@ class TEF6686 { uint16_t rdsDprevious; bool rtABold; wchar_t PStext[9] = L""; + wchar_t PTYNtext[9] = L""; byte ps_counter; char musicArtist[45]; char musicTitle[45];