From d258d1dd3cdf7caeb5834289e6643db2adf812d1 Mon Sep 17 00:00:00 2001 From: Sjef Verhoeven PE5PVB Date: Sun, 6 Aug 2023 16:38:26 +0200 Subject: [PATCH] Added RT buffering as menu option --- TEF6686_ESP32.ino | 7 +++++-- src/TEF6686.cpp | 14 ++++++++----- src/TEF6686.h | 1 + src/constants.h | 3 ++- src/gui.cpp | 21 ++++++++++++++++++++ src/language.h | 50 +++++++++++++++++++++++++++++++---------------- 6 files changed, 71 insertions(+), 25 deletions(-) diff --git a/TEF6686_ESP32.ino b/TEF6686_ESP32.ino index ab01e83..eb4f338 100644 --- a/TEF6686_ESP32.ino +++ b/TEF6686_ESP32.ino @@ -352,6 +352,7 @@ void setup() { HighCutLevel = EEPROM.readByte(EE_BYTE_HIGHCUTLEVEL); HighCutOffset = EEPROM.readByte(EE_BYTE_HIGHCUTOFFSET); LevelOffset = EEPROM.readByte(EE_BYTE_LEVELOFFSET); + radio.rds.rtbuffer = EEPROM.readByte(EE_BYTE_RTBUFFER); edgebeep = EEPROM.readByte(EE_BYTE_EDGEBEEP); softmuteam = EEPROM.readByte(EE_BYTE_SOFTMUTEAM); softmutefm = EEPROM.readByte(EE_BYTE_SOFTMUTEFM); @@ -1802,7 +1803,8 @@ void ModeButtonPress() { EEPROM.writeByte(EE_BYTE_BANDAM, bandAM); EEPROM.writeByte(EE_BYTE_HIGHCUTLEVEL, HighCutLevel); EEPROM.writeByte(EE_BYTE_HIGHCUTOFFSET, HighCutOffset); - EEPROM.writeInt(EE_BYTE_LEVELOFFSET, LevelOffset); + EEPROM.writeByte(EE_BYTE_LEVELOFFSET, LevelOffset); + EEPROM.writeByte(EE_BYTE_RTBUFFER, radio.rds.rtbuffer); EEPROM.writeByte(EE_BYTE_EDGEBEEP, edgebeep); EEPROM.writeByte(EE_BYTE_SOFTMUTEAM, softmuteam); EEPROM.writeByte(EE_BYTE_SOFTMUTEFM, softmutefm); @@ -3238,7 +3240,8 @@ void DefaultSettings(byte userhardwaremodel) { EEPROM.writeByte(EE_BYTE_BANDAM, AM_BAND_ALL); EEPROM.writeByte(EE_BYTE_HIGHCUTLEVEL, 70); EEPROM.writeByte(EE_BYTE_HIGHCUTOFFSET, 0); - EEPROM.writeInt(EE_BYTE_LEVELOFFSET, 0); + EEPROM.writeByte(EE_BYTE_LEVELOFFSET, 0); + EEPROM.writeByte(EE_BYTE_RTBUFFER, 1); EEPROM.writeByte(EE_BYTE_EDGEBEEP, 0); EEPROM.writeByte(EE_BYTE_SOFTMUTEAM, 0); EEPROM.writeByte(EE_BYTE_SOFTMUTEFM, 0); diff --git a/src/TEF6686.cpp b/src/TEF6686.cpp index 3dadee7..84c66e7 100644 --- a/src/TEF6686.cpp +++ b/src/TEF6686.cpp @@ -628,10 +628,12 @@ void TEF6686::readRDS(bool showrdserrors) if (rds.rtAB != rtABold) { // Erase old RT, because of AB change initrt = false; - wchar_t RTtext[65] = L""; // Create 16 bit char buffer for Extended ASCII - RDScharConverter(rt_buffer, RTtext, sizeof(RTtext) / sizeof(wchar_t), true); // Convert 8 bit ASCII to 16 bit ASCII - rds.stationText = convertToUTF8(RTtext); // Convert RDS characterset to ASCII - rds.stationText = extractUTF8Substring(rds.stationText, 0, 64, true); // Make sure RT does not exceed 64 characters + if (rds.rtbuffer) { + wchar_t RTtext[65] = L""; // Create 16 bit char buffer for Extended ASCII + RDScharConverter(rt_buffer, RTtext, sizeof(RTtext) / sizeof(wchar_t), true); // Convert 8 bit ASCII to 16 bit ASCII + rds.stationText = convertToUTF8(RTtext); // Convert RDS characterset to ASCII + rds.stationText = extractUTF8Substring(rds.stationText, 0, 64, true); // Make sure RT does not exceed 64 characters + } for (byte i = 0; i < 64; i++) { rt_buffer[i] = 0x20; @@ -646,7 +648,7 @@ void TEF6686::readRDS(bool showrdserrors) rt_buffer[offset + 2] = rds.rdsD >> 8; // Thirth character of segment rt_buffer[offset + 3] = rds.rdsD & 0xff; // Fourth character of segment - if (initrt) { + if (initrt || !rds.rtbuffer) { wchar_t RTtext[65] = L""; // Create 16 bit char buffer for Extended ASCII RDScharConverter(rt_buffer, RTtext, sizeof(RTtext) / sizeof(wchar_t), true); // Convert 8 bit ASCII to 16 bit ASCII rds.stationText = convertToUTF8(RTtext); // Convert RDS characterset to ASCII @@ -757,12 +759,14 @@ void TEF6686::readRDS(bool showrdserrors) runningbit = bitRead(lowByte(rds.rdsB), 3); switch (rds.rdsplusTag1) { + case 0: rds.rdsplusTag1 = 169; break; case 1 ... 53: rds.rdsplusTag1 += 111; break; case 59 ... 63: rds.rdsplusTag1 += 105; break; default: rds.rdsplusTag1 = 169; break; } switch (rds.rdsplusTag2) { + case 0: rds.rdsplusTag2 = 169; break; case 1 ... 53: rds.rdsplusTag2 += 111; break; case 59 ... 63: rds.rdsplusTag2 += 105; break; default: rds.rdsplusTag2 = 169; break; diff --git a/src/TEF6686.h b/src/TEF6686.h index b59fe1a..840390b 100644 --- a/src/TEF6686.h +++ b/src/TEF6686.h @@ -166,6 +166,7 @@ typedef struct _rds_ { bool underscore; bool rdsreset; bool pierrors; + bool rtbuffer = true; } rds_; typedef struct _af_ { diff --git a/src/constants.h b/src/constants.h index 0dd447f..8898c53 100644 --- a/src/constants.h +++ b/src/constants.h @@ -101,7 +101,7 @@ // EEPROM index defines #define EE_PRESETS_CNT 30 -#define EE_CHECKBYTE_VALUE 32 // 0 ~ 255,add new entry, change for new value +#define EE_CHECKBYTE_VALUE 33 // 0 ~ 255,add new entry, change for new value #define EE_TOTAL_CNT 274 #define EE_UINT16_FREQUENCY_FM 0 @@ -117,6 +117,7 @@ #define EE_BYTE_HIGHCUTLEVEL 22 #define EE_BYTE_HIGHCUTOFFSET 23 #define EE_BYTE_LEVELOFFSET 24 +#define EE_BYTE_RTBUFFER 25 #define EE_BYTE_EDGEBEEP 28 #define EE_BYTE_SOFTMUTEAM 29 #define EE_BYTE_SOFTMUTEFM 30 diff --git a/src/gui.cpp b/src/gui.cpp index fc4c7f2..a772f27 100644 --- a/src/gui.cpp +++ b/src/gui.cpp @@ -480,17 +480,21 @@ void BuildMenu() { case 5: tftPrint(-1, myLanguage[language][108], 8, 36, ActiveColor, ActiveColorSmooth, 16); tftPrint(-1, myLanguage[language][173], 8, 56, ActiveColor, ActiveColorSmooth, 16); + tftPrint(-1, myLanguage[language][176], 8, 76, ActiveColor, ActiveColorSmooth, 16); switch (hardwaremodel) { case BASE_ILI9341: tftPrint(1, myLanguage[language][109], 310, 36, PrimaryColor, PrimaryColorSmooth, 16); break; case PORTABLE_ILI9341: tftPrint(1, myLanguage[language][110 ], 310, 36, PrimaryColor, PrimaryColorSmooth, 16); break; case PORTABLE_TOUCH_ILI9341: tftPrint(1, myLanguage[language][111], 310, 36, PrimaryColor, PrimaryColorSmooth, 16); break; } + switch (batteryoptions) { case BATTERY_NONE: tftPrint(1, myLanguage[language][30], 310, 56, PrimaryColor, PrimaryColorSmooth, 16); break; case BATTERY_VALUE: tftPrint(1, myLanguage[language][174], 310, 56, PrimaryColor, PrimaryColorSmooth, 16); break; case BATTERY_PERCENT: tftPrint(1, myLanguage[language][175], 310, 56, PrimaryColor, PrimaryColorSmooth, 16); break; } + + if (radio.rds.rtbuffer) tftPrint(1, myLanguage[language][42], 310, 76, PrimaryColor, PrimaryColorSmooth, 16); else tftPrint(1, myLanguage[language][30], 310, 76, PrimaryColor, PrimaryColorSmooth, 16); break; } @@ -1130,6 +1134,12 @@ void MenuUp() { } batteryoptionsold = batteryoptions; break; + + case 70: + if (radio.rds.rtbuffer) tftPrint(0, myLanguage[language][42], 155, 118, BackgroundColor, BackgroundColor, 28); else tftPrint(0, myLanguage[language][30], 155, 118, BackgroundColor, BackgroundColor, 28); + if (radio.rds.rtbuffer) radio.rds.rtbuffer = false; else radio.rds.rtbuffer = true; + if (radio.rds.rtbuffer) tftPrint(0, myLanguage[language][42], 155, 118, PrimaryColor, PrimaryColorSmooth, 28); else tftPrint(0, myLanguage[language][30], 155, 118, PrimaryColor, PrimaryColorSmooth, 28); + break; } break; } @@ -1523,6 +1533,13 @@ void MenuDown() { } batteryoptionsold = batteryoptions; break; + + case 70: + if (radio.rds.rtbuffer) tftPrint(0, myLanguage[language][42], 155, 118, BackgroundColor, BackgroundColor, 28); else tftPrint(0, myLanguage[language][30], 155, 118, BackgroundColor, BackgroundColor, 28); + if (radio.rds.rtbuffer) radio.rds.rtbuffer = false; else radio.rds.rtbuffer = true; + if (radio.rds.rtbuffer) tftPrint(0, myLanguage[language][42], 155, 118, PrimaryColor, PrimaryColorSmooth, 28); else tftPrint(0, myLanguage[language][30], 155, 118, PrimaryColor, PrimaryColorSmooth, 28); + break; + } break; } @@ -1821,6 +1838,10 @@ void DoMenu() { } batteryoptionsold = batteryoptions; break; + + case 70: + tftPrint(0, myLanguage[language][176], 155, 78, ActiveColor, ActiveColorSmooth, 28); + if (radio.rds.rtbuffer) tftPrint(0, myLanguage[language][42], 155, 118, PrimaryColor, PrimaryColorSmooth, 28); else tftPrint(0, myLanguage[language][30], 155, 118, PrimaryColor, PrimaryColorSmooth, 28); } break; diff --git a/src/language.h b/src/language.h index fea0776..b9c2a16 100644 --- a/src/language.h +++ b/src/language.h @@ -1,6 +1,6 @@ // [number of languages][number of texts][max. length of text] -static const char* const myLanguage[16][176] = { +static const char* const myLanguage[16][177] = { { "English", // English "Rotary direction changed", // 1 "Please release button", // 2 @@ -176,7 +176,8 @@ static const char* const myLanguage[16][176] = { "Indigo", // 172 "Battery options", // 173 "Show voltage", // 174 - "Show percentage" // 175 + "Show percentage", // 175 + "RT buffering" // 176 }, { "Nederlands", // Dutch @@ -354,7 +355,8 @@ static const char* const myLanguage[16][176] = { "Indigo", // 172 "Battery options", // 173 "Show voltage", // 174 - "Show percentage" // 175 + "Show percentage", // 175 + "RT buffering" // 176 }, { "Polski", // Polish @@ -532,7 +534,8 @@ static const char* const myLanguage[16][176] = { "Indigo", // 172 "Opcje baterii", // 173 "Pokaz napiecie", // 174 - "Pokaz procent nalad." // 175 + "Pokaz procent nalad.", // 175 + "RT buffering" // 176 }, { "Hrvatski", // Croatian @@ -710,7 +713,8 @@ static const char* const myLanguage[16][176] = { "Indigo", // 172 "Battery options", // 173 "Show voltage", // 174 - "Show percentage" // 175 + "Show percentage", // 175 + "RT buffering" // 176 }, { "Ελληνικά", // Greek @@ -888,7 +892,8 @@ static const char* const myLanguage[16][176] = { "Ινδικό", // 172 "Επιλογές μπαταρίας", // 173 "Εμφάνιση τάσης", // 174 - "Εμφάνιση ποσοστού" // 175 + "Εμφάνιση ποσοστού", // 175 + "RT buffering" // 176 }, { "Romana", // Romanian @@ -1066,7 +1071,8 @@ static const char* const myLanguage[16][176] = { "Indigo", // 172 "Battery options", // 173 "Show voltage", // 174 - "Show percentage" // 175 + "Show percentage", // 175 + "RT buffering" // 176 }, { "Deutsch", // German @@ -1244,7 +1250,8 @@ static const char* const myLanguage[16][176] = { "Indigo", // 172 "Akkuoptionen", // 173 "Zeige Spannung", // 174 - "Zeige Prozente" // 175 + "Zeige Prozente", // 175 + "RT buffering" // 176 }, { "Czech", // Czech @@ -1422,7 +1429,8 @@ static const char* const myLanguage[16][176] = { "Indigo", // 172 "Battery options", // 173 "Show voltage", // 174 - "Show percentage" // 175 + "Show percentage", // 175 + "RT buffering" // 176 }, { "Slovak", // Slovak @@ -1600,7 +1608,8 @@ static const char* const myLanguage[16][176] = { "Indigo", // 172 "Battery options", // 173 "Show voltage", // 174 - "Show percentage" // 175 + "Show percentage", // 175 + "RT buffering" // 176 }, { "Français", // French @@ -1778,7 +1787,8 @@ static const char* const myLanguage[16][176] = { "Indigo", // 172 "Options de batterie", // 173 "Montrer la tension", // 174 - "Montrer le pourcentage" // 175 + "Montrer le pourcentage", // 175 + "RT buffering" // 176 }, { "Български", // Bulgarian @@ -1956,7 +1966,8 @@ static const char* const myLanguage[16][176] = { "Indigo", // 172 "Battery options", // 173 "Show voltage", // 174 - "Show percentage" // 175 + "Show percentage", // 175 + "RT buffering" // 176 }, { "Русский", // Russian @@ -2134,7 +2145,8 @@ static const char* const myLanguage[16][176] = { "Индиго", // 172 "Варианты батареи", // 173 "Показать значение батареи", // 174 - "Показать процент заряда батареи" // 175 + "Показать процент заряда батареи", // 175 + "RT buffering" // 176 }, { "Українська", // Ukranian @@ -2312,7 +2324,8 @@ static const char* const myLanguage[16][176] = { "Індиго", // 172 "Варіанти батареї", // 173 "Показати заряд батареї", // 174 - "Показати відсоток батареї" // 175 + "Показати відсоток батареї", // 175 + "RT buffering" // 176 }, { "Italiano", // Italian @@ -2490,7 +2503,8 @@ static const char* const myLanguage[16][176] = { "Indigo", // 172 "Battery options", // 173 "Show voltage", // 174 - "Show percentage" // 175 + "Show percentage", // 175 + "RT buffering" // 176 }, { "Simplified Chinese", // Simplified Chinese @@ -2668,7 +2682,8 @@ static const char* const myLanguage[16][176] = { "靛青", // 172 "显示电池", // 173 "电压值", // 174 - "电池百分比" // 175 + "电池百分比", // 175 + "RT buffering" // 176 }, { "Norsk", // Norwegian @@ -2846,7 +2861,8 @@ static const char* const myLanguage[16][176] = { "Indigo", // 172 "Batterialternativer", // 173 "Vis batteriverdi", // 174 - "Vis batteriprosent" // 175 + "Vis batteriprosent", // 175 + "RT buffering" // 176 } };