Added RT buffering as menu option

This commit is contained in:
Sjef Verhoeven PE5PVB
2023-08-06 16:38:26 +02:00
parent 1dbcd7d501
commit d258d1dd3c
6 changed files with 71 additions and 25 deletions

View File

@@ -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);

View File

@@ -628,10 +628,12 @@ void TEF6686::readRDS(bool showrdserrors)
if (rds.rtAB != rtABold) { // Erase old RT, because of AB change
initrt = false;
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;

View File

@@ -166,6 +166,7 @@ typedef struct _rds_ {
bool underscore;
bool rdsreset;
bool pierrors;
bool rtbuffer = true;
} rds_;
typedef struct _af_ {

View File

@@ -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

View File

@@ -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;

View File

@@ -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
}
};