Small fix for PS and more

- Added menu option for dynamic PI. When PI changes (due fading and another station is received on the same frequency), when dynamic PI is enabled, new PI will be shown. Disadvance of this, is that on weak signals correct received PI can be overwritten by a false PI.

- Smallest font now 1px larger
- When no battery, the icon is not shown.

- PS is now stable when length < 8 characters

- Enabled Stationlist for AM (tuning currently not possible)
This commit is contained in:
Sjef Verhoeven PE5PVB
2023-06-19 21:36:02 +02:00
parent 257f1e9502
commit ebbe47da52
5 changed files with 2237 additions and 67 deletions
+88 -45
View File
@@ -14,7 +14,7 @@
#define GFXFF 1 #define GFXFF 1
#define FONT24 &Aura2ProRegular24pt7b #define FONT24 &Aura2ProRegular24pt7b
#define FONT14 &Aura2ProRegular14pt8b #define FONT14 &Aura2ProRegular14pt8b
#define FONT7 &Aura2ProRegular7pt8b #define FONT8 &Aura2ProRegular8pt8b
#define TFT_GREYOUT 0x38E7 #define TFT_GREYOUT 0x38E7
#define ROTARY_PIN_A 34 #define ROTARY_PIN_A 34
@@ -260,6 +260,7 @@ void setup() {
EEPROM.writeByte(56, 1); EEPROM.writeByte(56, 1);
EEPROM.writeByte(57, 1); EEPROM.writeByte(57, 1);
EEPROM.writeByte(58, 1); EEPROM.writeByte(58, 1);
EEPROM.writeByte(59, 0);
for (int i = 0; i < 30; i++) EEPROM.writeByte(i + 60, 0); for (int i = 0; i < 30; i++) EEPROM.writeByte(i + 60, 0);
for (int i = 0; i < 30; i++) EEPROM.writeUInt((i * 4) + 100, 8750); for (int i = 0; i < 30; i++) EEPROM.writeUInt((i * 4) + 100, 8750);
EEPROM.writeUInt(221, 180); EEPROM.writeUInt(221, 180);
@@ -304,6 +305,7 @@ void setup() {
subnetclient = EEPROM.readByte(56); subnetclient = EEPROM.readByte(56);
showSWMIBand = EEPROM.readByte(57); showSWMIBand = EEPROM.readByte(57);
radio.rds.filter = EEPROM.readByte(58); radio.rds.filter = EEPROM.readByte(58);
radio.rds.dynamicpi = EEPROM.readByte(59);
frequency_LW = EEPROM.readUInt(221); frequency_LW = EEPROM.readUInt(221);
frequency_MW = EEPROM.readUInt(225); frequency_MW = EEPROM.readUInt(225);
frequency_SW = EEPROM.readUInt(229); frequency_SW = EEPROM.readUInt(229);
@@ -446,7 +448,7 @@ void setup() {
tft.setFreeFont(FONT14); tft.setFreeFont(FONT14);
tft.setTextColor(TFT_SKYBLUE); tft.setTextColor(TFT_SKYBLUE);
tft.drawCentreString(myLanguage[language][8], 160, 17, GFXFF); tft.drawCentreString(myLanguage[language][8], 160, 17, GFXFF);
tft.setFreeFont(FONT7); tft.setFreeFont(FONT8);
tft.setTextColor(TFT_YELLOW); tft.setTextColor(TFT_YELLOW);
tft.drawCentreString("Software " + String(VERSION), 160, 48, GFXFF); tft.drawCentreString("Software " + String(VERSION), 160, 48, GFXFF);
tft.setTextColor(TFT_WHITE); tft.setTextColor(TFT_WHITE);
@@ -505,7 +507,7 @@ void setup() {
ShowSignalLevel(); ShowSignalLevel();
ShowBW(); ShowBW();
setupmode = false; setupmode = false;
sprite.createSprite(317, 14); sprite.createSprite(317, 16);
radio.tone(50, -5, 2000); radio.tone(50, -5, 2000);
} }
@@ -519,7 +521,7 @@ void loop() {
if ((SStatus / 10 > LowLevelSet) && LowLevelInit == false && menu == false && band == BAND_FM) { if ((SStatus / 10 > LowLevelSet) && LowLevelInit == false && menu == false && band == BAND_FM) {
if (screenmute == false) { if (screenmute == false) {
tft.setFreeFont(FONT7); tft.setFreeFont(FONT8);
tft.setTextColor(TFT_WHITE); tft.setTextColor(TFT_WHITE);
tft.drawString("20", 20, 146, GFXFF); tft.drawString("20", 20, 146, GFXFF);
tft.drawString("40", 50, 146, GFXFF); tft.drawString("40", 50, 146, GFXFF);
@@ -541,7 +543,7 @@ void loop() {
if ((SStatus / 10 <= LowLevelSet) && band == BAND_FM) { if ((SStatus / 10 <= LowLevelSet) && band == BAND_FM) {
if (LowLevelInit == true && menu == false) { if (LowLevelInit == true && menu == false) {
if (screenmute == false) { if (screenmute == false) {
tft.setFreeFont(FONT7); tft.setFreeFont(FONT8);
tft.fillRect(20, 139, 12, 8, TFT_GREYOUT); tft.fillRect(20, 139, 12, 8, TFT_GREYOUT);
tft.fillRect(34, 139, 12, 8, TFT_GREYOUT); tft.fillRect(34, 139, 12, 8, TFT_GREYOUT);
tft.fillRect(48, 139, 12, 8, TFT_GREYOUT); tft.fillRect(48, 139, 12, 8, TFT_GREYOUT);
@@ -1093,7 +1095,7 @@ void SelectBand() {
doBW; doBW;
radio.getStatusAM(SStatus, USN, WAM, OStatus, BW, MStatus); radio.getStatusAM(SStatus, USN, WAM, OStatus, BW, MStatus);
if (screenmute == false) BuildDisplay(); if (screenmute == false) BuildDisplay();
tft.setFreeFont(FONT7); tft.setFreeFont(FONT8);
if (region == 0) tft.drawString("PI:", 216, 191, GFXFF); if (region == 0) tft.drawString("PI:", 216, 191, GFXFF);
if (region == 1) tft.drawString("ID:", 216, 191, GFXFF); if (region == 1) tft.drawString("ID:", 216, 191, GFXFF);
tft.drawString("PS:", 6, 191, GFXFF); tft.drawString("PS:", 6, 191, GFXFF);
@@ -1224,6 +1226,7 @@ void ModeButtonPress() {
EEPROM.writeByte(56, subnetclient); EEPROM.writeByte(56, subnetclient);
EEPROM.writeByte(57, showSWMIBand); EEPROM.writeByte(57, showSWMIBand);
EEPROM.writeByte(58, radio.rds.filter); EEPROM.writeByte(58, radio.rds.filter);
EEPROM.writeByte(59, radio.rds.dynamicpi);
EEPROM.commit(); EEPROM.commit();
Serial.end(); Serial.end();
if (wifi) remoteip = IPAddress (WiFi.localIP()[0], WiFi.localIP()[1], WiFi.localIP()[2], subnetclient); if (wifi) remoteip = IPAddress (WiFi.localIP()[0], WiFi.localIP()[1], WiFi.localIP()[2], subnetclient);
@@ -1516,7 +1519,7 @@ void ButtonPress() {
tft.drawCentreString(myLanguage[language][53], 155, 50, GFXFF); tft.drawCentreString(myLanguage[language][53], 155, 50, GFXFF);
tft.drawCentreString("ESP_" + String(ESP_getChipId()), 155, 90, GFXFF); tft.drawCentreString("ESP_" + String(ESP_getChipId()), 155, 90, GFXFF);
tft.drawCentreString(myLanguage[language][54], 155, 130, GFXFF); tft.drawCentreString(myLanguage[language][54], 155, 130, GFXFF);
tft.setFreeFont(FONT7); tft.setFreeFont(FONT8);
tft.drawCentreString("http://192.168.4.1", 155, 170, GFXFF); tft.drawCentreString("http://192.168.4.1", 155, 170, GFXFF);
char key [9]; char key [9];
XDRGTK_key.toCharArray(key, 9); XDRGTK_key.toCharArray(key, 9);
@@ -1557,6 +1560,13 @@ void ButtonPress() {
tft.setTextColor(TFT_YELLOW); tft.setTextColor(TFT_YELLOW);
if (radio.rds.filter) tft.drawCentreString(myLanguage[language][42], 155, 110, GFXFF); else tft.drawCentreString(myLanguage[language][30], 155, 110, GFXFF); if (radio.rds.filter) tft.drawCentreString(myLanguage[language][42], 155, 110, GFXFF); else tft.drawCentreString(myLanguage[language][30], 155, 110, GFXFF);
break; break;
case 90:
tft.setTextColor(TFT_WHITE);
tft.drawCentreString(myLanguage[language][61], 155, 70, GFXFF);
tft.setTextColor(TFT_YELLOW);
if (radio.rds.dynamicpi) tft.drawCentreString(myLanguage[language][42], 155, 110, GFXFF); else tft.drawCentreString(myLanguage[language][30], 155, 110, GFXFF);
break;
} }
} }
} else { } else {
@@ -1610,7 +1620,7 @@ void KeyUp() {
store = true; store = true;
} else { } else {
if (menuopen == false) { if (menuopen == false) {
tft.drawRoundRect(8, menuoption + 3, 302, 18, 5, TFT_BLACK); tft.drawRoundRect(8, menuoption + 3, 302, 21, 5, TFT_BLACK);
menuoption += 20; menuoption += 20;
if (menuoption > 210) { if (menuoption > 210) {
menupage++; menupage++;
@@ -1618,7 +1628,7 @@ void KeyUp() {
menuoption = 30; menuoption = 30;
BuildMenu(); BuildMenu();
} }
tft.drawRoundRect(8, menuoption + 3, 302, 18, 5, TFT_WHITE); tft.drawRoundRect(8, menuoption + 3, 302, 21, 5, TFT_WHITE);
} else { } else {
switch (menupage) { switch (menupage) {
case 1: case 1:
@@ -1849,6 +1859,14 @@ void KeyUp() {
tft.setTextColor(TFT_YELLOW); tft.setTextColor(TFT_YELLOW);
if (radio.rds.filter) tft.drawCentreString(myLanguage[language][42], 155, 110, GFXFF); else tft.drawCentreString(myLanguage[language][30], 155, 110, GFXFF); if (radio.rds.filter) tft.drawCentreString(myLanguage[language][42], 155, 110, GFXFF); else tft.drawCentreString(myLanguage[language][30], 155, 110, GFXFF);
break; break;
case 90:
tft.setTextColor(TFT_BLACK);
if (radio.rds.dynamicpi) tft.drawCentreString(myLanguage[language][42], 155, 110, GFXFF); else tft.drawCentreString(myLanguage[language][30], 155, 110, GFXFF);
if (radio.rds.dynamicpi) radio.rds.dynamicpi = false; else radio.rds.dynamicpi = true;
tft.setTextColor(TFT_YELLOW);
if (radio.rds.dynamicpi) tft.drawCentreString(myLanguage[language][42], 155, 110, GFXFF); else tft.drawCentreString(myLanguage[language][30], 155, 110, GFXFF);
break;
} }
} }
} }
@@ -1894,7 +1912,7 @@ void KeyDown() {
store = true; store = true;
} else { } else {
if (menuopen == false) { if (menuopen == false) {
tft.drawRoundRect(8, menuoption + 3, 302, 18, 5, TFT_BLACK); tft.drawRoundRect(8, menuoption + 3, 302, 21, 5, TFT_BLACK);
menuoption -= 20; menuoption -= 20;
if (menuoption < 30) { if (menuoption < 30) {
menupage--; menupage--;
@@ -1902,7 +1920,7 @@ void KeyDown() {
menuoption = 210; menuoption = 210;
BuildMenu(); BuildMenu();
} }
tft.drawRoundRect(8, menuoption + 3, 302, 18, 5, TFT_WHITE); tft.drawRoundRect(8, menuoption + 3, 302, 21, 5, TFT_WHITE);
} else { } else {
switch (menupage) { switch (menupage) {
case 1: case 1:
@@ -2134,6 +2152,14 @@ void KeyDown() {
tft.setTextColor(TFT_YELLOW); tft.setTextColor(TFT_YELLOW);
if (radio.rds.filter) tft.drawCentreString(myLanguage[language][42], 155, 110, GFXFF); else tft.drawCentreString(myLanguage[language][30], 155, 110, GFXFF); if (radio.rds.filter) tft.drawCentreString(myLanguage[language][42], 155, 110, GFXFF); else tft.drawCentreString(myLanguage[language][30], 155, 110, GFXFF);
break; break;
case 90:
tft.setTextColor(TFT_BLACK);
if (radio.rds.dynamicpi) tft.drawCentreString(myLanguage[language][42], 155, 110, GFXFF); else tft.drawCentreString(myLanguage[language][30], 155, 110, GFXFF);
if (radio.rds.dynamicpi) radio.rds.dynamicpi = false; else radio.rds.dynamicpi = true;
tft.setTextColor(TFT_YELLOW);
if (radio.rds.dynamicpi) tft.drawCentreString(myLanguage[language][42], 155, 110, GFXFF); else tft.drawCentreString(myLanguage[language][30], 155, 110, GFXFF);
break;
} }
} }
} }
@@ -2141,7 +2167,7 @@ void KeyDown() {
} }
void ShowMemoryPos() { void ShowMemoryPos() {
tft.setFreeFont(FONT7); tft.setFreeFont(FONT8);
tft.setTextColor(TFT_BLACK); tft.setTextColor(TFT_BLACK);
tft.drawString(String(memoryposold + 1), 80, 26, GFXFF); tft.drawString(String(memoryposold + 1), 80, 26, GFXFF);
tft.setTextColor(TFT_SKYBLUE); tft.setTextColor(TFT_SKYBLUE);
@@ -2178,10 +2204,10 @@ void readRds() {
tft.drawString(PIold, 244, 183, GFXFF); tft.drawString(PIold, 244, 183, GFXFF);
tft.setFreeFont(FONT14); tft.setFreeFont(FONT14);
tft.drawString(PSold, 38, 183, GFXFF); tft.drawString(PSold, 38, 183, GFXFF);
tft.setFreeFont(FONT7); tft.setFreeFont(FONT8);
tft.drawString(PTYold, 38, 164, GFXFF); tft.drawString(PTYold, 38, 164, GFXFF);
tft.setTextColor(TFT_BLACK); tft.setTextColor(TFT_BLACK);
tft.setFreeFont(FONT7); tft.setFreeFont(FONT8);
tft.drawString(RTold, 1, 223, GFXFF); tft.drawString(RTold, 1, 223, GFXFF);
dropout = true; dropout = true;
} else { } else {
@@ -2191,7 +2217,7 @@ void readRds() {
tft.drawString(PIold, 244, 183, GFXFF); tft.drawString(PIold, 244, 183, GFXFF);
tft.setFreeFont(FONT14); tft.setFreeFont(FONT14);
tft.drawString(PSold, 38, 183, GFXFF); tft.drawString(PSold, 38, 183, GFXFF);
tft.setFreeFont(FONT7); tft.setFreeFont(FONT8);
tft.drawString(PTYold, 38, 164, GFXFF); tft.drawString(PTYold, 38, 164, GFXFF);
dropout = false; dropout = false;
} }
@@ -2291,7 +2317,7 @@ void showPI() {
void showPTY() { void showPTY() {
if (strcmp(radio.rds.stationType, programTypePrevious)) { if (strcmp(radio.rds.stationType, programTypePrevious)) {
tft.setFreeFont(FONT7); tft.setFreeFont(FONT8);
tft.setTextColor(TFT_BLACK); tft.setTextColor(TFT_BLACK);
tft.drawString(PTYold, 38, 164, GFXFF); tft.drawString(PTYold, 38, 164, GFXFF);
tft.setTextColor(TFT_YELLOW); tft.setTextColor(TFT_YELLOW);
@@ -2329,6 +2355,8 @@ void showPS() {
Udp.endPacket(); Udp.endPacket();
} }
programServicePrevious = radio.rds.stationName; programServicePrevious = radio.rds.stationName;
tft.drawLine(0, 187, 320, 187, TFT_BLUE);
tft.drawLine(0, 218, 320, 218, TFT_BLUE);
} }
} }
@@ -2337,12 +2365,12 @@ void showRadioText() {
if (millis() - rtticker >= 350) { if (millis() - rtticker >= 350) {
xPos -= charWidth; xPos -= charWidth;
if (xPos < -tft.textWidth(radio.rds.stationText) + (charWidth * 24)) xPos = 6; if (xPos < -tft.textWidth(radio.rds.stationText) + (charWidth * 24)) xPos = 6;
sprite.setFreeFont(FONT7); sprite.setFreeFont(FONT8);
sprite.setTextDatum(ML_DATUM); sprite.setTextDatum(ML_DATUM);
sprite.fillSprite(TFT_BLACK); sprite.fillSprite(TFT_BLACK);
sprite.setTextColor(TFT_YELLOW); sprite.setTextColor(TFT_YELLOW);
sprite.drawString(radio.rds.stationText, xPos, yPos, GFXFF); sprite.drawString(radio.rds.stationText, xPos, yPos, GFXFF);
sprite.pushSprite(1, 223); sprite.pushSprite(1, 222);
rtticker = millis(); rtticker = millis();
RTold = radio.rds.stationText; RTold = radio.rds.stationText;
radioTextPrevious = radio.rds.stationText; radioTextPrevious = radio.rds.stationText;
@@ -2350,9 +2378,10 @@ void showRadioText() {
} }
} else if (cleanup == true) { } else if (cleanup == true) {
sprite.fillSprite(TFT_BLACK); sprite.fillSprite(TFT_BLACK);
sprite.pushSprite(1, 223); sprite.pushSprite(1, 222);
cleanup = false; cleanup = false;
} }
if (wifi) { if (wifi) {
Udp.beginPacket(remoteip, 9030); Udp.beginPacket(remoteip, 9030);
Udp.print("from=TEF tuner;RT1="); Udp.print("from=TEF tuner;RT1=");
@@ -2366,11 +2395,12 @@ void showRadioText() {
} }
Udp.endPacket(); Udp.endPacket();
} }
tft.drawLine(0, 240, 320, 240, TFT_BLUE);
} }
void showTP() { void showTP() {
if (TPold != radio.rds.hasTP) { if (TPold != radio.rds.hasTP) {
tft.setFreeFont(FONT7); tft.setFreeFont(FONT8);
if (radio.rds.hasTP == true) tft.setTextColor(TFT_SKYBLUE); else tft.setTextColor(TFT_GREYOUT); if (radio.rds.hasTP == true) tft.setTextColor(TFT_SKYBLUE); else tft.setTextColor(TFT_GREYOUT);
tft.drawRightString("TP", 205, 184, GFXFF); tft.drawRightString("TP", 205, 184, GFXFF);
TPold = radio.rds.hasTP; TPold = radio.rds.hasTP;
@@ -2379,7 +2409,7 @@ void showTP() {
void showTA() { void showTA() {
if (TAold != radio.rds.hasTA) { if (TAold != radio.rds.hasTA) {
tft.setFreeFont(FONT7); tft.setFreeFont(FONT8);
if (radio.rds.hasTA == true) tft.setTextColor(TFT_SKYBLUE); else tft.setTextColor(TFT_GREYOUT); if (radio.rds.hasTA == true) tft.setTextColor(TFT_SKYBLUE); else tft.setTextColor(TFT_GREYOUT);
tft.drawRightString("TA", 205, 198, GFXFF); tft.drawRightString("TA", 205, 198, GFXFF);
TAold = radio.rds.hasTA; TAold = radio.rds.hasTA;
@@ -2388,7 +2418,7 @@ void showTA() {
void showEON() { void showEON() {
if (EONold != radio.rds.hasEON) { if (EONold != radio.rds.hasEON) {
tft.setFreeFont(FONT7); tft.setFreeFont(FONT8);
if (radio.rds.hasEON == true) tft.setTextColor(TFT_SKYBLUE); else tft.setTextColor(TFT_GREYOUT); if (radio.rds.hasEON == true) tft.setTextColor(TFT_SKYBLUE); else tft.setTextColor(TFT_GREYOUT);
tft.drawRightString("EON", 185, 198, GFXFF); tft.drawRightString("EON", 185, 198, GFXFF);
EONold = radio.rds.hasEON; EONold = radio.rds.hasEON;
@@ -2397,7 +2427,7 @@ void showEON() {
void showMS() { void showMS() {
if (MSold != radio.rds.MS) { if (MSold != radio.rds.MS) {
tft.setFreeFont(FONT7); tft.setFreeFont(FONT8);
switch (radio.rds.MS) { switch (radio.rds.MS) {
case 0: case 0:
tft.setTextColor(TFT_GREYOUT); tft.setTextColor(TFT_GREYOUT);
@@ -2435,7 +2465,7 @@ void showCT() {
rds_clock = ""; rds_clock = "";
} }
if (rds_clock != rds_clockold) { if (rds_clock != rds_clockold) {
tft.setFreeFont(FONT7); tft.setFreeFont(FONT8);
tft.setTextColor(TFT_BLACK); tft.setTextColor(TFT_BLACK);
tft.drawRightString(rds_clockold, 205, 164, GFXFF); tft.drawRightString(rds_clockold, 205, 164, GFXFF);
tft.setTextColor(TFT_YELLOW); tft.setTextColor(TFT_YELLOW);
@@ -2445,7 +2475,7 @@ void showCT() {
} }
void BuildMenu() { void BuildMenu() {
tft.setFreeFont(FONT7); tft.setFreeFont(FONT8);
tft.fillScreen(TFT_BLACK); tft.fillScreen(TFT_BLACK);
tft.drawRect(0, 0, 320, 240, TFT_BLUE); tft.drawRect(0, 0, 320, 240, TFT_BLUE);
tft.drawLine(0, 23, 320, 23, TFT_BLUE); tft.drawLine(0, 23, 320, 23, TFT_BLUE);
@@ -2453,7 +2483,7 @@ void BuildMenu() {
tft.drawString(myLanguage[language][41], 10, 1, GFXFF); tft.drawString(myLanguage[language][41], 10, 1, GFXFF);
tft.setTextColor(TFT_WHITE); tft.setTextColor(TFT_WHITE);
tft.drawRightString(String(menupage) + "/" + String(menupagestotal), 305, 1, GFXFF); tft.drawRightString(String(menupage) + "/" + String(menupagestotal), 305, 1, GFXFF);
tft.drawRoundRect(8, menuoption + 3, 302, 18, 5, TFT_WHITE); tft.drawRoundRect(8, menuoption + 3, 302, 21, 5, TFT_WHITE);
tft.setTextColor(TFT_WHITE); tft.setTextColor(TFT_WHITE);
switch (menupage) { switch (menupage) {
case 1: case 1:
@@ -2519,10 +2549,12 @@ void BuildMenu() {
tft.drawString(myLanguage[language][58], 14, 30, GFXFF); tft.drawString(myLanguage[language][58], 14, 30, GFXFF);
tft.drawString(myLanguage[language][59], 14, 50, GFXFF); tft.drawString(myLanguage[language][59], 14, 50, GFXFF);
tft.drawString(myLanguage[language][60], 14, 70, GFXFF); tft.drawString(myLanguage[language][60], 14, 70, GFXFF);
tft.drawString(myLanguage[language][61], 14, 90, GFXFF);
tft.setTextColor(TFT_YELLOW); tft.setTextColor(TFT_YELLOW);
tft.drawRightString(String(WiFi.localIP()[0]) + "." + String(WiFi.localIP()[1]) + "." + String(WiFi.localIP()[2]) + "." + String(subnetclient, DEC), 305, 30, GFXFF); tft.drawRightString(String(WiFi.localIP()[0]) + "." + String(WiFi.localIP()[1]) + "." + String(WiFi.localIP()[2]) + "." + String(subnetclient, DEC), 305, 30, GFXFF);
if (showSWMIBand) tft.drawRightString(myLanguage[language][42], 305, 50, GFXFF); else tft.drawRightString(myLanguage[language][30], 305, 50, GFXFF); if (showSWMIBand) tft.drawRightString(myLanguage[language][42], 305, 50, GFXFF); else tft.drawRightString(myLanguage[language][30], 305, 50, GFXFF);
if (radio.rds.filter) tft.drawRightString(myLanguage[language][42], 305, 70, GFXFF); else tft.drawRightString(myLanguage[language][30], 305, 70, GFXFF); if (radio.rds.filter) tft.drawRightString(myLanguage[language][42], 305, 70, GFXFF); else tft.drawRightString(myLanguage[language][30], 305, 70, GFXFF);
if (radio.rds.dynamicpi) tft.drawRightString(myLanguage[language][42], 305, 90, GFXFF); else tft.drawRightString(myLanguage[language][30], 305, 90, GFXFF);
} }
analogWrite(SMETERPIN, 0); analogWrite(SMETERPIN, 0);
} }
@@ -2572,7 +2604,7 @@ void BuildDisplay() {
} }
} }
tft.setTextColor(TFT_WHITE); tft.setTextColor(TFT_WHITE);
tft.setFreeFont(FONT7); tft.setFreeFont(FONT8);
tft.drawString("SQ:", 216, 152, GFXFF); tft.drawString("SQ:", 216, 152, GFXFF);
tft.drawString("S/N", 250, 167, GFXFF); tft.drawString("S/N", 250, 167, GFXFF);
tft.drawString("dB", 300, 167, GFXFF); tft.drawString("dB", 300, 167, GFXFF);
@@ -2611,7 +2643,7 @@ void BuildDisplay() {
tft.drawCircle(86, 15, 9, TFT_SKYBLUE); tft.drawCircle(86, 15, 9, TFT_SKYBLUE);
} }
tft.setTextColor(TFT_SKYBLUE); tft.setTextColor(TFT_SKYBLUE);
tft.setFreeFont(FONT7); tft.setFreeFont(FONT8);
if (band == BAND_LW) tft.drawString("LW", 50, 26, GFXFF); if (band == BAND_LW) tft.drawString("LW", 50, 26, GFXFF);
else if (band == BAND_MW) tft.drawString("MW", 50, 26, GFXFF); else if (band == BAND_MW) tft.drawString("MW", 50, 26, GFXFF);
else if (band == BAND_SW) tft.drawString("SW", 50, 26, GFXFF); else if (band == BAND_SW) tft.drawString("SW", 50, 26, GFXFF);
@@ -2622,13 +2654,14 @@ void BuildDisplay() {
tft.drawRightString("EON", 185, 198, GFXFF); tft.drawRightString("EON", 185, 198, GFXFF);
tft.drawRightString("TA", 205, 198, GFXFF); tft.drawRightString("TA", 205, 198, GFXFF);
tft.drawRightString("TP", 205, 184, GFXFF); tft.drawRightString("TP", 205, 184, GFXFF);
radio.clearRDS(fullsearchrds);
} }
// WORKING ON THIS! // WORKING ON THIS!
/* /*
if (theme == 1) { if (theme == 1) {
tft.setFreeFont(FONT7); tft.setFreeFont(FONT8);
tft.fillScreen(TFT_BLACK); tft.fillScreen(TFT_BLACK);
tft.fillRect(12, 105, 2, 50, TFT_RED); tft.fillRect(12, 105, 2, 50, TFT_RED);
tft.fillRect(305, 105, 2, 50, TFT_RED); tft.fillRect(305, 105, 2, 50, TFT_RED);
@@ -2831,7 +2864,7 @@ void ShowFreq(int mode) {
if (wifi) { if (wifi) {
Udp.beginPacket(remoteip, 9030); Udp.beginPacket(remoteip, 9030);
Udp.print("from=TEF tuner;freq="); Udp.print("from=TEF tuner;freq=");
if (band == 5) Udp.print(String(frequency_AM) + "000;ClearRDS=1"); else Udp.print(String(frequency) + "0000;ClearRDS=1"); if (band != BAND_FM) Udp.print(String(frequency_AM) + "000;ClearRDS=1"); else Udp.print(String(frequency) + "0000;ClearRDS=1");
Udp.endPacket(); Udp.endPacket();
} }
} }
@@ -2845,7 +2878,7 @@ void ShowSignalLevel() {
snrupdatetimer = millis(); snrupdatetimer = millis();
if (SNR > (SNRold + 1) || SNR < (SNRold - 1)) { if (SNR > (SNRold + 1) || SNR < (SNRold - 1)) {
tft.setFreeFont(FONT7); tft.setFreeFont(FONT8);
tft.setTextColor(TFT_BLACK); tft.setTextColor(TFT_BLACK);
if (SNRold == 99) tft.drawRightString("--", 294, 166, GFXFF); else tft.drawRightString(String(SNRold), 294, 166, GFXFF); if (SNRold == 99) tft.drawRightString("--", 294, 166, GFXFF); else tft.drawRightString(String(SNRold), 294, 166, GFXFF);
tft.setTextColor(TFT_YELLOW, TFT_BLACK); tft.setTextColor(TFT_YELLOW, TFT_BLACK);
@@ -2903,7 +2936,7 @@ void ShowSignalLevel() {
SStatusold = SStatus; SStatusold = SStatus;
tft.setTextColor(TFT_WHITE); tft.setTextColor(TFT_WHITE);
tft.setFreeFont(FONT7); tft.setFreeFont(FONT8);
tft.drawString("dBμV", 282, 144, GFXFF); tft.drawString("dBμV", 282, 144, GFXFF);
if (wifi) { if (wifi) {
Udp.beginPacket(remoteip, 9030); Udp.beginPacket(remoteip, 9030);
@@ -3094,7 +3127,7 @@ void ShowModLevel() {
} }
void doSquelch() { void doSquelch() {
tft.setFreeFont(FONT7); tft.setFreeFont(FONT8);
if (XDRGTKUSB == false && XDRGTKTCP == false) { if (XDRGTKUSB == false && XDRGTKTCP == false) {
Squelch = analogRead(PIN_POT) / 4 - 100; Squelch = analogRead(PIN_POT) / 4 - 100;
if (Squelch > 920) Squelch = 920; if (Squelch > 920) Squelch = 920;
@@ -3173,7 +3206,7 @@ void updateBW() {
if (millis() >= bwupdatetimer + TIMER_BW_TIMER) { if (millis() >= bwupdatetimer + TIMER_BW_TIMER) {
bwupdatetimer = millis(); bwupdatetimer = millis();
tft.setFreeFont(FONT7); tft.setFreeFont(FONT8);
if (BWset == 0) { if (BWset == 0) {
if (screenmute == false) { if (screenmute == false) {
tft.drawRoundRect(249, 35, 68, 20, 5, TFT_WHITE); tft.drawRoundRect(249, 35, 68, 20, 5, TFT_WHITE);
@@ -3191,7 +3224,7 @@ void updateBW() {
} }
void updateiMS() { void updateiMS() {
tft.setFreeFont(FONT7); tft.setFreeFont(FONT8);
if (band == BAND_FM) { if (band == BAND_FM) {
if (iMSset == 0) { if (iMSset == 0) {
if (screenmute == false) { if (screenmute == false) {
@@ -3213,7 +3246,7 @@ void updateiMS() {
} }
void updateEQ() { void updateEQ() {
tft.setFreeFont(FONT7); tft.setFreeFont(FONT8);
if (band == BAND_FM) { if (band == BAND_FM) {
if (EQset == 0) { if (EQset == 0) {
if (screenmute == false) { if (screenmute == false) {
@@ -3392,7 +3425,7 @@ void doTuneMode() {
} }
void ShowTuneMode() { void ShowTuneMode() {
tft.setFreeFont(FONT7); tft.setFreeFont(FONT8);
switch (tunemode) { switch (tunemode) {
case TUNE_MAN: case TUNE_MAN:
if (band == BAND_SW) { if (band == BAND_SW) {
@@ -3490,13 +3523,23 @@ void ShowRSSI() {
} }
void ShowBattery() { void ShowBattery() {
battery = map(constrain(analogRead(BATTERY_PIN), BAT_LEVEL_EMPTY, BAT_LEVEL_FULL), BAT_LEVEL_EMPTY, BAT_LEVEL_FULL, 0, BAT_LEVEL_STAGE); if (analogRead(BATTERY_PIN) < 200) {
if (batteryold != battery) { if (batteryold != battery) {
tft.drawRect(300, 8, 12, 20, TFT_WHITE); tft.drawRect(300, 8, 12, 20, TFT_GREYOUT);
tft.fillRect(303, 4, 6, 4, TFT_WHITE); tft.fillRect(303, 4, 6, 4, TFT_GREYOUT);
tft.fillRect(302, 10, 8, 16, TFT_BLACK); tft.fillRect(302, 10, 8, 16, TFT_BLACK);
tft.fillRect(302, 26 - (battery * 4), 8, battery * 4, TFT_GREEN); battery = 0;
batteryold = battery; batteryold = battery;
}
} else {
battery = map(constrain(analogRead(BATTERY_PIN), BAT_LEVEL_EMPTY, BAT_LEVEL_FULL), BAT_LEVEL_EMPTY, BAT_LEVEL_FULL, 0, BAT_LEVEL_STAGE);
if (batteryold != battery) {
tft.drawRect(300, 8, 12, 20, TFT_WHITE);
tft.fillRect(303, 4, 6, 4, TFT_WHITE);
tft.fillRect(302, 10, 8, 16, TFT_BLACK);
tft.fillRect(302, 26 - (battery * 4), 8, battery * 4, TFT_GREEN);
batteryold = battery;
}
} }
} }
@@ -3639,7 +3682,7 @@ void Communication() {
if (menu == true) ModeButtonPress(); if (menu == true) ModeButtonPress();
if (Squelch != Squelchold) { if (Squelch != Squelchold) {
if (screenmute == false) { if (screenmute == false) {
tft.setFreeFont(FONT7); tft.setFreeFont(FONT8);
tft.setTextColor(TFT_BLACK); tft.setTextColor(TFT_BLACK);
if (Squelchold == -100) tft.drawCentreString(myLanguage[language][33], 224, 167, GFXFF); else if (Squelchold > 920) tft.drawCentreString("ST", 224, 167, GFXFF); else tft.drawCentreString(String(Squelchold / 10), 224, 167, GFXFF); if (Squelchold == -100) tft.drawCentreString(myLanguage[language][33], 224, 167, GFXFF); else if (Squelchold > 920) tft.drawCentreString("ST", 224, 167, GFXFF); else tft.drawCentreString(String(Squelchold / 10), 224, 167, GFXFF);
} }
+16 -12
View File
@@ -245,32 +245,33 @@ void TEF6686::readRDS(bool showrdserrors)
if (((rds.rdsErr >> 12) & 0x02) > 1) rds.rdsBerror = true; else rds.rdsBerror = false; // Any errors in Block B? if (((rds.rdsErr >> 12) & 0x02) > 1) rds.rdsBerror = true; else rds.rdsBerror = false; // Any errors in Block B?
if (((rds.rdsErr >> 10) & 0x02) > 1) rds.rdsCerror = true; else rds.rdsCerror = false; // Any errors in Block C? if (((rds.rdsErr >> 10) & 0x02) > 1) rds.rdsCerror = true; else rds.rdsCerror = false; // Any errors in Block C?
if (((rds.rdsErr >> 8) & 0x02) > 1) rds.rdsDerror = true; else rds.rdsDerror = false; // Any errors in Block D? if (((rds.rdsErr >> 8) & 0x02) > 1) rds.rdsDerror = true; else rds.rdsDerror = false; // Any errors in Block D?
if (!rds.rdsAerror && !rds.rdsBerror && !rds.rdsCerror && !rds.rdsDerror) rds.correct = true; // Any errors in all blocks? if (!rds.rdsAerror && !rds.rdsBerror && !rds.rdsCerror && !rds.rdsDerror) rds.correct = true; // Any errors in all blocks?
if ((rdsStat & (1 << 9))) rds.hasRDS = true; // RDS decoder synchronized and data available if ((rdsStat & (1 << 9))) rds.hasRDS = true; // RDS decoder synchronized and data available
if ((rdsStat & (1 << 15))) rdsReady = true; if ((rdsStat & (1 << 15))) rdsReady = true;
if (rdsReady) { // We have all data to decode... let's go... if (rdsReady) { // We have all data to decode... let's go...
//PI decoder //PI decoder
if (rds.region == 0 && !correctpi) { if (rds.region == 0 && (!correctpi || rds.dynamicpi)) {
rds.picode[0] = (rds.rdsA >> 12) & 0xF; rds.picode[0] = (rds.rdsA >> 12) & 0xF;
rds.picode[1] = (rds.rdsA >> 8) & 0xF; rds.picode[1] = (rds.rdsA >> 8) & 0xF;
rds.picode[2] = (rds.rdsA >> 4) & 0xF; rds.picode[2] = (rds.rdsA >> 4) & 0xF;
rds.picode[3] = rds.rdsA & 0xF; rds.picode[3] = rds.rdsA & 0xF;
for (int i = 0; i < 4; i++) { for (int i = 0; i < 4; i++) {
if (rds.picode[i] < 10) { if (rds.picode[i] < 10) {
rds.picode[i] += '0'; // Add ASCII offset for decimal digits rds.picode[i] += '0'; // Add ASCII offset for decimal digits
} else { } else {
rds.picode[i] += 'A' - 10; // Add ASCII offset for hexadecimal letters A-F rds.picode[i] += 'A' - 10; // Add ASCII offset for hexadecimal letters A-F
} }
} }
if (!rds.correct) rds.picode[4] = '?'; else rds.picode[4] = ' '; // Not sure, add a ?
if (!rds.correct) rds.picode[4] = '?'; else rds.picode[4] = ' '; // Not sure, add a ?
rds.picode[5] = '\0'; rds.picode[5] = '\0';
correctpi = rds.correct; correctpi = rds.correct;
} }
// USA Station callsign decoder // USA Station callsign decoder
if (rds.region == 1) { // When ID was decoded correctly before, no need to decode again. if (rds.region == 1) { // When ID was decoded correctly before, no need to decode again.
uint16_t stationID = rds.rdsA; uint16_t stationID = rds.rdsA;
if (stationID > 4096) { if (stationID > 4096) {
if (stationID > 21671 && (stationID & 0xF00U) >> 8 == 0) stationID = ((uint16_t)uint8_t(0xA0 + ((stationID & 0xF000U) >> 12)) << 8) + lowByte(stationID); // C0DE -> ACDE if (stationID > 21671 && (stationID & 0xF00U) >> 8 == 0) stationID = ((uint16_t)uint8_t(0xA0 + ((stationID & 0xF000U) >> 12)) << 8) + lowByte(stationID); // C0DE -> ACDE
@@ -313,12 +314,12 @@ void TEF6686::readRDS(bool showrdserrors)
ps_buffer[(offset * 2) + 1] = rds.rdsD & 0xFF; // Second character of segment ps_buffer[(offset * 2) + 1] = rds.rdsD & 0xFF; // Second character of segment
ps_buffer[(offset * 2) + 2] = '\0'; // Endmarker of segment ps_buffer[(offset * 2) + 2] = '\0'; // Endmarker of segment
wchar_t PStext[9] = L""; // Create 16 bit char buffer for Extended ASCII
if (!ps_process) { // After new tune just fill the characters received if (!ps_process) { // After new tune just fill the characters received
RDScharConverter(ps_buffer, PStext, sizeof(PStext) / sizeof(wchar_t)); // Convert 8 bit ASCII to 16 bit ASCII RDScharConverter(ps_buffer, PStext, sizeof(PStext) / sizeof(wchar_t)); // Convert 8 bit ASCII to 16 bit ASCII
rds.stationName = convertToUTF8(PStext); // Convert RDS characterset to ASCII rds.stationName = convertToUTF8(PStext); // Convert RDS characterset to ASCII
} }
if (strlen(ps_buffer) == 8) { // Becomes active after a full PS has been decoded if (strlen(ps_buffer) == 8) { // Becomes active after a full 8 character PS has been decoded
for (byte i = 0; i < 9; i++) PStext[i] = L'\0'; // First erase buffer
RDScharConverter(ps_buffer, PStext, sizeof(PStext) / sizeof(wchar_t)); // Convert 8 bit ASCII to 16 bit ASCII RDScharConverter(ps_buffer, PStext, sizeof(PStext) / sizeof(wchar_t)); // Convert 8 bit ASCII to 16 bit ASCII
rds.stationName = convertToUTF8(PStext); // Convert RDS characterset to ASCII rds.stationName = convertToUTF8(PStext); // Convert RDS characterset to ASCII
ps_process = true; ps_process = true;
@@ -394,7 +395,7 @@ void TEF6686::readRDS(bool 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)); // Convert 8 bit ASCII to 16 bit ASCII RDScharConverter(rt_buffer, RTtext, sizeof(RTtext) / sizeof(wchar_t)); // 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 += " "; // Add extra spaces rds.stationText += " "; // Add extra space
} }
} break; } break;
@@ -453,7 +454,10 @@ void TEF6686::clearRDS (bool fullsearchrds)
uint8_t i; uint8_t i;
rds.stationName = ""; rds.stationName = "";
rds.stationText = ""; rds.stationText = "";
for (i = 0; i < 9; i++) ps_buffer[i] = 0; for (i = 0; i < 9; i++) {
ps_buffer[i] = 0;
PStext[i] = L'\0';
}
for (i = 0; i < 65; i++) rt_buffer[i] = 0; for (i = 0; i < 65; i++) rt_buffer[i] = 0;
for (i = 0; i < 17; i++) rds.stationType[i] = 0; for (i = 0; i < 17; i++) rds.stationType[i] = 0;
for (i = 0; i < 6; i++) rds.picode[i] = 0; for (i = 0; i < 6; i++) rds.picode[i] = 0;
+2
View File
@@ -196,6 +196,7 @@ typedef struct _rds_ {
bool filter; bool filter;
bool underscore; bool underscore;
bool rdsreset; bool rdsreset;
bool dynamicpi;
} rds_; } rds_;
typedef struct _af_ { typedef struct _af_ {
@@ -267,4 +268,5 @@ class TEF6686 {
uint16_t rdsDprevious; uint16_t rdsDprevious;
bool correctpi; bool correctpi;
bool rtABold; bool rtABold;
wchar_t PStext[9] = L"";
}; };
+2112
View File
File diff suppressed because it is too large Load Diff
+19 -10
View File
@@ -1,6 +1,6 @@
// [number of languages][number of texts][max. length of text] // [number of languages][number of texts][max. length of text]
static const char myLanguage[9][61][78] = { static const char myLanguage[9][62][78] = {
{ "English", // English { "English", // English
"Rotary direction changed", "Rotary direction changed",
"Please release button", "Please release button",
@@ -61,7 +61,8 @@ static const char myLanguage[9][61][78] = {
"CONNECTED!", "CONNECTED!",
"Stationlist client IP", "Stationlist client IP",
"Show SW wavelength", "Show SW wavelength",
"RDS filter" "RDS filter",
"Dynamic PI"
}, },
{ "Nederlands", // Dutch { "Nederlands", // Dutch
@@ -124,7 +125,8 @@ static const char myLanguage[9][61][78] = {
"VERBONDEN!", "VERBONDEN!",
"Stationlist client IP", "Stationlist client IP",
"Toon SW golflengte", "Toon SW golflengte",
"RDS filter" "RDS filter",
"Dynamische PI"
}, },
{ "Polski", // Polish { "Polski", // Polish
@@ -187,7 +189,8 @@ static const char myLanguage[9][61][78] = {
"POLACZONO!", "POLACZONO!",
"IP klienta Stationlist", "IP klienta Stationlist",
"Pokaz dlugosci fal SW", "Pokaz dlugosci fal SW",
"RDS filter" "RDS filter",
"Dynamic PI"
}, },
{ "Hrvatski", // Croatian { "Hrvatski", // Croatian
@@ -250,7 +253,8 @@ static const char myLanguage[9][61][78] = {
"SPOJENO!", "SPOJENO!",
"IP klijenta StationList", "IP klijenta StationList",
"Prikaži valnu duljinu KV-a", "Prikaži valnu duljinu KV-a",
"RDS filter" "RDS filter",
"Dynamic PI"
}, },
{ "Ελληνικά", // Greek { "Ελληνικά", // Greek
@@ -313,7 +317,8 @@ static const char myLanguage[9][61][78] = {
"ΣΕ ΣΥΝΔΕΣΗ!", "ΣΕ ΣΥΝΔΕΣΗ!",
"Stationlist client IP", "Stationlist client IP",
"Show SW wavelength", "Show SW wavelength",
"RDS filter" "RDS filter",
"Dynamic PI"
}, },
{ "Romana", // Romanian { "Romana", // Romanian
@@ -376,7 +381,8 @@ static const char myLanguage[9][61][78] = {
"CONNECTED!", "CONNECTED!",
"Stationlist client IP", "Stationlist client IP",
"Show SW wavelength", "Show SW wavelength",
"RDS filter" "RDS filter",
"Dynamic PI"
}, },
{ "Deutsch", // German { "Deutsch", // German
@@ -439,7 +445,8 @@ static const char myLanguage[9][61][78] = {
"VERBUNDEN!", "VERBUNDEN!",
"Stationlist client IP", "Stationlist client IP",
"Show SW wavelength", "Show SW wavelength",
"RDS filter" "RDS filter",
"Dynamic PI"
}, },
{ "Czech", // Czech { "Czech", // Czech
"Směr enkóderu byl změněn", "Směr enkóderu byl změněn",
@@ -501,7 +508,8 @@ static const char myLanguage[9][61][78] = {
"CONNECTED!", "CONNECTED!",
"Stationlist client IP", "Stationlist client IP",
"Show SW wavelength", "Show SW wavelength",
"RDS filter" "RDS filter",
"Dynamic PI"
}, },
{ "Slovak", // Slovak { "Slovak", // Slovak
"Smer enkóderu bol zmenený", "Smer enkóderu bol zmenený",
@@ -563,6 +571,7 @@ static const char myLanguage[9][61][78] = {
"CONNECTED!", "CONNECTED!",
"Stationlist client IP", "Stationlist client IP",
"Show SW wavelength", "Show SW wavelength",
"RDS filter" "RDS filter",
"Dynamic PI"
}, },
}; };