Merge branch 'main' into New_Model_DP_666

This commit is contained in:
Leon
2024-05-19 23:41:33 +08:00
10 changed files with 19506 additions and 19262 deletions
+60 -33
View File
@@ -283,6 +283,7 @@ int xPos;
int xPos2;
int xPos3;
int xPos4;
int xPos5;
int16_t OStatus;
int16_t SAvg;
int16_t SAvg2;
@@ -382,6 +383,8 @@ unsigned long eontickerhold;
unsigned long flashingtimer;
unsigned long lowsignaltimer;
unsigned long peakholdmillis;
unsigned long pslongticker;
unsigned long pslongtickerhold;
unsigned long rtplusticker;
unsigned long rtplustickerhold;
unsigned long rtticker;
@@ -403,6 +406,7 @@ TFT_eSprite SquelchSprite = TFT_eSprite(&tft);
TFT_eSprite FullLineSprite = TFT_eSprite(&tft);
TFT_eSprite OneBigLineSprite = TFT_eSprite(&tft);
TFT_eSprite SignalSprite = TFT_eSprite(&tft);
TFT_eSprite PSSprite = TFT_eSprite(&tft);
WiFiConnect wc;
WiFiServer Server(7373);
@@ -634,32 +638,7 @@ void setup() {
tft.setSwapBytes(true);
tft.fillScreen(BackgroundColor);
RadiotextSprite.createSprite(270, 19);
RadiotextSprite.setTextDatum(TL_DATUM);
RadiotextSprite.setSwapBytes(true);
FrequencySprite.createSprite(200, 50);
FrequencySprite.setTextDatum(TR_DATUM);
FrequencySprite.setSwapBytes(true);
RDSSprite.createSprite(165, 19);
RDSSprite.setTextDatum(TL_DATUM);
SquelchSprite.createSprite(47, 19);
SquelchSprite.setTextDatum(TL_DATUM);
SquelchSprite.setSwapBytes(true);
FullLineSprite.createSprite(308, 20);
FullLineSprite.setSwapBytes(true);
OneBigLineSprite.createSprite(270, 30);
OneBigLineSprite.setSwapBytes(true);
SignalSprite.createSprite(80, 48);
SignalSprite.setTextColor(PrimaryColor, PrimaryColorSmooth, false);
SignalSprite.setTextDatum(TR_DATUM);
SignalSprite.setSwapBytes(true);
UpdateSprites(0);
UpdateFonts(0);
if (digitalRead(BWBUTTON) == LOW && digitalRead(ROTARY_BUTTON) == HIGH) {
@@ -1180,20 +1159,16 @@ void WakeToSleep(bool yes) {
screensavertriggered = true;
switch (poweroptions) {
case LCD_OFF:
analogWrite(SMETERPIN, 0);
MuteScreen(1);
StoreFrequency();
break;
case LCD_BRIGHTNESS_1_PERCENT:
analogWrite(SMETERPIN, 0);
analogWrite(CONTRASTPIN, 1 * 2 + 27);
break;
case LCD_BRIGHTNESS_A_QUARTER:
analogWrite(SMETERPIN, 0);
analogWrite(CONTRASTPIN, MIN(ContrastSet, 25) * 2 + 27);
break;
case LCD_BRIGHTNESS_HALF:
analogWrite(SMETERPIN, 0);
analogWrite(CONTRASTPIN, MIN(ContrastSet, 50) * 2 + 27);
break;
}
@@ -2180,7 +2155,8 @@ void BWButtonPress() {
BWtune = true;
}
if (screensaverset) {
ScreensaverTimerRestart();
WakeToSleep(REVERSE);
return;
}
delay(100);
}
@@ -2241,7 +2217,8 @@ void ModeButtonPress() {
if (counter - counterold <= 1000) {
doTuneMode();
if (screensaverset) {
ScreensaverTimerRestart();
WakeToSleep(REVERSE);
return;
}
} else {
if (!menu) {
@@ -4265,18 +4242,67 @@ void deepSleep() {
esp_deep_sleep_start();
}
void UpdateFonts(bool mode) {
void UpdateSprites(bool mode) {
switch (mode) {
case 0:
RadiotextSprite.createSprite(270, 19);
RadiotextSprite.setTextDatum(TL_DATUM);
RadiotextSprite.setSwapBytes(true);
FrequencySprite.createSprite(200, 50);
FrequencySprite.setTextDatum(TR_DATUM);
FrequencySprite.setSwapBytes(true);
RDSSprite.createSprite(165, 19);
RDSSprite.setTextDatum(TL_DATUM);
PSSprite.createSprite(150, 30);
PSSprite.setTextDatum(TL_DATUM);
SquelchSprite.createSprite(47, 19);
SquelchSprite.setTextDatum(TL_DATUM);
SquelchSprite.setSwapBytes(true);
FullLineSprite.createSprite(308, 20);
FullLineSprite.setSwapBytes(true);
OneBigLineSprite.createSprite(270, 30);
OneBigLineSprite.setSwapBytes(true);
SignalSprite.createSprite(80, 48);
SignalSprite.setTextColor(PrimaryColor, PrimaryColorSmooth, false);
SignalSprite.setTextDatum(TR_DATUM);
SignalSprite.setSwapBytes(true);
break;
case 1:
RadiotextSprite.deleteSprite();
FrequencySprite.deleteSprite();
RDSSprite.deleteSprite();
PSSprite.deleteSprite();
SquelchSprite.deleteSprite();
FullLineSprite.deleteSprite();
OneBigLineSprite.deleteSprite();
SignalSprite.deleteSprite();
break;
}
}
void UpdateFonts(byte mode) {
switch (mode) {
case 0: // Use in radio mode
RadiotextSprite.unloadFont();
RDSSprite.unloadFont();
PSSprite.unloadFont();
if (language == LANGUAGE_CHS) {
RadiotextSprite.loadFont(FONT16_CHS);
RDSSprite.loadFont(FONT16_CHS);
PSSprite.loadFont(FONT28_CHS);
} else {
RadiotextSprite.loadFont(FONT16);
RDSSprite.loadFont(FONT16);
PSSprite.loadFont(FONT28);
}
break;
@@ -4297,6 +4323,7 @@ void UpdateFonts(bool mode) {
OneBigLineSprite.unloadFont();
RadiotextSprite.unloadFont();
RDSSprite.unloadFont();
PSSprite.unloadFont();
break;
}
}
+5178 -4888
View File
File diff suppressed because it is too large Load Diff
+13980 -14177
View File
File diff suppressed because it is too large Load Diff
+71 -11
View File
@@ -1443,11 +1443,11 @@ void TEF6686::readRDS(byte showrdserrors) {
eon_buffer[position][(offset * 2) + 2] = '\0'; // Endmarker of segment
}
if (offset > 3 && eon[position].pi == rds.rdsD) { // Last chars are received
RDScharConverter(eon_buffer[position], EONPStext[position], sizeof(EONPStext[position]) / sizeof(wchar_t), false); // Convert 8 bit ASCII to 16 bit ASCII
String utf8String = convertToUTF8(EONPStext[position]); // Convert RDS characterset to ASCII
eon[position].ps = extractUTF8Substring(utf8String, 0, 8, false); // Make sure PS does not exceed 8 characters
for (int j = 0; j < 9; j++) eon_buffer[position][j] = '\0'; // Clear buffer
if (offset > 3 && eon[position].pi == rds.rdsD) { // Last chars are received
RDScharConverter(eon_buffer[position], EONPStext[position], sizeof(EONPStext[position]) / sizeof(wchar_t), false); // Convert 8 bit ASCII to 16 bit ASCII
String utf8String = convertToUTF8(EONPStext[position]); // Convert RDS characterset to ASCII
eon[position].ps = extractUTF8Substring(utf8String, 0, 8, false); // Make sure PS does not exceed 8 characters
for (int j = 0; j < 9; j++) eon_buffer[position][j] = '\0'; // Clear buffer
}
if (offset == 13 && eon[position].pi == rds.rdsD) {
@@ -1499,6 +1499,53 @@ void TEF6686::readRDS(byte showrdserrors) {
}
}
break;
case RDS_GROUP_15A: {
if (showrdserrors == 3 || (!rdsBerrorThreshold && !rdsCerrorThreshold && !rdsDerrorThreshold)) {
if (pslong_process) rds.hasLongPS = true;
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 + 1] = pslong_buffer[offset + 1];
pslong_buffer2[offset + 2] = pslong_buffer[offset + 2];
pslong_buffer2[offset + 3] = pslong_buffer[offset + 3];
pslong_buffer2[32] = '\0';
pslong_buffer[offset + 0] = rds.rdsC >> 8; // First character of segment
pslong_buffer[offset + 1] = rds.rdsC & 0xff; // Second character of segment
pslong_buffer[offset + 2] = rds.rdsD >> 8; // Thirth character of segment
pslong_buffer[offset + 3] = rds.rdsD & 0xff; // Fourth character of segment
pslong_buffer[32] = '\0';
byte endmarker = 32;
for (byte i = 0; i < 33; i++) {
if (pslong_buffer[i] == 0x0d) {
endmarker = i;
break;
}
}
if (offset == 28 && (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...
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
rds.stationNameLong = extractUTF8Substring(utf8String, 0, endmarker, true); // Make sure PS Long does not exceed 32 characters
}
}
if (!pslong_process && rds.fastps) { // Let's get 2 runs of 32 PS characters fast and without refresh
if (offset == 0) packet0long = true;
if (offset == 4) packet1long = true;
if (offset == 8) packet2long = true;
if (offset == 16) packet3long = true;
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
rds.stationNameLong = extractUTF8Substring(utf8String, 0, endmarker, true);
if (packet0long && packet1long && packet2long && packet3long) pslong_process = true; // OK, we had one runs, now let's go the idle PS Long writing
}
}
}
break;
}
}
}
@@ -1508,6 +1555,7 @@ void TEF6686::clearRDS (bool fullsearchrds) {
rds.piBuffer.clear();
rds.stationName = "";
rds.stationText = "";
rds.stationNameLong = "";
rds.stationText32 = "";
rds.RTContent1 = "";
rds.RTContent2 = "";
@@ -1517,11 +1565,6 @@ void TEF6686::clearRDS (bool fullsearchrds) {
rds.stationIDtext = "";
rds.stationStatetext = "";
ps_buffer[8] = 0;
ptyn_buffer[8] = 0;
PStext[8] = L'\0';
PTYNtext[8] = L'\0';
uint8_t i;
for (i = 0; i < 8; i++) {
ps_buffer[i] = 0x20;
@@ -1529,12 +1572,22 @@ void TEF6686::clearRDS (bool fullsearchrds) {
ptyn_buffer[i] = 0x20;
PTYNtext[i] = L'\0';
}
ps_buffer[8] = 0;
ptyn_buffer[8] = 0;
PStext[8] = L'\0';
PTYNtext[8] = L'\0';
for (i = 0; i < 64; i++) rt_buffer[i] = 0x20;
rt_buffer[64] = 0;
for (i = 0; i < 32; i++) rt_buffer32[i] = 0x20;
for (i = 0; i < 32; i++) {
rt_buffer32[i] = 0x20;
pslong_buffer[i] = 0x20;
PSLongtext[i] = L'\0';
}
rt_buffer32[32] = 0;
pslong_buffer[32] = 0;
PSLongtext[32] = L'\0';
for (i = 0; i < 17; i++) rds.stationType[i] = 0x20;
rds.stationType[17] = 0;
@@ -1611,10 +1664,12 @@ void TEF6686::clearRDS (bool fullsearchrds) {
rds.hasCT = false;
rds.hasTMC = false;
rds.hasAID = false;
rds.hasLongPS = false;
rds.hasRDSplus = false;
rds.hasDABAF = false;
rt_process = false;
ps_process = false;
pslong_process = false;
rds.rdsreset = true;
rds.hasArtificialhead = false;
rds.hasCompressed = false;
@@ -1640,6 +1695,10 @@ void TEF6686::clearRDS (bool fullsearchrds) {
packet1 = false;
packet2 = false;
packet3 = false;
packet0long = false;
packet1long = false;
packet2long = false;
packet3long = false;
rds.aid_counter = 0;
afmethodBprobe = false;
afmethodBtrigger = false;
@@ -1724,6 +1783,7 @@ 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 0x21 ... 0x5D: output[i] = static_cast<wchar_t>(currentChar); break;
case 0x5E: output[i] = L''; break;
+9 -5
View File
@@ -568,10 +568,12 @@ typedef struct _rds_ {
String ECCtext;
String LICtext;
String stationIDtext;
String stationNameLong;
String stationStatetext;
char stationType[18];
char picode[7];
char stationID[9];
char stationLongID[33];
char stationState[3];
char dabafeid[5];
char dabafchannel[4];
@@ -598,6 +600,7 @@ typedef struct _rds_ {
bool hasECC;
bool hasLIC;
bool hasDABAF;
bool hasLongPS;
bool hasRT;
bool hasTP;
bool hasTA;
@@ -720,10 +723,13 @@ class TEF6686 {
char ptyn_buffer[9];
char eon_buffer[20][9];
bool ps_process;
bool pslong_process;
bool rt_process;
char rt_buffer[65];
char rt_buffer2[65];
char rt_buffer32[33];
char pslong_buffer[33];
char pslong_buffer2[33];
bool useRTPlus = true;
bool ABold;
bool afreset;
@@ -733,6 +739,7 @@ class TEF6686 {
bool rtABold;
bool rtAB32old;
wchar_t PStext[9] = L"";
wchar_t PSLongtext[33] = L"";
wchar_t EONPStext[20][9];
wchar_t PTYNtext[9] = L"";
char RDSplus1[45];
@@ -749,10 +756,7 @@ class TEF6686 {
bool rdsBerrorThreshold;
bool rdsCerrorThreshold;
bool rdsDerrorThreshold;
bool packet0;
bool packet1;
bool packet2;
bool packet3;
bool packet0, packet1, packet2, packet3, packet0long, packet1long, packet2long, packet3long;
bool afmethodBprobe;
uint16_t rdsCold;
uint8_t af_counterb;
@@ -765,4 +769,4 @@ class TEF6686 {
uint8_t doublecounter;
uint16_t doubletestfreq;
};
#endif
#endif
+15 -4
View File
@@ -465,6 +465,10 @@ void BuildAFScreen() {
PIold = " ";
PSold = " ";
xPos = 0;
xPos2 = 0;
xPos3 = 0;
xPos4 = 0;
xPos5 = 0;
for (byte i = 0; i < 20; i++) {
mappedfreqold[i] = 0;
mappedfreqold2[i] = 0;
@@ -1554,6 +1558,7 @@ void BuildAdvancedRDS() {
xPos2 = 0;
xPos3 = 0;
xPos4 = 0;
xPos5 = 0;
}
void BuildDisplay() {
@@ -1707,6 +1712,10 @@ void BuildDisplay() {
BWreset = true;
dropout = false;
xPos = 0;
xPos2 = 0;
xPos3 = 0;
xPos4 = 0;
xPos5 = 0;
}
void MenuUp() {
@@ -2021,7 +2030,7 @@ void MenuUp() {
case ITEM1:
language ++;
if (language == (sizeof (myLanguage) / sizeof (myLanguage[0]))) language = 0;
UpdateFonts(2);
UpdateFonts(1);
OneBigLineSprite.drawString(myLanguage[language][0], 135, 0);
OneBigLineSprite.pushSprite(24, 118);
break;
@@ -2868,7 +2877,7 @@ void MenuDown() {
case ITEM1:
language --;
if (language > (sizeof (myLanguage) / sizeof (myLanguage[0]))) language = (sizeof (myLanguage) / sizeof (myLanguage[0])) - 1;
UpdateFonts(2);
UpdateFonts(1);
OneBigLineSprite.drawString(myLanguage[language][0], 135, 0);
OneBigLineSprite.pushSprite(24, 118);
break;
@@ -4154,7 +4163,8 @@ void DoMenu() {
tftPrint(0, "http://192.168.4.1", 155, 174, PrimaryColor, PrimaryColorSmooth, 16);
char key [9];
XDRGTK_key.toCharArray(key, 9);
UpdateFonts(3);
UpdateFonts(2);
UpdateSprites(1);
WiFiConnectParam XDRGTK_key_text("Set XDRGTK Password: (max 8 characters)");
WiFiConnectParam XDRGTK_key_input("XDRGTK_key", "Password", key, 9);
wc.addParameter(&XDRGTK_key_text);
@@ -4163,7 +4173,8 @@ void DoMenu() {
XDRGTK_key = XDRGTK_key_input.getValue();
EEPROM.writeString(EE_STRING_XDRGTK_KEY, XDRGTK_key);
EEPROM.commit();
UpdateFonts(2);
UpdateSprites(0);
UpdateFonts(1);
wifi = true;
tryWiFi();
delay(2000);
+3 -1
View File
@@ -174,6 +174,7 @@ extern int xPos;
extern int xPos2;
extern int xPos3;
extern int xPos4;
extern int xPos5;
extern int16_t SStatus;
extern int8_t LevelOffset;
extern int8_t LowLevelSet;
@@ -229,7 +230,8 @@ extern void TuneUp();
extern void endMenu();
extern void startFMDXScan();
extern void DoMemoryPosTune();
extern void UpdateFonts(bool mode);
extern void UpdateFonts(byte mode);
extern void UpdateSprites(bool mode);
extern void tftPrint(int8_t offset, const String & text, int16_t x, int16_t y, int color, int smoothcolor, uint8_t fontsize);
extern void setAutoSpeedSPI();
extern void showAutoSquelch(bool mode);
+120 -120
View File
@@ -1,7 +1,7 @@
#ifndef LANGUAGE_H
#define LANGUAGE_H
#define VERSION "v2.10 RC1"
#define VERSION "v2.10 RC3"
// [number of languages][number of texts]
// *** means the text is the same as in English
@@ -460,7 +460,7 @@ static const char* const myLanguage[18][228] PROGMEM = {
"Signaal", // 221
"Geen geluid\ntijdens scannen", // 222
"AIR", // 223
"5 sec. bandbutton ingedrukt", // 224
"5 sec.\nbandbutton ingedrukt", // 224
"Uitschakelen", // 225
"Scherm uit", // 226
"Geen functie" // 227
@@ -690,10 +690,10 @@ static const char* const myLanguage[18][228] PROGMEM = {
"Sygnał", // 221
"Wycisz dźwięk\npodczas skanowania", // 222
"AIR", // 223
"5 sec. bandbutton press", // 224
"Power off", // 225
"Mute screen", // 226
"Disabled" // 227
"5 sek. naciśnięcie przyc. BAND", // 224
"Wyłącz", // 225
"Wyłącz ekran", // 226
"Wyłączone" // 227
},
{ "Hrvatski", // Croatian
@@ -1610,20 +1610,20 @@ static const char* const myLanguage[18][228] PROGMEM = {
"Signal", // 221
"Stumm beim Scannen", // 222
"AIR", // 223
"5 sec. bandbutton press", // 224
"Power off", // 225
"Mute screen", // 226
"Disabled" // 227
"5 Sek. BAND-Knopf drücken", // 224
"Ausschalten", // 225
"Bildschirmschoner", // 226
"Deaktiviert" // 227
},
{ "Český", // Czech
"Směr enkóderu byl změněn", // 1
"Směr enkodéru byl změněn", // 1
"Prosím, pusťte tlačítko", // 2
"Obrazovka otočena", // 3
"Kalibrace analog. měřiče", // 4
"Po dokončení pusťte tlačítko", // 5
"enkóder nastaven na optický", // 6
"enkóder nastaven na standardní", // 7
"enkodér nastaven na optický", // 6
"enkodér nastaven na standardní", // 7
"FM/AM přijímač", // 8
"Tuner: !ŽÁDNÝ!", // 9
"Hlasitost:", // 10
@@ -1632,42 +1632,42 @@ static const char* const myLanguage[18][228] PROGMEM = {
"Vrch pásma:", // 13
"FM Offset frekvence:", // 14
"Práh pro stereo:", // 15
"Práh utlumeni:", // 16
"Práh zvuku:", // 17
"Práh nizkého signálu:", // 18
"Kontrast:", // 19
"Práh frekvence zvuku\nk utlumení:", // 16
"Práh signálu pro utlumení\nvysokých tónů:", // 17
"Práh nízkého signálu:", // 18
"Jas:", // 19
"Hlasitost", // 20
"Offset frekvence", // 21
"Spodek pásma", // 22
"Vrch pásma", // 23
"Offset signálu", // 24
"Práh pro stereo", // 25
"Práh utlumení", // 26
"Práh signálu pro utlumení", // 27
"Práh frekvence zvuku k utlumení", // 26
"Práh signálu pro utlumení vysokých tónů", // 27
"Práh nízkého signálu", // 28
"Jas", // 29
"Vyp", // 30
"Vyp.", // 30
"Obrazovka je ztlumena!", // 31
"Pro spuštění zrušte RF+", // 32
"VYP", // 33
"VYP.", // 33
"SKENUJI...", // 34
"Tuner nedetekován", // 35
"AM Antenna gain", // 36
"Zisk AM antény", // 36
"FM AGC", // 37
"Zobrazit chyby v RDS", // 38
"Jazyk", // 39
"Vyberte jazyk", // 40
"ZMÁČKNĚTE MODE PRO ULOŽENÍ", // 41
"Zap", // 42
"Zap.", // 42
"Softmute FM", // 43 ***
"Softmute AM", // 44 ***
"Pípnutí na konci pásma", // 45
"Pípnout na konci pásma", // 45
"Region", // 46 ***
"Evropa", // 47
"America", // 48 ***
"Amerika", // 48 ***
"Zobrazit podtržítka v RDS", // 49
"USB mód", // 50
"Wi-Fi active", // 51 ***
"Režim USB", // 50
"Wi-Fi aktiv", // 51 ***
"Konfigurace Wi-Fi", // 52
"Připojte se k: ", // 53
"pro nakonfigurování Wi-Fi", // 54
@@ -1676,44 +1676,44 @@ static const char* const myLanguage[18][228] PROGMEM = {
"PŘIPOJENO!", // 57
"Stationlist IP", // 58
"Zobrazit SW pásmo", // 59
"RDS filter", // 60 ***
"RDS filtr", // 60 ***
"Zobrazit chyby v PI", // 61
"Zobrazit squelch", // 62 NEEDS NEW TRANSLATION, ENGLISH: USE SQUELCH
"Použít squelch", // 62
"Graf modulace", // 63
"Tlumič šumu (AM)", // 64
"Tlumič šumu (FM)", // 65
"Výchozí hodnoty načteny", // 66
"Zvukový výstup", // 67
"Povolit ladění přes šetřic", // 68
"Povolit ladění přes spořič", // 68
"Invertování barev", // 69
"O softru", // 70
"O softwaru", // 70
"Hlavní kód:", // 71
"Přispěli:", // 72
"Neznámý", // 73
"Nastavení šetřiče obrazovky", // 74
"Čas", // 75
"Nastavení spořiče obrazovky", // 74
"Časovač vypnutí", // 75
"Vypnutí obrazovky", // 76
"Vzhled", // 77
"Skin", // 78 ***
"Detekované aplikace", // 79
"Min.", // 80 ***
"Dynamic SPI speed", // 81 ***
"Scan sensitivity", // 82
"NONE", // 83 represents: AM/FM bands unavailable(please delete this note after translation
"Software version", // 84
"Frequency font", // 85 ***
"Dynamická rychlost SPI", // 81 ***
"Citlivost skenu", // 82
"Žádné", // 83
"Verze softwaru", // 84
"Font frekvence", // 85 ***
"Auto", // 86
"AF nedostupné", // 87
"EON nedostupný", // 88
"RT+ nedostupný", // 89
"Krokování FM", // 90
"Šetřič obrazovky", // 91
"Sekund", // 92
"Výchozí krok ladění FM", // 90
"Spořič obrazovky", // 91
"Sec.", // 92
"ZMÁČKNĚTE BAND PRO ZAVŘENÍ", // 93
"1% jas", // 94
"25% jas", // 95
"50% jas", // 96
"AM Offset signálu:", // 97
"AM offset signálu:", // 97
"Jednotka signálu:", // 98
"AF:", // 99
"Zvolte FM pásmo:", // 100
@@ -1723,7 +1723,7 @@ static const char* const myLanguage[18][228] PROGMEM = {
"SW", // 104 ***
"FM", // 105 ***
"OIRT", // 106 ***
"Rotating while screen off", // 107 ***
"Ladění při vypnuté obrazovce", // 107 ***
"Volba modelu", // 108
"Základ (ILI9341)", // 109
"Přenosný (ILI9341)", // 110
@@ -1785,14 +1785,14 @@ static const char* const myLanguage[18][228] PROGMEM = {
"Identifier", // 166 ***
"Purchase", // 167 ***
"Get data", // 168 ***
"MW default stepsize", // 169 ***
"Výchozí krok ladění MW", // 169 ***
"Tangerine", // 170 ***
"Ocean", // 171 ***
"Indigo", // 172 ***
"Nastavení baterie", // 173
"Úroveň nabití baterie", // 173
"Zobrazit napětí", // 174
"Zobrazit procenta", // 175
"RT načítaní", // 176
"RT buffering", // 176
"Hlavní nastavení", // 177
"Nastavení zvuku", // 178
"Nastavení displeje", // 179
@@ -1811,39 +1811,39 @@ static const char* const myLanguage[18][228] PROGMEM = {
"RDS", // 192 ***
"FM", // 193 ***
"AM", // 194 ***
"PŘIPOJENÍ", // 195
"DX MODE", // 196
"KONEKTIVITA", // 195
"DX REŽIM", // 196
"Stationlist ID", // 197 ***
"AM ATT", // 198
"FM deemphasis", // 199 ***
"Malý", // 200
"Velký", // 201
"FM deemfáze", // 199 ***
"Malé", // 200
"Velké", // 201
"Vše", // 202
"Rychlé načtení PS", // 203
"Default", // 204
"Mute screen on\nXDRGTK connection", // 205
"FMSI stereo\nimprovement", // 206
"Function only available\non TEF6687/6689!", // 207
"Function not available\non selected skin!", // 208
"Begin scanning\nmemory channels", // 209
"Stop scanning\nmemory channels", // 210
"Wait time", // 211
"Start DX scanning", // 212
"FM DX Options", // 213
"Abort! The start channel\nis marked as skipped.", // 214
"Výchozí", // 204
"Vypnout displej při\nXDRGTK připojení", // 205
"FMSI stereo\nvylepšení", // 206
"Funkce dostupná pouze\nu TEF6687/6689!", // 207
"Funkce není dostupná\nu zvoleného skinu!", // 208
"Začít skenovat\nod předvolby č.", // 209
"Skončit skenování\nu předvolby č.", // 210
"Doba čekání", // 211
"Spustit DX skenování", // 212
"Nastavení FM DX", // 213
"Přerušeno! Začáteční předvolba\nje označena jako prázdná.", // 214
"Auto řazení AF", // 215
"Memory channels", // 216
"Exclude", // 217
"Only", // 218
"Auto cancel scan", // 219
"Correct PI", // 220
"Signal", // 221
"Mute audio\nwhile scanning", // 222
"Předvolby paměti", // 216
"Vyloučit", // 217
"Pouze", // 218
"Automaticky zastavit skenování", // 219
"při načtení korektního PI", // 220
"při signálu", // 221
"Ztlumit zvuk\nběhem skenování", // 222
"AIR", // 223
"5 sec. bandbutton press", // 224
"Power off", // 225
"Mute screen", // 226
"Disabled" // 227
"Při 5 sec. stisknutí tl. BAND", // 224
"Vypnout", // 225
"Vypnout displej", // 226
"Zakázáno" // 227
},
{ "Slovenský", // Slovak
@@ -2759,11 +2759,11 @@ static const char* const myLanguage[18][228] PROGMEM = {
"При корректном PI", // 220
"При наличии сигнала", // 221
"Отключать аудио\nпри сканировании", // 222
"AIR", // 223
"5 sec. bandbutton press", // 224
"Power off", // 225
"Mute screen", // 226
"Disabled" // 227
"Эфир", // 223
"5 сек. зажатия кнопки диапазона", // 224
"Приемник выключен", // 225
"Экран выключен", // 226
"Выключено" // 227
},
{ "Українська", // Ukranian
@@ -2970,30 +2970,30 @@ static const char* const myLanguage[18][228] PROGMEM = {
"Багато", // 201
"Усе", // 202
"Швидкий PS", // 203
"Default", // 204
"Mute screen on\nXDRGTK connection", // 205
"FMSI stereo\nimprovement", // 206
"Function only available\non TEF6687/6689!", // 207
"Function not available\non selected skin!", // 208
"Begin scanning\nmemory channels", // 209
"Stop scanning\nmemory channels", // 210
"Wait time", // 211
"Start DX scanning", // 212
"FM DX Options", // 213
"Abort! The start channel\nis marked as skipped.", // 214
"За замовчуванням", // 204
"Вимкнути екран під час підключення\nXDRGTK", // 205
"Покращення стерео\nFMSI", // 206
"Функція доступна лише\nдля TEF6687/6689!", // 207
"Функція недоступна\nдля вибраної шкіри!", // 208
"Почати сканування\nканалів пам'яті", // 209
"Зупинити сканування\nканалів пам'яті", // 210
"Час очікування", // 211
"Почати сканування DX", // 212
"Параметри FM DX", // 213
"Припинити! Початковий канал\позначено як пропущений.", // 214
"Авто сорт. AF", // 215
"Memory channels", // 216
"Exclude", // 217
"Only", // 218
"Auto cancel scan", // 219
"Correct PI", // 220
"Signal", // 221
"Mute audio\nwhile scanning", // 222
"AIR", // 223
"5 sec. bandbutton press", // 224
"Power off", // 225
"Mute screen", // 226
"Disabled" // 227
"Канали пам'яті", // 216
"Виключити", // 217
"ільки", // 218
"Автоматичне скасування сканування", // 219
"Правильний ПІ", // 220
"Сигнал", // 221
"Вимкнути звук\nпід час сканування", // 222
"Ефір", // 223
"5 сек. затискання кнопки діапазону", // 224
"Приймач вимкнений", // 225
"Екран вимкнено", // 226
"Вимкнено" // 227
},
{ "Italiano", // Italian
@@ -3037,7 +3037,7 @@ static const char* const myLanguage[18][228] PROGMEM = {
"Mostra errori RDS", // 38
"Lingua", // 39
"Scegli la lingua", // 40
"SALVA E ESCI: PREMI MODE", // 41
"SALVA E ESCI: PREMI MODO", // 41
"On", // 42 ***
"Softmute FM", // 43 ***
"Softmute AM", // 44 ***
@@ -3088,8 +3088,8 @@ static const char* const myLanguage[18][228] PROGMEM = {
"RT + non disponibile", // 89
"Passo di sintonia predef. FM", // 90
"Salvaschermo", // 91
"Secondi", // 92
"PREMI BAND PER CHIUDERE", // 93
"Sec.", // 92
"PREMI BANDA PER CHIUDERE", // 93
"1% luminosità", // 94
"25% di luminosità", // 95
"50% di luminosità", // 96
@@ -3180,7 +3180,7 @@ static const char* const myLanguage[18][228] PROGMEM = {
"Impostazioni FM", // 181 ***
"Impostazioni AM", // 182 ***
"Connettività", // 183 ***
"PREMI MODO PER RITORNARE", // 184 ***
"PREMI MODO PER CHIUDERE", // 184 ***
"CoChannelDet AM", // 185
"Sensibilità CoChannelDet", // 186
"Soglia CoChannelDet AM", // 187
@@ -3192,38 +3192,38 @@ static const char* const myLanguage[18][228] PROGMEM = {
"FM", // 193 ***
"AM", // 194 ***
"CONNETTI", // 195 ***
"DX MODE", // 196
"MODO DX", // 196
"ID Stationlist", // 197 ***
"ATT AM", // 198
"Deenfasi FM", // 199 ***
"Piccolo", // 200 ***
"Grande", // 201 ***
"Tutto", // 202 ***
"PS veloce", // 203 ***
"PS rapido", // 203 ***
"Default", // 204
"Spegni schermo se\nconnesso a XDRGTK", // 205
"FMSI miglioramento\nsuono stereofonico", // 206
"FMSI audio stereofonico\nottimizzato", // 206
"Funzione disponibile\nsolo su TEF6687/6689!", // 207
"Funzione non disponibile\nsulla skin selezionata!", // 208
"Avvio scansione\ncanali in memoria", // 209
"Fine scansione\ncanali in memoria", // 210
"Funzione non disponibile\nsu skin selezionata!", // 208
"Avvio scansione\ncanale in memoria", // 209
"Fine scansione\ncanale in memoria", // 210
"Tempo di attesa", // 211
"Avvio scansione DX", // 212
"Opzioni FM DX", // 213
"Interrotto! Il canale di avvio\nviene saltato.", // 214
"Stop! Canale di avvio\nimpost. su ignora", // 214
"Autoordinamento AF", // 215
"Canali di memoria", // 216
"Escludere", // 217
"Canali in memoria", // 216
"Esclusi", // 217
"Solamente", // 218
"Fine scansione automatica", // 219
"Uscita automatica scansione", // 219
"PI corretto", // 220
"Signale", // 221
"Segnale", // 221
"Audio silenziato\ndurante scansione", // 222
"AIR", // 223
"5 sec. bandbutton press", // 224
"Power off", // 225
"Mute screen", // 226
"Disabled" // 227
"Pressione x 5 sec.\npulsante BANDA", // 224
"Spegnimento", // 225
"Disattiva schermo", // 226
"Funzione disabilitata" // 227
},
{ "Simplified Chinese", // Simplified Chinese
+66 -23
View File
@@ -7,6 +7,7 @@
int Radiotextlengthold;
int RadiotextWidth;
int PSLongWidth;
int AIDlengthold;
int AIDWidth;
int afstringlengthold;
@@ -14,6 +15,7 @@ int afstringWidth;
int eonstringlengthold;
int eonstringWidth;
int rtplusstringlengthold;
int PSLonglengthold;
int rtplusstringWidth;
void ShowAdvancedRDS() {
@@ -74,7 +76,7 @@ void ShowAdvancedRDS() {
}
String afstring;
if (radio.rds.hasAF) for (byte i = 0; i < radio.af_counter; i++) afstring += String(radio.af[i].frequency / 100) + "." + String((radio.af[i].frequency % 100) / 10) + (i == radio.af_counter - 1 ? " " : " | "); else afstring = myLanguage[language][87];
if (radio.rds.hasAF && radio.af_counter > 0) for (byte i = 0; i < radio.af_counter; i++) afstring += String(radio.af[i].frequency / 100) + "." + String((radio.af[i].frequency % 100) / 10) + (i == radio.af_counter - 1 ? " " : " | "); else afstring = myLanguage[language][87];
if (hasafold != radio.rds.hasAF) {
if (!screenmute) {
if (radio.rds.hasAF) tftPrint(-1, "AF", 50, 51, RDSColor, RDSColorSmooth, 16); else tftPrint(-1, "AF", 50, 51, GreyoutColor, BackgroundColor, 16);
@@ -83,7 +85,7 @@ void ShowAdvancedRDS() {
}
if (millis() - afticker >= 5) {
if (radio.rds.hasAF) {
if (radio.rds.hasAF && afstring.length() > 30) {
if (afstring.length() != afstringlengthold) {
afstringWidth = afstring.length() * charwidth;
afstringlengthold = afstring.length();
@@ -105,7 +107,7 @@ void ShowAdvancedRDS() {
RDSSprite.fillSprite(BackgroundColor);
if (RDSstatus) RDSSprite.setTextColor(RDSColor, RDSColorSmooth, false); else RDSSprite.setTextColor(RDSDropoutColor, RDSDropoutColorSmooth, false);
RDSSprite.drawString(afstring, xPos2, 2);
if (radio.rds.hasAF) RDSSprite.drawString(afstring, xPos2 + afstringWidth, 2);
if (radio.rds.hasAF && afstring.length() > 30) RDSSprite.drawString(afstring, xPos2 + afstringWidth, 2);
RDSSprite.pushSprite(35, 197);
afticker = millis();
}
@@ -315,16 +317,23 @@ void readRds() {
}
}
if (advancedRDS) {
tftPrint(-1, PSold, 36, 75, RDSDropoutColor, RDSDropoutColorSmooth, 28);
} else {
tftPrint(-1, PSold, 36, 187, RDSDropoutColor, RDSDropoutColorSmooth, 28);
PSSprite.fillSprite(BackgroundColor);
PSSprite.setTextColor(RDSDropoutColor, RDSDropoutColorSmooth, false);
PSSprite.drawString(PSold, 0, 0);
if (!radio.rds.hasLongPS) {
if (advancedRDS) {
PSSprite.pushSprite(36, 74);
} else {
PSSprite.pushSprite(36, 187);
}
}
if (advancedRDS) {
tftPrint(-1, PTYold, 36, 109, RDSDropoutColor, RDSDropoutColorSmooth, 16);
} else {
tftPrint(-1, PTYold, 36, 163, RDSDropoutColor, RDSDropoutColorSmooth, 16);
}
if (advancedRDS) {
tft.fillCircle(86, 41, 5, SignificantColor);
tft.fillCircle(124, 41, 5, SignificantColor);
@@ -363,16 +372,23 @@ void readRds() {
}
}
if (advancedRDS) {
tftPrint(-1, PSold, 36, 75, RDSColor, RDSColorSmooth, 28);
} else {
tftPrint(-1, PSold, 36, 187, RDSColor, RDSColorSmooth, 28);
PSSprite.fillSprite(BackgroundColor);
PSSprite.setTextColor(RDSColor, RDSColorSmooth, false);
PSSprite.drawString(PSold, 0, 0);
if (!radio.rds.hasLongPS) {
if (advancedRDS) {
PSSprite.pushSprite(36, 74);
} else {
PSSprite.pushSprite(36, 187);
}
}
if (advancedRDS) {
tftPrint(-1, PTYold, 36, 109, RDSColor, RDSColorSmooth, 16);
} else {
tftPrint(-1, PTYold, 36, 163, RDSColor, RDSColorSmooth, 16);
}
if (!advancedRDS) {
tft.fillCircle(314, 223, 2, GreyoutColor);
tft.fillCircle(314, 234, 2, GreyoutColor);
@@ -653,26 +669,53 @@ void showPTY() {
}
void showPS() {
if (radio.rds.stationName != PSold) {
if (radio.rds.stationName != PSold || radio.rds.hasLongPS) {
if (!screenmute) {
if (advancedRDS) {
if (!RDSstatus) {
tftReplace(-1, PSold, radio.rds.stationName, 36, 75, RDSDropoutColor, RDSDropoutColorSmooth, BackgroundColor, 28);
} else {
tftReplace(-1, PSold, radio.rds.stationName, 36, 75, RDSColor, RDSColorSmooth, BackgroundColor, 28);
}
} else if (afscreen) {
if (afscreen) {
tftReplace(0, PSold, radio.rds.stationName, 160, 201, BWAutoColor, BWAutoColorSmooth, BackgroundColor, 16);
} else {
if (!RDSstatus) {
tftReplace(-1, PSold, radio.rds.stationName, 36, 187, RDSDropoutColor, RDSDropoutColorSmooth, BackgroundColor, 28);
if (radio.rds.hasLongPS) {
PSLongWidth = (String(radio.rds.stationNameLong).length() * (charwidth + 4));
PSLonglengthold = String(radio.rds.stationNameLong).length();
if (millis() - pslongticker >= (advancedRDS ? 5 : 15)) {
if (xPos5 == 0) {
if (millis() - pslongtickerhold >= 1000) {
xPos5 --;
pslongtickerhold = millis();
}
} else {
xPos5 --;
pslongtickerhold = millis();
}
PSSprite.setTextDatum(TL_DATUM);
if (xPos5 < -PSLongWidth) xPos5 = 0;
if (advancedRDS) {
PSSprite.fillSprite(BackgroundColor);
if (RDSstatus) PSSprite.setTextColor(RDSColor, RDSColorSmooth, false); else PSSprite.setTextColor(RDSDropoutColor, RDSDropoutColorSmooth, false);
PSSprite.drawString(radio.rds.stationNameLong, xPos5, 0);
PSSprite.drawString(radio.rds.stationNameLong, xPos5 + PSLongWidth, 0);
} else {
PSSprite.fillSprite(BackgroundColor);
if (RDSstatus) PSSprite.setTextColor(RDSColor, RDSColorSmooth, false); else PSSprite.setTextColor(RDSDropoutColor, RDSDropoutColorSmooth, false);
PSSprite.drawString(radio.rds.stationNameLong, xPos5, 0);
PSSprite.drawString(radio.rds.stationNameLong, xPos5 + PSLongWidth, 0);
}
pslongticker = millis();
}
} else {
tftReplace(-1, PSold, radio.rds.stationName, 36, 187, RDSColor, RDSColorSmooth, BackgroundColor, 28);
xPos5 = 0;
PSSprite.fillSprite(BackgroundColor);
if (!RDSstatus) PSSprite.setTextColor(RDSDropoutColor, RDSDropoutColorSmooth, false); else PSSprite.setTextColor(RDSColor, RDSColorSmooth, false);
PSSprite.drawString(radio.rds.stationName, 0, 0);
}
if (advancedRDS) PSSprite.pushSprite(36, 74); else PSSprite.pushSprite(36, 187);
}
}
PSold = radio.rds.stationName;
if (wifi) {
if (wifi && PSold != radio.rds.stationName) {
Udp.beginPacket(remoteip, 9030);
Udp.print("from=TEF_tuner " + String(stationlistid, DEC) + ";PS=");
char PShex[9];
+4
View File
@@ -86,6 +86,7 @@ extern int xPos;
extern int xPos2;
extern int xPos3;
extern int xPos4;
extern int xPos5;
extern int16_t SAvg3;
extern IPAddress remoteip;
extern String AIDString;
@@ -114,6 +115,8 @@ extern unsigned long aftickerhold;
extern unsigned long aftimer;
extern unsigned long eonticker;
extern unsigned long eontickerhold;
extern unsigned long pslongticker;
extern unsigned long pslongtickerhold;
extern unsigned long rtplusticker;
extern unsigned long rtplustickerhold;
extern unsigned long rtticker;
@@ -126,6 +129,7 @@ extern WiFiClient RemoteClient;
extern WiFiUDP Udp;
extern TFT_eSprite RadiotextSprite;
extern TFT_eSprite RDSSprite;
extern TFT_eSprite PSSprite;
void ShowAdvancedRDS();
void readRds();