Added TA/TP/EON/MS indicator

Added RDS text fontset. But seems not to work ok.

Smaal bugfixes.
This commit is contained in:
Sjef Verhoeven PE5PVB
2023-06-11 20:04:02 +02:00
parent 5b13d408b4
commit 62e9b7a275
4 changed files with 6667 additions and 127 deletions
+282 -95
View File
@@ -2,6 +2,7 @@
#include <Wire.h> #include <Wire.h>
#include <TFT_eSPI.h> // https://github.com/Bodmer/TFT_eSPI #include <TFT_eSPI.h> // https://github.com/Bodmer/TFT_eSPI
#include <TimeLib.h> // https://github.com/PaulStoffregen/Time #include <TimeLib.h> // https://github.com/PaulStoffregen/Time
#include <FS.h>
#include "src/font.h" #include "src/font.h"
#include "src/TEF6686.h" #include "src/TEF6686.h"
#include "src/constants.h" #include "src/constants.h"
@@ -11,6 +12,12 @@
#define FONT24 &Aura2CondensedPro_Regular24pt7b #define FONT24 &Aura2CondensedPro_Regular24pt7b
#define FONT14 &Aura2CondensedPro_Regular14pt8b #define FONT14 &Aura2CondensedPro_Regular14pt8b
#define FONT7 &Aura2CondensedPro_Light7pt8b #define FONT7 &Aura2CondensedPro_Light7pt8b
#define FONTRDS7 &Aura2RDS_Regular7pt8b
#define FONTRDS14 &Aura2RDS_Regular14pt8b
#define FONTDEC &Digital7num36pt7b
#define GUI2_FONT8 &Aura2Regular8pt8b
#define GUI2_FONT12 &Aura2Regular12pt8b
#define TFT_GREYOUT 0x38E7 #define TFT_GREYOUT 0x38E7
#define ROTARY_PIN_A 34 #define ROTARY_PIN_A 34
@@ -40,6 +47,7 @@ bool change2;
bool cleanup; bool cleanup;
bool direction; bool direction;
bool dropout; bool dropout;
bool EONold;
bool fullsearchrds; bool fullsearchrds;
bool showrdserrors; bool showrdserrors;
bool LowLevelInit; bool LowLevelInit;
@@ -57,6 +65,8 @@ bool SQ;
bool Stereostatusold; bool Stereostatusold;
bool StereoToggle = true; bool StereoToggle = true;
bool store; bool store;
bool TPold;
bool TAold;
bool tuned; bool tuned;
bool underscore; bool underscore;
bool USBstatus; bool USBstatus;
@@ -64,11 +74,13 @@ bool XDRMute;
byte region; byte region;
byte regionold; byte regionold;
byte language; byte language;
byte theme;
byte tunemode; byte tunemode;
byte memorypos; byte memorypos;
byte memoryposold; byte memoryposold;
byte menupage = 1; byte menupage = 1;
byte menupagestotal = 2; byte menupagestotal = 2;
byte MSold;
byte band; byte band;
byte BWset; byte BWset;
byte ContrastSet; byte ContrastSet;
@@ -539,6 +551,10 @@ void GetData() {
showPTY(); showPTY();
showCT(); showCT();
showPS(); showPS();
showTP();
showTA();
showMS();
showEON();
showRadioText(); showRadioText();
showPS(); showPS();
ShowStereoStatus(); ShowStereoStatus();
@@ -891,7 +907,7 @@ void ButtonPress() {
tft.setTextColor(TFT_WHITE); tft.setTextColor(TFT_WHITE);
tft.drawCentreString(myLanguage[language][14], 155, 70, GFXFF); tft.drawCentreString(myLanguage[language][14], 155, 70, GFXFF);
tft.drawString("dB", 170, 110, GFXFF); tft.drawString("dB", 170, 110, GFXFF);
tft.drawString("dBuV", 190, 157, GFXFF); tft.drawString("dBμV", 190, 157, GFXFF);
tft.setTextColor(TFT_YELLOW); tft.setTextColor(TFT_YELLOW);
if (LevelOffset > 0) tft.drawRightString("+" + String(LevelOffset, DEC), 155, 110, GFXFF); else tft.drawRightString(String(LevelOffset, DEC), 155, 110, GFXFF); if (LevelOffset > 0) tft.drawRightString("+" + String(LevelOffset, DEC), 155, 110, GFXFF); else tft.drawRightString(String(LevelOffset, DEC), 155, 110, GFXFF);
SStatusold = 2000; SStatusold = 2000;
@@ -901,7 +917,7 @@ void ButtonPress() {
case 130: case 130:
tft.setTextColor(TFT_WHITE); tft.setTextColor(TFT_WHITE);
tft.drawCentreString(myLanguage[language][15], 155, 70, GFXFF); tft.drawCentreString(myLanguage[language][15], 155, 70, GFXFF);
if (StereoLevel != 0) tft.drawString("dBuV", 170, 110, GFXFF); if (StereoLevel != 0) tft.drawString("dBμV", 170, 110, GFXFF);
tft.setTextColor(TFT_YELLOW); tft.setTextColor(TFT_YELLOW);
if (StereoLevel != 0) tft.drawRightString(String(StereoLevel, DEC), 155, 110, GFXFF); else tft.drawRightString(myLanguage[language][30], 155, 110, GFXFF); if (StereoLevel != 0) tft.drawRightString(String(StereoLevel, DEC), 155, 110, GFXFF); else tft.drawRightString(myLanguage[language][30], 155, 110, GFXFF);
break; break;
@@ -917,7 +933,7 @@ void ButtonPress() {
case 170: case 170:
tft.setTextColor(TFT_WHITE); tft.setTextColor(TFT_WHITE);
tft.drawCentreString(myLanguage[language][17], 155, 70, GFXFF); tft.drawCentreString(myLanguage[language][17], 155, 70, GFXFF);
if (HighCutOffset != 0) tft.drawString("dBuV", 170, 110, GFXFF); if (HighCutOffset != 0) tft.drawString("dBμV", 170, 110, GFXFF);
tft.setTextColor(TFT_YELLOW); tft.setTextColor(TFT_YELLOW);
if (HighCutOffset != 0) tft.drawRightString(String(HighCutOffset, DEC), 155, 110, GFXFF); else tft.drawRightString(myLanguage[language][30], 155, 110, GFXFF); if (HighCutOffset != 0) tft.drawRightString(String(HighCutOffset, DEC), 155, 110, GFXFF); else tft.drawRightString(myLanguage[language][30], 155, 110, GFXFF);
break; break;
@@ -925,7 +941,7 @@ void ButtonPress() {
case 190: case 190:
tft.setTextColor(TFT_WHITE); tft.setTextColor(TFT_WHITE);
tft.drawCentreString(myLanguage[language][18], 155, 70, GFXFF); tft.drawCentreString(myLanguage[language][18], 155, 70, GFXFF);
tft.drawString("dBuV", 155, 110, GFXFF); tft.drawString("dBμV", 155, 110, GFXFF);
tft.setTextColor(TFT_YELLOW); tft.setTextColor(TFT_YELLOW);
tft.drawRightString(String(LowLevelSet, DEC), 145, 110, GFXFF); tft.drawRightString(String(LowLevelSet, DEC), 145, 110, GFXFF);
break; break;
@@ -1104,9 +1120,9 @@ void KeyUp() {
StereoLevel ++; StereoLevel ++;
if (StereoLevel > 60 || StereoLevel <= 30) if (StereoLevel == 1) StereoLevel = 30; else StereoLevel = 0; if (StereoLevel > 60 || StereoLevel <= 30) if (StereoLevel == 1) StereoLevel = 30; else StereoLevel = 0;
tft.drawRightString(myLanguage[language][30], 155, 110, GFXFF); tft.drawRightString(myLanguage[language][30], 155, 110, GFXFF);
tft.drawString("dBuV", 170, 110, GFXFF); tft.drawString("dBμV", 170, 110, GFXFF);
tft.setTextColor(TFT_WHITE); tft.setTextColor(TFT_WHITE);
if (StereoLevel != 0) tft.drawString("dBuV", 170, 110, GFXFF); if (StereoLevel != 0) tft.drawString("dBμV", 170, 110, GFXFF);
tft.setTextColor(TFT_YELLOW); tft.setTextColor(TFT_YELLOW);
if (StereoLevel != 0) tft.drawRightString(String(StereoLevel, DEC), 155, 110, GFXFF); else tft.drawRightString(myLanguage[language][30], 155, 110, GFXFF); if (StereoLevel != 0) tft.drawRightString(String(StereoLevel, DEC), 155, 110, GFXFF); else tft.drawRightString(myLanguage[language][30], 155, 110, GFXFF);
radio.setStereoLevel(StereoLevel); radio.setStereoLevel(StereoLevel);
@@ -1129,9 +1145,9 @@ void KeyUp() {
if (HighCutOffset > 60 || HighCutOffset <= 20) if (HighCutOffset == 1) HighCutOffset = 20; else HighCutOffset = 0; if (HighCutOffset > 60 || HighCutOffset <= 20) if (HighCutOffset == 1) HighCutOffset = 20; else HighCutOffset = 0;
tft.setTextColor(TFT_BLACK); tft.setTextColor(TFT_BLACK);
tft.drawRightString(myLanguage[language][30], 155, 110, GFXFF); tft.drawRightString(myLanguage[language][30], 155, 110, GFXFF);
tft.drawString("dBuV", 170, 110, GFXFF); tft.drawString("dBμV", 170, 110, GFXFF);
tft.setTextColor(TFT_WHITE); tft.setTextColor(TFT_WHITE);
if (HighCutOffset != 0) tft.drawString("dBuV", 170, 110, GFXFF); if (HighCutOffset != 0) tft.drawString("dBμV", 170, 110, GFXFF);
tft.setTextColor(TFT_YELLOW); tft.setTextColor(TFT_YELLOW);
if (HighCutOffset != 0) tft.drawRightString(String(HighCutOffset, DEC), 155, 110, GFXFF); else tft.drawRightString(myLanguage[language][30], 155, 110, GFXFF); if (HighCutOffset != 0) tft.drawRightString(String(HighCutOffset, DEC), 155, 110, GFXFF); else tft.drawRightString(myLanguage[language][30], 155, 110, GFXFF);
radio.setHighCutOffset(HighCutOffset); radio.setHighCutOffset(HighCutOffset);
@@ -1332,9 +1348,9 @@ void KeyDown() {
StereoLevel --; StereoLevel --;
if (StereoLevel < 30 || StereoLevel > 60) if (StereoLevel > 60) StereoLevel = 60; else StereoLevel = 0; if (StereoLevel < 30 || StereoLevel > 60) if (StereoLevel > 60) StereoLevel = 60; else StereoLevel = 0;
tft.drawRightString(myLanguage[language][30], 155, 110, GFXFF); tft.drawRightString(myLanguage[language][30], 155, 110, GFXFF);
tft.drawString("dBuV", 170, 110, GFXFF); tft.drawString("dBμV", 170, 110, GFXFF);
tft.setTextColor(TFT_WHITE); tft.setTextColor(TFT_WHITE);
if (StereoLevel != 0) tft.drawString("dBuV", 170, 110, GFXFF); if (StereoLevel != 0) tft.drawString("dBμV", 170, 110, GFXFF);
tft.setTextColor(TFT_YELLOW); tft.setTextColor(TFT_YELLOW);
if (StereoLevel != 0) tft.drawRightString(String(StereoLevel, DEC), 155, 110, GFXFF); else tft.drawRightString(myLanguage[language][30], 155, 110, GFXFF); if (StereoLevel != 0) tft.drawRightString(String(StereoLevel, DEC), 155, 110, GFXFF); else tft.drawRightString(myLanguage[language][30], 155, 110, GFXFF);
radio.setStereoLevel(StereoLevel); radio.setStereoLevel(StereoLevel);
@@ -1357,9 +1373,9 @@ void KeyDown() {
if (HighCutOffset < 20 || HighCutOffset > 60) if (HighCutOffset > 60) HighCutOffset = 60; else HighCutOffset = 0; if (HighCutOffset < 20 || HighCutOffset > 60) if (HighCutOffset > 60) HighCutOffset = 60; else HighCutOffset = 0;
tft.setTextColor(TFT_BLACK); tft.setTextColor(TFT_BLACK);
tft.drawRightString(myLanguage[language][30], 155, 110, GFXFF); tft.drawRightString(myLanguage[language][30], 155, 110, GFXFF);
tft.drawString("dBuV", 170, 110, GFXFF); tft.drawString("dBμV", 170, 110, GFXFF);
tft.setTextColor(TFT_WHITE); tft.setTextColor(TFT_WHITE);
if (HighCutOffset != 0) tft.drawString("dBuV", 170, 110, GFXFF); if (HighCutOffset != 0) tft.drawString("dBμV", 170, 110, GFXFF);
tft.setTextColor(TFT_YELLOW); tft.setTextColor(TFT_YELLOW);
if (HighCutOffset != 0) tft.drawRightString(String(HighCutOffset, DEC), 155, 110, GFXFF); else tft.drawRightString(myLanguage[language][30], 155, 110, GFXFF); if (HighCutOffset != 0) tft.drawRightString(String(HighCutOffset, DEC), 155, 110, GFXFF); else tft.drawRightString(myLanguage[language][30], 155, 110, GFXFF);
radio.setHighCutOffset(HighCutOffset); radio.setHighCutOffset(HighCutOffset);
@@ -1492,19 +1508,22 @@ void readRds() {
if (RDSstatus == 0) { if (RDSstatus == 0) {
tft.setTextColor(TFT_SKYBLUE); tft.setTextColor(TFT_SKYBLUE);
tft.setFreeFont(FONT14); tft.setFreeFont(FONT14);
tft.drawString(PIold, 244, 182, GFXFF); tft.drawString(PIold, 244, 183, GFXFF);
tft.drawString(PSold, 38, 182, GFXFF); tft.setFreeFont(FONTRDS14);
tft.drawString(PSold, 38, 183, GFXFF);
tft.setFreeFont(FONT7); tft.setFreeFont(FONT7);
tft.drawString(PTYold, 38, 164, GFXFF); tft.drawString(PTYold, 38, 164, GFXFF);
tft.setTextColor(TFT_BLACK); tft.setTextColor(TFT_BLACK);
tft.setFreeFont(FONTRDS7);
tft.drawString(RTold, 1, 223, GFXFF); tft.drawString(RTold, 1, 223, GFXFF);
dropout = true; dropout = true;
} else { } else {
if (dropout == true && PIold.length() != 0) { if (dropout == true && PIold.length() != 0) {
tft.setTextColor(TFT_YELLOW); tft.setTextColor(TFT_YELLOW);
tft.setFreeFont(FONT14); tft.setFreeFont(FONT14);
tft.drawString(PIold, 244, 182, GFXFF); tft.drawString(PIold, 244, 183, GFXFF);
tft.drawString(PSold, 38, 182, GFXFF); tft.setFreeFont(FONTRDS14);
tft.drawString(PSold, 38, 183, GFXFF);
tft.setFreeFont(FONT7); tft.setFreeFont(FONT7);
tft.drawString(PTYold, 38, 164, GFXFF); tft.drawString(PTYold, 38, 164, GFXFF);
dropout = false; dropout = false;
@@ -1540,9 +1559,9 @@ void showPI() {
if (strcmp(radio.rds.picode, radioIdPrevious)) { if (strcmp(radio.rds.picode, radioIdPrevious)) {
tft.setFreeFont(FONT14); tft.setFreeFont(FONT14);
tft.setTextColor(TFT_BLACK); tft.setTextColor(TFT_BLACK);
tft.drawString(PIold, 244, 182, GFXFF); tft.drawString(PIold, 244, 183, GFXFF);
tft.setTextColor(TFT_YELLOW); tft.setTextColor(TFT_YELLOW);
tft.drawString(radio.rds.picode, 244, 182, GFXFF); tft.drawString(radio.rds.picode, 244, 183, GFXFF);
PIold = radio.rds.picode; PIold = radio.rds.picode;
strcpy(radioIdPrevious, radio.rds.picode); strcpy(radioIdPrevious, radio.rds.picode);
} }
@@ -1562,18 +1581,18 @@ void showPTY() {
void showPS() { void showPS() {
if (strcmp(radio.rds.stationName, programServicePrevious)) { if (strcmp(radio.rds.stationName, programServicePrevious)) {
tft.setFreeFont(FONT14); tft.setFreeFont(FONTRDS14);
tft.setTextColor(TFT_BLACK); tft.setTextColor(TFT_BLACK);
tft.drawString(PSold, 38, 182, GFXFF); tft.drawString(PSold, 38, 183, GFXFF);
tft.setTextColor(TFT_YELLOW); tft.setTextColor(TFT_YELLOW);
if (underscore) { if (underscore) {
char PS_[9]; char PS_[9];
strcpy (PS_, radio.rds.stationName); strcpy (PS_, radio.rds.stationName);
for (int i = 0; i < 8; i++) if (PS_[i] == 0x20) PS_[i] = '_'; for (int i = 0; i < 8; i++) if (PS_[i] == 0x20) PS_[i] = '_';
tft.drawString(PS_, 38, 182, GFXFF); tft.drawString(PS_, 38, 183, GFXFF);
PSold = PS_; PSold = PS_;
} else { } else {
tft.drawString(radio.rds.stationName, 38, 182, GFXFF); tft.drawString(radio.rds.stationName, 38, 183, GFXFF);
PSold = radio.rds.stationName; PSold = radio.rds.stationName;
} }
strcpy(programServicePrevious, radio.rds.stationName); strcpy(programServicePrevious, radio.rds.stationName);
@@ -1584,8 +1603,8 @@ void showRadioText() {
if (RDSstatus == 1) { if (RDSstatus == 1) {
if (millis() - rtticker >= 350) { if (millis() - rtticker >= 350) {
xPos -= charWidth; xPos -= charWidth;
if (xPos < -tft.textWidth(radio.rds.stationText) + (charWidth * 42)) xPos = 6; if (xPos < -tft.textWidth(radio.rds.stationText) + (charWidth * 24)) xPos = 6;
sprite.setFreeFont(FONT7); sprite.setFreeFont(FONTRDS7);
sprite.setTextDatum(ML_DATUM); sprite.setTextDatum(ML_DATUM);
sprite.fillSprite(TFT_BLACK); sprite.fillSprite(TFT_BLACK);
sprite.setTextColor(TFT_YELLOW); sprite.setTextColor(TFT_YELLOW);
@@ -1603,6 +1622,61 @@ void showRadioText() {
} }
} }
void showTP() {
if (TPold != radio.rds.hasTP) {
tft.setFreeFont(FONT7);
if (radio.rds.hasTP == true) tft.setTextColor(TFT_SKYBLUE); else tft.setTextColor(TFT_GREYOUT);
tft.drawRightString("TP", 205, 184, GFXFF);
TPold = radio.rds.hasTP;
}
}
void showTA() {
if (TAold != radio.rds.hasTA) {
tft.setFreeFont(FONT7);
if (radio.rds.hasTA == true) tft.setTextColor(TFT_SKYBLUE); else tft.setTextColor(TFT_GREYOUT);
tft.drawRightString("TA", 205, 198, GFXFF);
TAold = radio.rds.hasTA;
}
}
void showEON() {
if (EONold != radio.rds.hasEON) {
tft.setFreeFont(FONT7);
if (radio.rds.hasEON == true) tft.setTextColor(TFT_SKYBLUE); else tft.setTextColor(TFT_GREYOUT);
tft.drawRightString("EON", 185, 198, GFXFF);
EONold = radio.rds.hasEON;
}
}
void showMS() {
if (MSold != radio.rds.MS) {
tft.setFreeFont(FONT7);
switch (radio.rds.MS) {
case 0:
tft.setTextColor(TFT_GREYOUT);
tft.drawRightString("M", 185, 184, GFXFF);
tft.drawString("S", 162, 184, GFXFF);
break;
case 1:
tft.setTextColor(TFT_SKYBLUE);
tft.drawRightString("M", 185, 184, GFXFF);
tft.setTextColor(TFT_GREYOUT);
tft.drawString("S", 162, 184, GFXFF);
break;
case 2:
tft.setTextColor(TFT_GREYOUT);
tft.drawRightString("M", 185, 184, GFXFF);
tft.setTextColor(TFT_SKYBLUE);
tft.drawString("S", 162, 184, GFXFF);
break;
}
MSold = radio.rds.MS;
}
}
void showCT() { void showCT() {
if (radio.rds.hasCT == true) { if (radio.rds.hasCT == true) {
int timeoffset; int timeoffset;
@@ -1642,10 +1716,10 @@ void BuildMenu() {
tft.drawRightString("MHz", 305, 70, GFXFF); tft.drawRightString("MHz", 305, 70, GFXFF);
tft.drawRightString("MHz", 305, 90, GFXFF); tft.drawRightString("MHz", 305, 90, GFXFF);
tft.drawRightString("dB", 305, 110, GFXFF); tft.drawRightString("dB", 305, 110, GFXFF);
if (StereoLevel != 0) tft.drawRightString("dBuV", 305, 130, GFXFF); if (StereoLevel != 0) tft.drawRightString("dBμV", 305, 130, GFXFF);
if (HighCutLevel != 0) tft.drawRightString("Hz", 305, 150, GFXFF); if (HighCutLevel != 0) tft.drawRightString("Hz", 305, 150, GFXFF);
if (HighCutOffset != 0) tft.drawRightString("dBuV", 305, 170, GFXFF); if (HighCutOffset != 0) tft.drawRightString("dBμV", 305, 170, GFXFF);
tft.drawRightString("dBuV", 305, 190, GFXFF); tft.drawRightString("dBμV", 305, 190, GFXFF);
tft.drawRightString("%", 305, 210, GFXFF); tft.drawRightString("%", 305, 210, GFXFF);
tft.drawString(myLanguage[language][20], 14, 30, GFXFF); tft.drawString(myLanguage[language][20], 14, 30, GFXFF);
tft.drawString(myLanguage[language][21], 14, 50, GFXFF); tft.drawString(myLanguage[language][21], 14, 50, GFXFF);
@@ -1711,61 +1785,184 @@ void MuteScreen(int setting) {
} }
void BuildDisplay() { void BuildDisplay() {
tft.setFreeFont(FONT7); if (theme == 0) {
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, 30, 320, 30, TFT_BLUE); tft.drawLine(0, 30, 320, 30, TFT_BLUE);
tft.drawLine(0, 100, 320, 100, TFT_BLUE); tft.drawLine(0, 100, 320, 100, TFT_BLUE);
tft.drawLine(64, 30, 64, 0, TFT_BLUE); tft.drawLine(64, 30, 64, 0, TFT_BLUE);
tft.drawLine(210, 100, 210, 218, TFT_BLUE); tft.drawLine(210, 100, 210, 218, TFT_BLUE);
tft.drawLine(268, 30, 268, 0, TFT_BLUE); tft.drawLine(268, 30, 268, 0, TFT_BLUE);
tft.drawLine(0, 165, 210, 165, TFT_BLUE); tft.drawLine(0, 165, 210, 165, TFT_BLUE);
tft.drawLine(0, 187, 320, 187, TFT_BLUE); tft.drawLine(0, 187, 320, 187, TFT_BLUE);
tft.drawLine(0, 218, 320, 218, TFT_BLUE); tft.drawLine(0, 218, 320, 218, TFT_BLUE);
tft.drawLine(108, 30, 108, 0, TFT_BLUE); tft.drawLine(108, 30, 108, 0, TFT_BLUE);
tft.drawLine(174, 30, 174, 0, TFT_BLUE); tft.drawLine(174, 30, 174, 0, TFT_BLUE);
tft.drawLine(20, 120, 200, 120, TFT_DARKGREY); tft.drawLine(20, 120, 200, 120, TFT_DARKGREY);
tft.drawLine(20, 150, 200, 150, TFT_DARKGREY); tft.drawLine(20, 150, 200, 150, TFT_DARKGREY);
for (uint16_t segments = 0; segments < 94; segments++) { for (uint16_t segments = 0; segments < 94; segments++) {
if (segments > 54) { if (segments > 54) {
if (((segments - 53) % 10) == 0) if (((segments - 53) % 10) == 0)
tft.fillRect(16 + (2 * segments), 117, 2, 3, TFT_RED); tft.fillRect(16 + (2 * segments), 117, 2, 3, TFT_RED);
} else { } else {
if (((segments + 1) % 6) == 0) if (((segments + 1) % 6) == 0)
tft.fillRect(16 + (2 * segments), 117, 2, 3, TFT_GREEN); tft.fillRect(16 + (2 * segments), 117, 2, 3, TFT_GREEN);
}
} }
tft.setTextColor(TFT_WHITE);
tft.drawString("SQ:", 216, 152, GFXFF);
tft.drawString("S/N", 250, 167, GFXFF);
tft.drawString("dB", 300, 167, GFXFF);
tft.drawString("S", 6, 100, GFXFF);
tft.drawString("M", 6, 132, GFXFF);
if (region == 0) tft.drawString("PI:", 216, 191, GFXFF);
if (region == 1) tft.drawString("ID:", 216, 191, GFXFF);
tft.drawString("PS:", 6, 191, GFXFF);
tft.drawString("PTY:", 6, 164, GFXFF);
tft.drawString("%", 196, 146, GFXFF);
tft.drawString("1", 24, 116, GFXFF);
tft.drawString("3", 48, 116, GFXFF);
tft.drawString("5", 72, 116, GFXFF);
tft.drawString("7", 96, 116, GFXFF);
tft.drawString("9", 120, 116, GFXFF);
tft.drawString("+10", 134, 116, GFXFF);
tft.drawString("+30", 174, 116, GFXFF);
tft.drawString("20", 20, 146, GFXFF);
tft.drawString("40", 50, 146, GFXFF);
tft.drawString("60", 80, 146, GFXFF);
tft.drawString("80", 110, 146, GFXFF);
tft.drawString("100", 134, 146, GFXFF);
tft.drawString("120", 164, 146, GFXFF);
tft.setTextColor(TFT_WHITE);
tft.setFreeFont(FONT14);
tft.drawString("kHz", 225, -5, GFXFF);
tft.setTextColor(TFT_WHITE);
if (band == 0) tft.drawString("MHz", 258, 67, GFXFF); else tft.drawString("kHz", 258, 67, GFXFF);
tft.drawCircle(81, 15, 10, TFT_GREYOUT);
tft.drawCircle(81, 15, 9, TFT_GREYOUT);
tft.drawCircle(91, 15, 10, TFT_GREYOUT);
tft.drawCircle(91, 15, 9, TFT_GREYOUT);
tft.drawBitmap(110, 5, RDSLogo, 67, 22, TFT_GREYOUT);
if (StereoToggle == false) {
tft.drawCircle(86, 15, 10, TFT_SKYBLUE);
tft.drawCircle(86, 15, 9, TFT_SKYBLUE);
}
tft.setTextColor(TFT_SKYBLUE);
tft.setFreeFont(FONT7);
if (band == 1) tft.drawString("AM", 50, 26, GFXFF); else tft.drawString("FM", 50, 26, GFXFF);
tft.setTextColor(TFT_GREYOUT);
tft.drawString("S", 162, 184, GFXFF);
tft.drawRightString("M", 185, 184, GFXFF);
tft.drawRightString("EON", 185, 198, GFXFF);
tft.drawRightString("TA", 205, 198, GFXFF);
tft.drawRightString("TP", 205, 184, GFXFF);
} }
tft.setTextColor(TFT_WHITE);
tft.drawString("SQ:", 216, 152, GFXFF);
tft.drawString("S/N", 250, 167, GFXFF); // WORKING ON THIS!
tft.drawString("dB", 300, 167, GFXFF); if (theme == 1) {
tft.drawString("S", 6, 100, GFXFF); tft.setFreeFont(FONT7);
tft.drawString("M", 6, 132, GFXFF); tft.fillScreen(TFT_BLACK);
if (region == 0) tft.drawString("PI:", 216, 191, GFXFF); tft.fillRect(12, 105, 2, 50, TFT_RED);
if (region == 1) tft.drawString("ID:", 216, 191, GFXFF); tft.fillRect(305, 105, 2, 50, TFT_RED);
tft.drawString("PS:", 6, 191, GFXFF); tft.fillRect(0, 208, 50, 2, TFT_RED);
tft.drawString("PTY:", 6, 164, GFXFF); tft.fillRect(270, 208, 50, 2, TFT_RED);
tft.drawString("%", 196, 146, GFXFF); tft.fillRect(12, 18, 293, 2, TFT_RED);
tft.drawString("1", 24, 116, GFXFF); tft.fillRect(30, 220, 98, 6, TFT_RED);
tft.drawString("3", 48, 116, GFXFF); tft.fillRect(204, 220, 98, 6, TFT_RED);
tft.drawString("5", 72, 116, GFXFF);
tft.drawString("7", 96, 116, GFXFF); tft.fillRect(44, 138, 2, 14, TFT_WHITE);
tft.drawString("9", 120, 116, GFXFF); tft.fillRect(70, 138, 2, 14, TFT_WHITE);
tft.drawString("+10", 134, 116, GFXFF); tft.fillRect(96, 38, 20, 4, TFT_DARKGREY);
tft.drawString("+30", 174, 116, GFXFF); tft.fillRect(129, 38, 20, 4, TFT_DARKGREY);
tft.drawString("20", 20, 146, GFXFF); tft.fillRect(173, 38, 20, 4, TFT_DARKGREY);
tft.drawString("40", 50, 146, GFXFF); tft.fillRect(207, 38, 20, 4, TFT_DARKGREY);
tft.drawString("60", 80, 146, GFXFF);
tft.drawString("80", 110, 146, GFXFF); tft.setFreeFont(GUI2_FONT12);
tft.drawString("100", 134, 146, GFXFF); tft.setTextColor(TFT_WHITE);
tft.drawString("120", 164, 146, GFXFF); tft.drawString("PI:", 26, 102, GFXFF);
// tft.drawString("dBμV", 280, 146, GFXFF);
tft.setTextColor(TFT_WHITE); tft.setFreeFont(GUI2_FONT12);
tft.setFreeFont(FONT14); tft.setTextColor(TFT_SKYBLUE);
tft.drawString("kHz", 225, -5, GFXFF); tft.drawString("232F", 56, 102, GFXFF);
tft.setTextColor(TFT_WHITE);
if (band == 0) tft.drawString("MHz", 258, 67, GFXFF); else tft.drawString("kHz", 258, 67, GFXFF); tft.setFreeFont(GUI2_FONT12);
tft.setTextColor(TFT_WHITE); tft.setTextColor(TFT_SKYBLUE);
tft.drawRightString("36.2", 250, 102, GFXFF);
tft.setFreeFont(GUI2_FONT12);
tft.setTextColor(TFT_WHITE);
tft.drawRightString("dBf", 294, 102, GFXFF);
tft.setTextColor(TFT_WHITE);
tft.setFreeFont(GUI2_FONT8);
tft.drawRightString("dB S/N", 294, 132, GFXFF);
tft.setFreeFont(GUI2_FONT8);
tft.setTextColor(TFT_SKYBLUE);
tft.drawRightString("20", 244, 132, GFXFF);
tft.setTextColor(TFT_SKYBLUE);
tft.setFreeFont(GUI2_FONT12);
tft.drawCentreString("R-ZURNAL", 160, 156, GFXFF);
tft.setTextColor(TFT_DARKGREY);
tft.setFreeFont(GUI2_FONT8);
tft.drawCentreString("Zelena vlna - volejte bezplatne 800 500 553 !", 160, 180, GFXFF);
tft.setFreeFont(GUI2_FONT8);
tft.setTextColor(TFT_DARKGREY);
tft.drawCentreString("Information", 160, 140, GFXFF);
tft.setTextColor(TFT_SKYBLUE);
tft.setFreeFont(GUI2_FONT8);
tft.drawRightString("TP", 40, 132, GFXFF);
tft.setTextColor(TFT_DARKGREY);
tft.setFreeFont(GUI2_FONT8);
tft.drawCentreString("TA", 57, 132, GFXFF);
tft.setTextColor(TFT_DARKGREY);
tft.setFreeFont(GUI2_FONT8);
tft.drawString("AF", 76, 132, GFXFF);
tft.setTextColor(TFT_WHITE);
tft.setFreeFont(GUI2_FONT12);
tft.drawString("kHz", 162, 92, GFXFF);
tft.setTextColor(TFT_SKYBLUE);
tft.setFreeFont(GUI2_FONT12);
tft.drawRightString("236", 158, 92, GFXFF);
tft.setTextColor(TFT_SKYBLUE);
tft.setFreeFont(FONTDEC);
tft.drawCentreString("88.50", 160, 49, GFXFF);
tft.setFreeFont(GUI2_FONT8);
tft.setTextColor(TFT_DARKGREY);
tft.drawCentreString("MANUAL", 160, 16, GFXFF);
tft.setFreeFont(GUI2_FONT8);
tft.setTextColor(TFT_WHITE);
tft.drawCentreString("21:35", 160, -4, GFXFF);
tft.setFreeFont(GUI2_FONT8);
tft.setTextColor(TFT_WHITE);
tft.drawString("89 %", 243, -4, GFXFF);
tft.setFreeFont(GUI2_FONT12);
tft.setTextColor(TFT_SKYBLUE);
tft.drawString("S", 14, 204, GFXFF);
tft.drawString("M", 182, 204, GFXFF);
tft.setFreeFont(GUI2_FONT8);
tft.setTextColor(TFT_DARKGREY);
tft.drawString("1 3 5 7 9 +10 +30", 30, 220, GFXFF);
tft.drawString("20 50 70 100 120", 204, 220, GFXFF);
for (;;);
}
RDSstatusold = false; RDSstatusold = false;
Stereostatusold = false; Stereostatusold = false;
ShowFreq(0); ShowFreq(0);
@@ -1784,18 +1981,6 @@ void BuildDisplay() {
strcpy(radioIdPrevious, ""); strcpy(radioIdPrevious, "");
strcpy(programServicePrevious, ""); strcpy(programServicePrevious, "");
strcpy(radioTextPrevious, ""); strcpy(radioTextPrevious, "");
tft.drawCircle(81, 15, 10, TFT_GREYOUT);
tft.drawCircle(81, 15, 9, TFT_GREYOUT);
tft.drawCircle(91, 15, 10, TFT_GREYOUT);
tft.drawCircle(91, 15, 9, TFT_GREYOUT);
tft.drawBitmap(110, 5, RDSLogo, 67, 22, TFT_GREYOUT);
if (StereoToggle == false) {
tft.drawCircle(86, 15, 10, TFT_SKYBLUE);
tft.drawCircle(86, 15, 9, TFT_SKYBLUE);
}
tft.setTextColor(TFT_SKYBLUE);
tft.setFreeFont(FONT7);
if (band == 1) tft.drawString("AM", 50, 26, GFXFF); else tft.drawString("FM", 50, 26, GFXFF);
} }
void ShowFreq(int mode) { void ShowFreq(int mode) {
@@ -1814,6 +1999,7 @@ void ShowFreq(int mode) {
String count = String(freq, DEC); String count = String(freq, DEC);
if (count.length() != freqoldcount || mode != 0) { if (count.length() != freqoldcount || mode != 0) {
tft.setTextColor(TFT_BLACK); tft.setTextColor(TFT_BLACK);
tft.drawRightString(String(freqold), 248, 45, 7); tft.drawRightString(String(freqold), 248, 45, 7);
} }
tft.setTextColor(TFT_YELLOW, TFT_BLACK); tft.setTextColor(TFT_YELLOW, TFT_BLACK);
@@ -2571,7 +2757,6 @@ void XDRGTKRoutine() {
break; break;
case 'S': case 'S':
tft.setFreeFont(FONT14);
if (buff[1] == 'a') { if (buff[1] == 'a') {
scanner_start = (atol(buff + 2) + 5) / 10; scanner_start = (atol(buff + 2) + 5) / 10;
} else if (buff[1] == 'b') { } else if (buff[1] == 'b') {
@@ -2624,7 +2809,8 @@ void XDRGTKRoutine() {
ShowFreq(1); ShowFreq(1);
tft.setTextColor(TFT_WHITE, TFT_BLACK); tft.setTextColor(TFT_WHITE, TFT_BLACK);
tft.setCursor (90, 60); tft.setCursor (90, 60);
tft.drawCentreString(myLanguage[language][34], 90, 60, GFXFF); tft.setFreeFont(FONT14);
tft.drawCentreString(myLanguage[language][34], 140, 60, GFXFF);
} }
frequencyold = frequency / 10; frequencyold = frequency / 10;
for (freq_scan = scanner_start; freq_scan <= scanner_end; freq_scan += scanner_step) { for (freq_scan = scanner_start; freq_scan <= scanner_end; freq_scan += scanner_step) {
@@ -2639,11 +2825,12 @@ void XDRGTKRoutine() {
Serial.print('\n'); Serial.print('\n');
if (screenmute == false) { if (screenmute == false) {
tft.setTextColor(TFT_BLACK); tft.setTextColor(TFT_BLACK);
tft.drawCentreString(myLanguage[language][34], 90, 60, GFXFF); tft.drawCentreString(myLanguage[language][34], 140, 60, GFXFF);
} }
radio.SetFreq(frequencyold); radio.SetFreq(frequencyold);
if (screenmute == false) ShowFreq(0); if (screenmute == false) ShowFreq(0);
radio.setFMABandw(); radio.setFMABandw();
BWset = 0;
} }
break; break;
+9 -29
View File
@@ -288,8 +288,8 @@ bool TEF6686::readRDS(bool showrdserrors)
if ((offset == 0) && (ps_process == 0)) ps_process = 1; if ((offset == 0) && (ps_process == 0)) ps_process = 1;
if (ps_process == 1) { if (ps_process == 1) {
ps_buffer[(offset * 2) + 0] = EBU_converter(rds.rdsD >> 8); ps_buffer[(offset * 2) + 0] = rds.rdsD >> 8;
ps_buffer[(offset * 2) + 1] = EBU_converter(rds.rdsD & 0xFF); ps_buffer[(offset * 2) + 1] = rds.rdsD & 0xFF;
ps_buffer[(offset * 2) + 2] = 0; ps_buffer[(offset * 2) + 2] = 0;
ps_process = strlen(ps_buffer) == 8 ? 2 : 1; ps_process = strlen(ps_buffer) == 8 ? 2 : 1;
} }
@@ -312,7 +312,7 @@ bool TEF6686::readRDS(bool showrdserrors)
if ((bitRead(rds.rdsB, 4)) == 1 && ((bitRead(rds.rdsB, 10)) == 0)) rds.hasEON = true; else rds.hasEON = false; if ((bitRead(rds.rdsB, 4)) == 1 && ((bitRead(rds.rdsB, 10)) == 0)) rds.hasEON = true; else rds.hasEON = false;
if ((bitRead(rds.rdsB, 4)) == 0 && ((bitRead(rds.rdsB, 10)) == 1)) rds.hasTP = true; else rds.hasTP = false; if ((bitRead(rds.rdsB, 4)) == 0 && ((bitRead(rds.rdsB, 10)) == 1)) rds.hasTP = true; else rds.hasTP = false;
rds.hasTA = (bitRead(rds.rdsB, 4)) && (bitRead(rds.rdsB, 10)) & 0x1F; rds.hasTA = (bitRead(rds.rdsB, 4)) && (bitRead(rds.rdsB, 10)) & 0x1F;
rds.MS = (bitRead(rds.rdsB, 3)) & 0x1F; if (((bitRead(rds.rdsB, 3)) & 0x1F) == 1) rds.MS = 1; else rds.MS = 2;
//AF //AF
uint8_t af_controlCode = rds.rdsC >> 8; uint8_t af_controlCode = rds.rdsC >> 8;
@@ -377,15 +377,15 @@ bool TEF6686::readRDS(bool showrdserrors)
if (rt_process == 1) if (rt_process == 1)
{ {
rds.stationTextOffset = offset; rds.stationTextOffset = offset;
rt_buffer[offset + 0] = EBU_converter(rds.rdsC >> 8); rt_buffer[offset + 0] = rds.rdsC >> 8;
rt_buffer[offset + 1] = EBU_converter(rds.rdsC & 0xff); rt_buffer[offset + 1] = rds.rdsC & 0xff;
rt_buffer[offset + 2] = EBU_converter(rds.rdsD >> 8); rt_buffer[offset + 2] = rds.rdsD >> 8;
rt_buffer[offset + 3] = EBU_converter(rds.rdsD & 0xff); rt_buffer[offset + 3] = rds.rdsD & 0xff;
if (offset > offsetold) offsetold = offset; if (offset > offsetold) offsetold = offset;
if (offset == offsetold) { if (offset == offsetold) {
strcpy(stationTextBuffer, rt_buffer); strcpy(stationTextBuffer, rt_buffer);
for (int i = 0; i < 64; i++) stationTextBuffer[i] = EBU_converter(stationTextBuffer[i]); for (int i = 0; i < 64; i++) stationTextBuffer[i] = stationTextBuffer[i];
if (rt_timer < 64) { if (rt_timer < 64) {
strcpy(rds.stationText, stationTextBuffer); strcpy(rds.stationText, stationTextBuffer);
rt_timer++; rt_timer++;
@@ -512,26 +512,6 @@ bool TEF6686::readRDS(bool showrdserrors)
return rdsDataReady; return rdsDataReady;
} }
char TEF6686::EBU_converter (uint8_t src)
{
switch (src)
{
case 0x91: return 0x69; break; // ï
case 0x93: return 0x65; break; // ë
case 0x95: return 0x69; break; // ï
case 0x97: return 0x6f; break; // ö
case 0x99: return 0x75; break; // ü
case 0xd1: return 0x41; break; // Ï
case 0xd3: return 0x45; break; // Ë
case 0xd5: return 0x49; break; // Ï
case 0xd7: return 0x4f; break; // Ö
case 0xd9: return 0x55; break; // Ü
case 0x20: return 0x20; break; // SPACE
case 0x30 ... 0x7d: return src; break;
default: return 0x20; break;
}
}
bool TEF6686::checkDouble (uint16_t value) bool TEF6686::checkDouble (uint16_t value)
{ {
for (int i = 0; i < 50; i++) if (af[i].frequency == value)return (true); for (int i = 0; i < 50; i++) if (af[i].frequency == value)return (true);
@@ -580,7 +560,7 @@ void TEF6686::clearRDS (bool fullsearchrds)
rds.hasTP = false; rds.hasTP = false;
rds.hasTA = false; rds.hasTA = false;
rds.hasEON = false; rds.hasEON = false;
rds.MS = false; rds.MS = 0;
rds.hasPTY = false; rds.hasPTY = false;
rds.hasCT = false; rds.hasCT = false;
rds.hasMusicTitle = false; rds.hasMusicTitle = false;
+1 -2
View File
@@ -86,6 +86,7 @@ const char* const PTY_USA[] {
typedef struct _rds_ { typedef struct _rds_ {
byte region; byte region;
byte stationTypeCode; byte stationTypeCode;
byte MS;
char stationName[9]; char stationName[9];
char stationText[65]; char stationText[65];
char stationType[17]; char stationType[17];
@@ -110,7 +111,6 @@ typedef struct _rds_ {
bool hasTA; bool hasTA;
bool hasEON; bool hasEON;
bool hasAF; bool hasAF;
bool MS;
bool hasPTY; bool hasPTY;
bool hasCT; bool hasCT;
bool afclear; bool afclear;
@@ -172,7 +172,6 @@ class TEF6686 {
bool mute; bool mute;
private: private:
char EBU_converter (uint8_t src);
uint16_t rdsTimeOut = 32768; uint16_t rdsTimeOut = 32768;
uint8_t ps_process; uint8_t ps_process;
uint8_t rt_process; uint8_t rt_process;
+6374
View File
File diff suppressed because it is too large Load Diff