Merge branch 'main' into New_Model_DP_666

This commit is contained in:
Leon
2024-05-22 13:29:47 +08:00
5 changed files with 234 additions and 136 deletions
+1 -1
View File
@@ -835,7 +835,7 @@ void loop() {
if (scanmem) { if (scanmem) {
memorypos++; memorypos++;
if (memorypos > scanstop) memorypos = scanstart; if (memorypos > scanstop) memorypos = scanstart;
while (IsStationEmpty() || presets[memorypos].band != BAND_FM) { while (IsStationEmpty() || (presets[memorypos].band != BAND_FM && presets[memorypos].band != BAND_OIRT)) {
memorypos++; memorypos++;
if (memorypos > scanstop) { if (memorypos > scanstop) {
memorypos = scanstart; memorypos = scanstart;
+107 -18
View File
@@ -608,6 +608,7 @@ void TEF6686::readRDS(byte showrdserrors) {
if (offset == 3 && (ps_process || !rds.fastps)) { // Last chars are received if (offset == 3 && (ps_process || !rds.fastps)) { // Last chars are received
if (strcmp(ps_buffer, ps_buffer2) == 0) { // When no difference between current and buffer, let's go... 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), true); // Convert 8 bit ASCII to 16 bit ASCII
String utf8String = convertToUTF8(PStext); // Convert RDS characterset to 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, true); // Make sure PS does not exceed 8 characters
@@ -1152,10 +1153,10 @@ void TEF6686::readRDS(byte showrdserrors) {
initab = false; initab = false;
} }
byte endmarker = 64; byte endmarkerRT64 = 64;
for (byte i = 0; i < endmarker; i++) { for (byte i = 0; i < endmarkerRT64; i++) {
if (rt_buffer[i] == 0x0d) { if (rt_buffer[i] == 0x0d) {
endmarker = i; endmarkerRT64 = i;
break; break;
} }
} }
@@ -1166,7 +1167,8 @@ void TEF6686::readRDS(byte showrdserrors) {
wchar_t RTtext[65] = L""; // Create 16 bit char buffer for Extended ASCII 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 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 = convertToUTF8(RTtext); // Convert RDS characterset to ASCII
rds.stationText = extractUTF8Substring(rds.stationText, 0, endmarker, true); // Make sure RT does not exceed 64 characters rds.stationText = extractUTF8Substring(rds.stationText, 0, endmarkerRT64, true);// Make sure RT does not exceed 64 characters
rds.stationText = trimTrailingSpaces(rds.stationText); // Trim empty spaces at the end
} }
for (byte i = 0; i < 64; i++) { for (byte i = 0; i < 64; i++) {
@@ -1187,7 +1189,8 @@ void TEF6686::readRDS(byte showrdserrors) {
wchar_t RTtext[65] = L""; // Create 16 bit char buffer for Extended ASCII 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 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 = convertToUTF8(RTtext); // Convert RDS characterset to ASCII
rds.stationText = extractUTF8Substring(rds.stationText, 0, endmarker, true); // Make sure RT does not exceed 64 characters rds.stationText = extractUTF8Substring(rds.stationText, 0, endmarkerRT64, true); // Make sure RT does not exceed 64 characters
rds.stationText = trimTrailingSpaces(rds.stationText); // Trim empty spaces at the end
} }
for (int i = 0; i < 64; i++) rt_buffer2[i] = rt_buffer[i]; for (int i = 0; i < 64; i++) rt_buffer2[i] = rt_buffer[i];
@@ -1212,10 +1215,10 @@ void TEF6686::readRDS(byte showrdserrors) {
rt_buffer32[offset + 0] = rds.rdsD >> 8; // First character of segment rt_buffer32[offset + 0] = rds.rdsD >> 8; // First character of segment
rt_buffer32[offset + 1] = rds.rdsD & 0xff; // Second character of segment rt_buffer32[offset + 1] = rds.rdsD & 0xff; // Second character of segment
byte endmarker = 32; byte endmarkerRT32 = 32;
for (byte i = 0; i < endmarker; i++) { for (byte i = 0; i < endmarkerRT32; i++) {
if (rt_buffer[i] == 0x0d) { if (rt_buffer[i] == 0x0d) {
endmarker = i; endmarkerRT32 = i;
break; break;
} }
} }
@@ -1223,7 +1226,8 @@ void TEF6686::readRDS(byte showrdserrors) {
wchar_t RTtext[33] = L""; // Create 16 bit char buffer for Extended ASCII wchar_t RTtext[33] = L""; // Create 16 bit char buffer for Extended ASCII
RDScharConverter(rt_buffer32, RTtext, sizeof(RTtext) / sizeof(wchar_t), true); // Convert 8 bit ASCII to 16 bit ASCII RDScharConverter(rt_buffer32, RTtext, sizeof(RTtext) / sizeof(wchar_t), true); // Convert 8 bit ASCII to 16 bit ASCII
rds.stationText32 = convertToUTF8(RTtext); // Convert RDS characterset to ASCII rds.stationText32 = convertToUTF8(RTtext); // Convert RDS characterset to ASCII
rds.stationText32 = extractUTF8Substring(rds.stationText32, 0, endmarker, true); // Make sure RT does not exceed 32 characters rds.stationText32 = extractUTF8Substring(rds.stationText32, 0, endmarkerRT32, true);// Make sure RT does not exceed 32 characters
rds.stationText = trimTrailingSpaces(rds.stationText); // Trim empty spaces at the end
} }
} break; } break;
@@ -1256,7 +1260,13 @@ void TEF6686::readRDS(byte showrdserrors) {
if (rds.rdsD == 0x0093) { // Check for DAB+ AF application if (rds.rdsD == 0x0093) { // Check for DAB+ AF application
rds.hasDABAF = true; // Set flag rds.hasDABAF = true; // Set flag
DABAFblock = ((rds.rdsB & 0x1F) >> 1) * 2; // Get RT+ Block DABAFblock = ((rds.rdsB & 0x1F) >> 1) * 2; // Get DAB AF Block
}
if (rds.rdsD == 0x6552) { // Check for Enhanced RT application
_hasEnhancedRT = true; // Set flag
eRTblock = ((rds.rdsB & 0x1F) >> 1) * 2; // Get eRT block
eRTcoding = bitRead(rds.rdsC, 0); // 0 = UCS-2, 1 = UTF-8
} }
} }
} break; } break;
@@ -1371,6 +1381,34 @@ void TEF6686::readRDS(byte showrdserrors) {
rds.RTContent2 = convertToUTF8(RTtext2); // Convert RDS characterset to ASCII rds.RTContent2 = convertToUTF8(RTtext2); // Convert RDS characterset to ASCII
rds.RTContent2 = extractUTF8Substring(rds.RTContent2, 0, 44, false); // Make sure RT does not exceed 32 characters rds.RTContent2 = extractUTF8Substring(rds.RTContent2, 0, 44, false); // Make sure RT does not exceed 32 characters
} }
// eRT decoding
if ((!rdsBerrorThreshold && !rdsCerrorThreshold && !rdsDerrorThreshold) && eRTblock == rdsblock && _hasEnhancedRT) {
offset = (rds.rdsB & 0x1f) * 4;
eRT_buffer[offset + 0] = rds.rdsC >> 8; // First character of segment
eRT_buffer[offset + 1] = rds.rdsC & 0xff; // Second character of segment
eRT_buffer[offset + 2] = rds.rdsD >> 8; // Thirth character of segment
eRT_buffer[offset + 3] = rds.rdsD & 0xff; // Fourth character of segment
eRT_buffer[127] = '\0';
byte endmarkereRT = 127;
bool foundendmarker = false;
for (byte i = 0; i < endmarkereRT; i++) {
if (eRT_buffer[i] == 0x0d) {
foundendmarker = true;
endmarkereRT = i;
break;
}
}
if (offset == 0 || foundendmarker) {
if (eRTcoding) rds.enhancedRTtext = eRT_buffer; else rds.enhancedRTtext = utf8ToUcs2String(eRT_buffer); // Convert to UTF-8 or UCS-2
rds.enhancedRTtext = trimTrailingSpaces(rds.enhancedRTtext);
if (rds.enhancedRTtext.length() > 0) rds.hasEnhancedRT = true;
}
}
if (!rdsBerrorThreshold && rdsblock == 16 && (bitRead(rds.rdsB, 15))) rds.hasTMC = true; // TMC flag if (!rdsBerrorThreshold && rdsblock == 16 && (bitRead(rds.rdsB, 15))) rds.hasTMC = true; // TMC flag
if ((!rdsBerrorThreshold && !rdsCerrorThreshold && !rdsDerrorThreshold) && DABAFblock == rdsblock && rds.hasDABAF) { if ((!rdsBerrorThreshold && !rdsCerrorThreshold && !rdsDerrorThreshold) && DABAFblock == rdsblock && rds.hasDABAF) {
@@ -1502,7 +1540,7 @@ void TEF6686::readRDS(byte showrdserrors) {
case RDS_GROUP_15A: { case RDS_GROUP_15A: {
if (showrdserrors == 3 || (!rdsBerrorThreshold && !rdsCerrorThreshold && !rdsDerrorThreshold)) { if (showrdserrors == 3 || (!rdsBerrorThreshold && !rdsCerrorThreshold && !rdsDerrorThreshold)) {
if (pslong_process) rds.hasLongPS = true; if (pslong_process && rds.stationNameLong.length() > 0) rds.hasLongPS = true;
offset = (rds.rdsB & 0xf) * 4; // Get Long PS character segment offset = (rds.rdsB & 0xf) * 4; // Get Long PS character segment
pslong_buffer2[offset + 0] = pslong_buffer[offset + 0]; // Copy PS long buffer pslong_buffer2[offset + 0] = pslong_buffer[offset + 0]; // Copy PS long buffer
@@ -1517,19 +1555,22 @@ void TEF6686::readRDS(byte showrdserrors) {
pslong_buffer[offset + 3] = rds.rdsD & 0xff; // Fourth character of segment pslong_buffer[offset + 3] = rds.rdsD & 0xff; // Fourth character of segment
pslong_buffer[32] = '\0'; pslong_buffer[32] = '\0';
byte endmarker = 32; byte endmarkerLPS = 32;
for (byte i = 0; i < 33; i++) { bool foundendmarker = false;
for (byte i = 0; i < endmarkerLPS; i++) {
if (pslong_buffer[i] == 0x0d) { if (pslong_buffer[i] == 0x0d) {
endmarker = i; foundendmarker = true;
endmarkerLPS = i;
break; break;
} }
} }
if (offset == 28 && (pslong_process || !rds.fastps)) { // Last chars are received if ((offset == 0 || foundendmarker) && (pslong_process || !rds.fastps)) { // Last chars are received
if (strcmp(pslong_buffer, pslong_buffer2) == 0) { // When no difference between current and buffer, let's go... if (strcmp(pslong_buffer, pslong_buffer2) == 0) { // When no difference between current and buffer, let's go...
pslong_process = true;
RDScharConverter(pslong_buffer, PSLongtext, sizeof(PSLongtext) / sizeof(wchar_t), true); // Convert 8 bit ASCII to 16 bit ASCII RDScharConverter(pslong_buffer, PSLongtext, sizeof(PSLongtext) / sizeof(wchar_t), true); // Convert 8 bit ASCII to 16 bit ASCII
String utf8String = convertToUTF8(PSLongtext); // Convert RDS characterset to ASCII String utf8String = convertToUTF8(PSLongtext); // Convert RDS characterset to ASCII
rds.stationNameLong = extractUTF8Substring(utf8String, 0, endmarker, true); // Make sure PS Long does not exceed 32 characters rds.stationNameLong = extractUTF8Substring(utf8String, 0, endmarkerLPS, true); // Make sure PS Long does not exceed 32 characters
} }
} }
@@ -1540,8 +1581,9 @@ void TEF6686::readRDS(byte showrdserrors) {
if (offset == 16) packet3long = true; if (offset == 16) packet3long = true;
RDScharConverter(pslong_buffer, PSLongtext, sizeof(PSLongtext) / sizeof(wchar_t), true); // Convert 8 bit ASCII to 16 bit ASCII RDScharConverter(pslong_buffer, PSLongtext, sizeof(PSLongtext) / sizeof(wchar_t), true); // Convert 8 bit ASCII to 16 bit ASCII
String utf8String = convertToUTF8(PSLongtext); // Convert RDS characterset to ASCII String utf8String = convertToUTF8(PSLongtext); // Convert RDS characterset to ASCII
rds.stationNameLong = extractUTF8Substring(utf8String, 0, endmarker, true); rds.stationNameLong = extractUTF8Substring(utf8String, 0, endmarkerLPS, true);
if (packet0long && packet1long && packet2long && packet3long) pslong_process = true; // OK, we had one runs, now let's go the idle PS Long writing rds.stationNameLong = trimTrailingSpaces(rds.stationNameLong);
if ((packet0long && packet1long && packet2long && packet3long) || foundendmarker) pslong_process = true; // OK, we had one runs, now let's go the idle PS Long writing
} }
} }
} }
@@ -1564,6 +1606,7 @@ void TEF6686::clearRDS (bool fullsearchrds) {
rds.LICtext = ""; rds.LICtext = "";
rds.stationIDtext = ""; rds.stationIDtext = "";
rds.stationStatetext = ""; rds.stationStatetext = "";
rds.enhancedRTtext = "";
uint8_t i; uint8_t i;
for (i = 0; i < 8; i++) { for (i = 0; i < 8; i++) {
@@ -1580,9 +1623,13 @@ void TEF6686::clearRDS (bool fullsearchrds) {
for (i = 0; i < 64; i++) rt_buffer[i] = 0x20; for (i = 0; i < 64; i++) rt_buffer[i] = 0x20;
rt_buffer[64] = 0; rt_buffer[64] = 0;
for (i = 0; i < 128; i++) eRT_buffer[i] = 0x20;
eRT_buffer[128] = '\0';
for (i = 0; i < 32; i++) { for (i = 0; i < 32; i++) {
rt_buffer32[i] = 0x20; rt_buffer32[i] = 0x20;
pslong_buffer[i] = 0x20; pslong_buffer[i] = 0x20;
pslong_buffer2[i] = 0x20;
PSLongtext[i] = L'\0'; PSLongtext[i] = L'\0';
} }
rt_buffer32[32] = 0; rt_buffer32[32] = 0;
@@ -1667,6 +1714,7 @@ void TEF6686::clearRDS (bool fullsearchrds) {
rds.hasLongPS = false; rds.hasLongPS = false;
rds.hasRDSplus = false; rds.hasRDSplus = false;
rds.hasDABAF = false; rds.hasDABAF = false;
rds.hasEnhancedRT = false;
rt_process = false; rt_process = false;
ps_process = false; ps_process = false;
pslong_process = false; pslong_process = false;
@@ -1704,6 +1752,7 @@ void TEF6686::clearRDS (bool fullsearchrds) {
afmethodBtrigger = false; afmethodBtrigger = false;
correctPIold = 0; correctPIold = 0;
af_number = 0; af_number = 0;
_hasEnhancedRT = false;
} }
void TEF6686::tone(uint16_t time, int16_t amplitude, uint16_t frequency) { void TEF6686::tone(uint16_t time, int16_t amplitude, uint16_t frequency) {
@@ -1924,3 +1973,43 @@ void TEF6686::RDScharConverter(const char* input, wchar_t* output, size_t size,
} }
output[size - 1] = L'\0'; output[size - 1] = L'\0';
} }
String TEF6686::trimTrailingSpaces(String str) {
int end = str.length() - 1;
while (end >= 0 && isspace(str[end])) end--;
return str.substring(0, end + 1);
}
String TEF6686::utf8ToUcs2String(const char* utf8) {
String ucs2;
while (*utf8) {
uint32_t codepoint = 0;
int extraBytes = 0;
if ((*utf8 & 0x80) == 0) {
codepoint = *utf8++;
} else if ((*utf8 & 0xE0) == 0xC0) {
codepoint = *utf8++ & 0x1F;
extraBytes = 1;
} else if ((*utf8 & 0xF0) == 0xE0) {
codepoint = *utf8++ & 0x0F;
extraBytes = 2;
} else if ((*utf8 & 0xF8) == 0xF0) {
codepoint = *utf8++ & 0x07;
extraBytes = 3;
} else {
continue;
}
for (int i = 0; i < extraBytes; i++) {
if ((*utf8 & 0xC0) != 0x80) break;
codepoint = (codepoint << 6) | (*utf8++ & 0x3F);
}
if (codepoint <= 0xFFFF) {
ucs2 += (char)(codepoint >> 8); // High byte
ucs2 += (char)(codepoint & 0xFF); // Low byte
}
}
return ucs2;
}
+9
View File
@@ -570,6 +570,7 @@ typedef struct _rds_ {
String stationIDtext; String stationIDtext;
String stationNameLong; String stationNameLong;
String stationStatetext; String stationStatetext;
String enhancedRTtext;
char stationType[18]; char stationType[18];
char picode[7]; char picode[7];
char stationID[9]; char stationID[9];
@@ -602,6 +603,7 @@ typedef struct _rds_ {
bool hasDABAF; bool hasDABAF;
bool hasLongPS; bool hasLongPS;
bool hasRT; bool hasRT;
bool hasEnhancedRT;
bool hasTP; bool hasTP;
bool hasTA; bool hasTA;
bool hasEON; bool hasEON;
@@ -718,12 +720,16 @@ class TEF6686 {
void RDScharConverter(const char* input, wchar_t* output, size_t size, bool under); void RDScharConverter(const char* input, wchar_t* output, size_t size, bool under);
String convertToUTF8(const wchar_t* input); String convertToUTF8(const wchar_t* input);
String extractUTF8Substring(const String& utf8String, size_t start, size_t length, bool under); String extractUTF8Substring(const String& utf8String, size_t start, size_t length, bool under);
String trimTrailingSpaces(String str);
String eRTconverter(const wchar_t* input);
String utf8ToUcs2String(const char* utf8);
char ps_buffer[9]; char ps_buffer[9];
char ps_buffer2[9]; char ps_buffer2[9];
char ptyn_buffer[9]; char ptyn_buffer[9];
char eon_buffer[20][9]; char eon_buffer[20][9];
bool ps_process; bool ps_process;
bool pslong_process; bool pslong_process;
char eRT_buffer[129];
bool rt_process; bool rt_process;
char rt_buffer[65]; char rt_buffer[65];
char rt_buffer2[65]; char rt_buffer2[65];
@@ -734,6 +740,7 @@ class TEF6686 {
bool ABold; bool ABold;
bool afreset; bool afreset;
bool mpxmode; bool mpxmode;
bool _hasEnhancedRT;
char stationTextBuffer[65]; char stationTextBuffer[65];
uint16_t piold; uint16_t piold;
bool rtABold; bool rtABold;
@@ -758,6 +765,7 @@ class TEF6686 {
bool rdsDerrorThreshold; bool rdsDerrorThreshold;
bool packet0, packet1, packet2, packet3, packet0long, packet1long, packet2long, packet3long; bool packet0, packet1, packet2, packet3, packet0long, packet1long, packet2long, packet3long;
bool afmethodBprobe; bool afmethodBprobe;
bool eRTcoding;
uint16_t rdsCold; uint16_t rdsCold;
uint8_t af_counterb; uint8_t af_counterb;
uint8_t af_number; uint8_t af_number;
@@ -766,6 +774,7 @@ class TEF6686 {
uint16_t correctPIold; uint16_t correctPIold;
uint8_t rtplusblock; uint8_t rtplusblock;
uint8_t DABAFblock; uint8_t DABAFblock;
uint8_t eRTblock;
uint8_t doublecounter; uint8_t doublecounter;
uint16_t doubletestfreq; uint16_t doubletestfreq;
}; };
+104 -104
View File
@@ -1,7 +1,7 @@
#ifndef LANGUAGE_H #ifndef LANGUAGE_H
#define LANGUAGE_H #define LANGUAGE_H
#define VERSION "v2.10 RC3" #define VERSION "v2.10 RC4"
// [number of languages][number of texts] // [number of languages][number of texts]
// *** means the text is the same as in English // *** means the text is the same as in English
@@ -1157,23 +1157,23 @@ static const char* const myLanguage[18][228] PROGMEM = {
}, },
{ "Română", // Romanian { "Română", // Romanian
"Directia rotirii schimbata", // 1 "Direcția rotirii schimbată", // 1
"Eliberati butonul", // 2 "Eliberați butonul", // 2
"Display rasturnat", // 3 "Ecran întors", // 3
"Calibrati instrumentul analog", // 4 "Calibrați instrumentul analog", // 4
"Eliberati butonul la gata", // 5 "Eliberați butonul când este gata", // 5
"encoderul setat pe optic", // 6 "encoderul setat optic", // 6
"encoderul setat pe standard", // 7 "encoderul setat standard", // 7
"FM/AM receptor", // 8 "Receptor FM/AM", // 8
"Lipsa: !Tuner!", // 9 "Lipsă: !Tuner!", // 9
"Volum", // 10 "Volum", // 10
"Convertor", // 11 "Convertor", // 11
"Marginea de jos a benzii", // 12 "Marginea de jos a benzii", // 12
"Marginea de sus a benzii", // 13 "Marginea de sus a benzii", // 13
"FM RF Nivel offset", // 14 "Calibrare nivel RF FM", // 14
"Pragul ptr Stereo", // 15 "Pragul ptr Stereo", // 15
"Limita taiere inalte", // 16 "Limită tăiere înalte", // 16
"Prag taiere inalte", // 17 "Prag tăiere înalte", // 17
"Prag nivel joase", // 18 "Prag nivel joase", // 18
"Contrast", // 19 "Contrast", // 19
"Setare volum", // 20 "Setare volum", // 20
@@ -1182,80 +1182,80 @@ static const char* const myLanguage[18][228] PROGMEM = {
"Setarea limitei de sus a benzii", // 23 "Setarea limitei de sus a benzii", // 23
"Setare nivel decalaj", // 24 "Setare nivel decalaj", // 24
"Setarea pragului sep. Stereo ", // 25 "Setarea pragului sep. Stereo ", // 25
"Setare taiere frecv, inalte ", // 26 "Setare tăiere frecv. înalte ", // 26
"Setare prag taiere inalte", // 27 "Setare prag tăiere înalte", // 27
"Setarea pragului joase", // 28 "Setarea pragului la joase", // 28
"Setare luminozitate display", // 29 "Setare luminozitate ecran", // 29
"Oprit", // 30 "Oprit", // 30
"Ecran blocat!", // 31 "Ecran blocat!", // 31
"ptr deblocare debifati RF+ box", // 32 "ptr deblocare debifati RF+", // 32
"Oprit", // 33 "Oprit", // 33
"SCANEZ...", // 34 "SCANEZ...", // 34
"Tunerul nu este prezent", // 35 "Tunerul nu este prezent", // 35
"AM Antenna gain", // 36 "Reglare nivel antenă AM", // 36
"FM AGC", // 37 "FM AGC", // 37
"Arata erorile RDS", // 38 "Arată erorile RDS", // 38
"Limba", // 39 "Limbă", // 39
"Alegeti Limba", // 40 "Alegeți Limba", // 40
"Apasati MODE ptr MEMORARE si iesire", // 41 "Apasați MODE ptr MEMORARE și ieșire", // 41
"Pornit", // 42 "Pornit", // 42
"lipsa zgomot FM", // 43 "lipsă zgomot FM", // 43
"lipsa zgomot AM", // 44 "lipsă zgomot AM", // 44
"Beep la capatul benzii", // 45 "Beep la capătul benzii", // 45
"Regiune", // 46 "Regiune", // 46
"Europa", // 47 "Europa", // 47
"America", // 48 "America", // 48
"Afiseaza subliniere in RDS", // 49 "Afișează subliniere la RDS", // 49
"Mod USB", // 50 "Mod USB", // 50
"Wi-Fi activ", // 51 "Wi-Fi activ", // 51
"Configurare Wi-Fi", // 52 "Configurare Wi-Fi", // 52
"Conectare la: ", // 53 "Conectare la: ", // 53
"ptr configurare Wi-Fi", // 54 "ptr configurare Wi-Fi", // 54
"Incerc conectarea la Wi-Fi", // 55 "Incerc conectarea la Wi-Fi", // 55
"Fara succes!", // 56 "Fară succes!", // 56
"Conectat!", // 57 "Conectat!", // 57
"Lista adrese IP", // 58 "Listă adrese IP", // 58
"Arat? lungimea de unda SW", // 59 "Arată lungimea de undă SW", // 59
"Filtru RDS", // 60 "Filtru RDS", // 60
"Arata erorile PI", // 61 "Arată erorile PI", // 61
"foloseste squelch", // 62 "folosește squelch", // 62
"Contor modulatie", // 63 "Contor modulație", // 63
"Eliminator de zgomot AM", // 64 "Eliminator de zgomot AM", // 64
"Eliminator de zgomot FM", // 65 "Eliminator de zgomot FM", // 65
"Revenire setari implicite", // 66 "Revenire la setările de fabrică", // 66
"iesire Audio", // 67 "ieșire Audio", // 67
"Permite reglarea in timpul screensaverului", // 68 "Permite reglarea in timp ce ecranul este oprit", // 68
"Ecran inversat", // 69 "Ecran inversat", // 69
"Despre software", // 70 "Despre software", // 70
"cod principal:", // 71 "cod principal:", // 71
"Contribuitori:", // 72 "Contribuitori:", // 72
"Necunoscut", // 73 "Necunoscut", // 73
"Optiuni Screensaver", // 74 "Opțiuni economizor ecran", // 74
"Pauza temporizator", // 75 "Pauză temporizator", // 75
"Ecran oprit", // 76 "Ecran oprit", // 76
"Tema", // 77 "Temă", // 77
"Mod vizualizare", // 78 "Mod vizualizare", // 78
"Aplicatii detectate", // 79 "Aplicații detectate", // 79
"Min.", // 80 "Min.", // 80
"Viteza SPI dinamica", // 81 "Viteză SPI dinamică", // 81
"Sensibilitatea scanarii", // 82 "Sensibilitatea scanării", // 82
"NICI UNUL", // 83 "NICI UNUL", // 83
" versiune Software", // 84 " versiune Software", // 84
"Font Frecventa", // 85 "Font Frecvență", // 85
"Auto", // 86 "Auto", // 86
"AF nu este disponibil", // 87 "AF nu este disponibil", // 87
"EON nu este disponibil", // 88 "EON nu este disponibil", // 88
"RT+ nu este disponibil", // 89 "RT+ nu este disponibil", // 89
"Marime pasi FM", // 90 "Mărime pași FM", // 90
"Screensaver", // 91 "Screensaver", // 91
"Sec", // 92 "Sec", // 92
"Apasati BAND pentru inchidere", // 93 "Apăsați BAND pentru inchidere", // 93
"luminozitate 1%", // 94 "luminozitate 1%", // 94
"luminozitate 25%", // 95 "luminozitate 25%", // 95
"luminozitate 50%", // 96 "luminozitate 50%", // 96
"Decalaj de nivel AM RF", // 97 "Decalaj de nivel AM RF", // 97
"unitati S-metru", // 98 "unitați S-metru", // 98
"folosesti AF", // 99 "folosești AF", // 99
"Selectare banda FM", // 100 "Selectare banda FM", // 100
"Selectare banda AM", // 101 "Selectare banda AM", // 101
"LW", // 102 "LW", // 102
@@ -1263,30 +1263,30 @@ static const char* const myLanguage[18][228] PROGMEM = {
"SW", // 104 "SW", // 104
"FM", // 105 "FM", // 105
"OIRT", // 106 "OIRT", // 106
"Rotire timp ce ecranul este oprit", // 107 "Rotire când ecranul este oprit", // 107
"selectare Model", // 108 "selectare Model", // 108
"Baza (ILI9341)", // 109 "Bază (ILI9341)", // 109
"Portabil (ILI9341)", // 110 "Portabil (ILI9341)", // 110
"Portabil touch (ILI9341)", // 111 "Portabil touch (ILI9341)", // 111
"Titlu", // 112 "Titlu", // 112
"Album", // 113 "Album", // 113
"Banda", // 114 "Bandă", // 114
"Artist", // 115 "Artist", // 115
"Compozitie", // 116 "Compoziție", // 116
"Miscare", // 117 "Mișcare", // 117
"Dirijir", // 118 "Dirijor", // 118
"Compozitor", // 119 "Compozitor", // 119
"Formatia", // 120 "Formație", // 120
"Comentarii", // 121 "Comentarii", // 121
"Gen", // 122 "Gen", // 122
"Stiri", // 123 "Știri", // 123
"Stiri Locale", // 124 "Știri Locale", // 124
"Bursa de Valori", // 125 "Bursa de Valori", // 125
"Sport", // 126 "Sport", // 126
"Loto", // 127 "Loto", // 127
"Horoscop", // 128 "Horoscop", // 128
"Info zilnice", // 129 "Info zilnice", // 129
"Sanatate", // 130 "Sănătate", // 130
"Evenimente", // 131 "Evenimente", // 131
"Teatru", // 132 "Teatru", // 132
"Cinema", // 133 "Cinema", // 133
@@ -1294,18 +1294,18 @@ static const char* const myLanguage[18][228] PROGMEM = {
"Data/ora", // 135 "Data/ora", // 135
"Meteo", // 136 "Meteo", // 136
"Trafic", // 137 "Trafic", // 137
"Alarma", // 138 "Alarmă", // 138
"Reclamet", // 139 "Reclame", // 139
"Website", // 140 "Website", // 140
"Altele", // 141 "Altele", // 141
"PS scurt", // 142 "PS scurt", // 142
"PS lung", // 143 "PS lung", // 143
"Acum", // 144 "Acum", // 144
"Urmeaza", // 145 "Urmează", // 145
"Parte", // 146 "Parte", // 146
"Gazda", // 147 "Gazdă", // 147
"Editor", // 148 "Editor", // 148
"Frecventa", // 149 "Frecvența", // 149
"Pagina start", // 150 "Pagina start", // 150
"Sub canal", // 151 "Sub canal", // 151
"Linia fierbinte", // 152 "Linia fierbinte", // 152
@@ -1316,35 +1316,35 @@ static const char* const myLanguage[18][228] PROGMEM = {
"Email Linie fierbinte", // 157 "Email Linie fierbinte", // 157
"Email studio", // 158 "Email studio", // 158
"Email", // 159 "Email", // 159
"Discutii", // 160 "Discuții", // 160
"Centru discutii", // 161 "Centru discuții", // 161
"Intrebare la vot", // 162 "Intrebare la vot", // 162
"Centru votare", // 163 "Centru votare", // 163
"Loc", // 164 "Loc", // 164
"Intalnire", // 165 "Intâlnire", // 165
"Identificare", // 166 "Identificare", // 166
"Cumpara", // 167 "Cumpără", // 167
"Preiau date", // 168 "Preiau date", // 168
"pasi MW impliciti", // 169 "pași MW impliciți", // 169
"Tangerine", // 170 "Tangerine", // 170
"Ocean", // 171 "Ocean", // 171
"Indigo", // 172 "Indigo", // 172
"Optiuni Baterie", // 173 "Opțiuni Baterie", // 173
"Arata tensiunea", // 174 "Arată tensiunea", // 174
"Arata procente", // 175 "Arată procente", // 175
"portiune RT", // 176 "porțiune RT", // 176
"Setari de baza", // 177 "Setări de bază", // 177
"Setari Audio", // 178 "Setări Audio", // 178
"Setari ecran", // 179 "Setări ecran", // 179
"Setari RDS", // 180 "Setări RDS", // 180
"Setari FM", // 181 "Setări FM", // 181
"Setari AM ", // 182 "Setări AM ", // 182
"Conectivitate", // 183 "Conectivitate", // 183
"Apasa MODE ptr revenire", // 184 "Apasă MODE ptr revenire", // 184
"Detector CoChannel", // 185 "Detector CoChannel", // 185
"Detectie in sensibilitate CoChannel ", // 186 "Detecție sensibilitate CoChannel ", // 186
"Detectie prag CoChannel", // 187 "Detecție prag CoChannel", // 187
"Detector in contor CoChannel", // 188 "Detector contor CoChannel", // 188
"PRINCIPAL", // 189 "PRINCIPAL", // 189
"AUDIO", // 190 "AUDIO", // 190
"ECRAN", // 191 "ECRAN", // 191
@@ -1352,8 +1352,8 @@ static const char* const myLanguage[18][228] PROGMEM = {
"FM", // 193 "FM", // 193
"AM", // 194 "AM", // 194
"CONECTARE", // 195 "CONECTARE", // 195
"DX MODE", // 196 "MOD DX", // 196
"ID Lista posturi", // 197 "Listă ID posturi", // 197
"AGC AM", // 198 "AGC AM", // 198
"FM deemphasis", // 199 "FM deemphasis", // 199
"Mic", // 200 "Mic", // 200
@@ -1361,29 +1361,29 @@ static const char* const myLanguage[18][228] PROGMEM = {
"Tot", // 202 "Tot", // 202
"PS rapid", // 203 "PS rapid", // 203
"Mod implicit", // 204 "Mod implicit", // 204
"Mute screen on\nXDRGTK connection", // 205 "Ecran oprit, conectat la XDRGTK", // 205
"FMSI stereo\nimprovement", // 206 "FMSI stereo îmbunătățit", // 206
"Function only available\non TEF6687/6689!", // 207 "Funcție activă doar la\nTEF6687/6689!", // 207
"Function not available\non selected skin!", // 208 "Funcție indisponibilă\nla acest skin!", // 208
"Begin scanning\nmemory channels", // 209 "Scanare începută\nmemorare posturi", // 209
"Stop scanning\nmemory channels", // 210 "Scanare terminată\nmemorare posturi", // 210
"Wait time", // 211 "Așteaptă", // 211
"Start DX scanning", // 212 "Începe scanarea DX", // 212
"FM DX Options", // 213 "FM DX Opțiuni", // 213
"Abort! The start channel\nis marked as skipped.", // 214 "Terminat! Programul de pornire\neste ignorat.", // 214
"Sortare automata AF", // 215 "Sortare automată AF", // 215
"Memory channels", // 216 "Memorare programe", // 216
"Exclude", // 217 "Exclude", // 217
"Only", // 218 "Doar", // 218
"Auto cancel scan", // 219 "Auto oprire scanare", // 219
"Correct PI", // 220 "PI corect", // 220
"Signal", // 221 "Semnal", // 221
"Mute audio\nwhile scanning", // 222 "Audio oprit\ncând scanează", // 222
"AIR", // 223 "AIR", // 223
"5 sec. bandbutton press", // 224 "Apasă 5sec. butonul bandă", // 224
"Power off", // 225 "Oprit", // 225
"Mute screen", // 226 "Ecran oprit", // 226
"Disabled" // 227 "Dezactivat" // 227
}, },
{ "Deutsch", // German { "Deutsch", // German
+9 -9
View File
@@ -777,23 +777,23 @@ void showCT() {
void showRadioText() { void showRadioText() {
if (!screenmute) { if (!screenmute) {
if (radio.rds.hasRT && radio.rds.stationText.length() > 0) { if (radio.rds.hasRT && radio.rds.stationText.length() > 0) {
if (String(radio.rds.stationText + radio.rds.stationText32).length() != Radiotextlengthold) { if (String(radio.rds.stationText + radio.rds.stationText32 + (radio.rds.hasEnhancedRT ? " eRT: " + String(radio.rds.enhancedRTtext) : "")).length() != Radiotextlengthold) {
RadiotextWidth = (String(radio.rds.stationText + " " + radio.rds.stationText32).length() * charwidth) + 3 * charwidth; RadiotextWidth = (String(radio.rds.stationText + " " + radio.rds.stationText32 + (radio.rds.hasEnhancedRT ? " eRT: " + String(radio.rds.enhancedRTtext) : "")).length() * charwidth) + 3 * charwidth;
Radiotextlengthold = String(radio.rds.stationText + radio.rds.stationText32).length(); Radiotextlengthold = String(radio.rds.stationText + radio.rds.stationText32 + (radio.rds.hasEnhancedRT ? " eRT: " + String(radio.rds.enhancedRTtext) : "")).length();
} }
if (advancedRDS && radio.rds.stationText.length() < 20) { if (advancedRDS && radio.rds.stationText.length() < 20) {
xPos = 0; xPos = 0;
RDSSprite.fillSprite(BackgroundColor); RDSSprite.fillSprite(BackgroundColor);
RadiotextSprite.setTextDatum(TL_DATUM); RadiotextSprite.setTextDatum(TL_DATUM);
if (RDSstatus) RDSSprite.setTextColor(RDSColor, RDSColorSmooth, false); else RDSSprite.setTextColor(RDSDropoutColor, RDSDropoutColorSmooth, false); if (RDSstatus) RDSSprite.setTextColor(RDSColor, RDSColorSmooth, false); else RDSSprite.setTextColor(RDSDropoutColor, RDSDropoutColorSmooth, false);
RDSSprite.drawString(radio.rds.stationText + " " + radio.rds.stationText32, xPos, 2); RDSSprite.drawString(radio.rds.stationText + " " + radio.rds.stationText32 + (radio.rds.hasEnhancedRT ? " eRT: " + String(radio.rds.enhancedRTtext) : ""), xPos, 2);
RDSSprite.pushSprite(36, 220); RDSSprite.pushSprite(36, 220);
} else if (!advancedRDS && radio.rds.stationText.length() < 29) { } else if (!advancedRDS && radio.rds.stationText.length() < 29) {
xPos = 0; xPos = 0;
RadiotextSprite.fillSprite(BackgroundColor); RadiotextSprite.fillSprite(BackgroundColor);
RadiotextSprite.setTextDatum(TL_DATUM); RadiotextSprite.setTextDatum(TL_DATUM);
if (RDSstatus) RadiotextSprite.setTextColor(RDSColor, RDSColorSmooth, false); else RadiotextSprite.setTextColor(RDSDropoutColor, RDSDropoutColorSmooth, false); if (RDSstatus) RadiotextSprite.setTextColor(RDSColor, RDSColorSmooth, false); else RadiotextSprite.setTextColor(RDSDropoutColor, RDSDropoutColorSmooth, false);
RadiotextSprite.drawString(radio.rds.stationText + " " + radio.rds.stationText32, xPos, 2); RadiotextSprite.drawString(radio.rds.stationText + " " + radio.rds.stationText32 + (radio.rds.hasEnhancedRT ? " eRT: " + String(radio.rds.enhancedRTtext) : ""), xPos, 2);
RadiotextSprite.pushSprite(36, 220); RadiotextSprite.pushSprite(36, 220);
} else { } else {
if (millis() - rtticker >= (advancedRDS ? 5 : 15)) { if (millis() - rtticker >= (advancedRDS ? 5 : 15)) {
@@ -812,14 +812,14 @@ void showRadioText() {
if (advancedRDS) { if (advancedRDS) {
RDSSprite.fillSprite(BackgroundColor); RDSSprite.fillSprite(BackgroundColor);
if (RDSstatus) RDSSprite.setTextColor(RDSColor, RDSColorSmooth, false); else RDSSprite.setTextColor(RDSDropoutColor, RDSDropoutColorSmooth, false); if (RDSstatus) RDSSprite.setTextColor(RDSColor, RDSColorSmooth, false); else RDSSprite.setTextColor(RDSDropoutColor, RDSDropoutColorSmooth, false);
RDSSprite.drawString(radio.rds.stationText + " " + radio.rds.stationText32, xPos, 2); RDSSprite.drawString(radio.rds.stationText + " " + radio.rds.stationText32 + (radio.rds.hasEnhancedRT ? " eRT: " + String(radio.rds.enhancedRTtext) : ""), xPos, 2);
RDSSprite.drawString(radio.rds.stationText + " " + radio.rds.stationText32, xPos + RadiotextWidth, 2); RDSSprite.drawString(radio.rds.stationText + " " + radio.rds.stationText32 + (radio.rds.hasEnhancedRT ? " eRT: " + String(radio.rds.enhancedRTtext) : ""), xPos + RadiotextWidth, 2);
RDSSprite.pushSprite(36, 220); RDSSprite.pushSprite(36, 220);
} else { } else {
RadiotextSprite.fillSprite(BackgroundColor); RadiotextSprite.fillSprite(BackgroundColor);
if (RDSstatus) RadiotextSprite.setTextColor(RDSColor, RDSColorSmooth, false); else RadiotextSprite.setTextColor(RDSDropoutColor, RDSDropoutColorSmooth, false); if (RDSstatus) RadiotextSprite.setTextColor(RDSColor, RDSColorSmooth, false); else RadiotextSprite.setTextColor(RDSDropoutColor, RDSDropoutColorSmooth, false);
RadiotextSprite.drawString(radio.rds.stationText + " " + radio.rds.stationText32, xPos, 2); RadiotextSprite.drawString(radio.rds.stationText + " " + radio.rds.stationText32 + (radio.rds.hasEnhancedRT ? " eRT: " + String(radio.rds.enhancedRTtext) : ""), xPos, 2);
RadiotextSprite.drawString(radio.rds.stationText + " " + radio.rds.stationText32, xPos + RadiotextWidth, 2); RadiotextSprite.drawString(radio.rds.stationText + " " + radio.rds.stationText32 + (radio.rds.hasEnhancedRT ? " eRT: " + String(radio.rds.enhancedRTtext) : ""), xPos + RadiotextWidth, 2);
RadiotextSprite.pushSprite(36, 220); RadiotextSprite.pushSprite(36, 220);
} }
rtticker = millis(); rtticker = millis();