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