Fix bug on PTY, updated PI detector

This commit is contained in:
Sjef Verhoeven PE5PVB
2023-07-04 20:24:52 +02:00
parent 6e16f78473
commit c2e9764d4b
4 changed files with 28 additions and 32 deletions
+11 -11
View File
@@ -120,7 +120,7 @@ byte TEF;
byte theme; byte theme;
byte tunemode; byte tunemode;
char buff[16]; char buff[16];
char programTypePrevious[17]; char programTypePrevious[18];
char radioIdPrevious[6]; char radioIdPrevious[6];
int AGC; int AGC;
int BWOld; int BWOld;
@@ -272,7 +272,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); radio.rds.pierrors = 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);
@@ -1264,7 +1264,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.writeByte(59, radio.rds.pierrors);
EEPROM.writeByte(244, showsquelch); EEPROM.writeByte(244, showsquelch);
EEPROM.writeByte(245, showmodulation); EEPROM.writeByte(245, showmodulation);
EEPROM.writeByte(246, amnb); EEPROM.writeByte(246, amnb);
@@ -1646,7 +1646,7 @@ void ButtonPress() {
tft.setTextColor(TFT_WHITE); tft.setTextColor(TFT_WHITE);
tft.drawCentreString(myLanguage[language][61], 155, 70, GFXFF); tft.drawCentreString(myLanguage[language][61], 155, 70, GFXFF);
tft.setTextColor(TFT_YELLOW); 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); if (radio.rds.pierrors) tft.drawCentreString(myLanguage[language][42], 155, 110, GFXFF); else tft.drawCentreString(myLanguage[language][30], 155, 110, GFXFF);
break; break;
case 110: case 110:
@@ -2026,10 +2026,10 @@ void KeyUp() {
case 90: case 90:
tft.setTextColor(TFT_BLACK); 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.pierrors) 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; if (radio.rds.pierrors) radio.rds.pierrors = false; else radio.rds.pierrors = true;
tft.setTextColor(TFT_YELLOW); 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); if (radio.rds.pierrors) tft.drawCentreString(myLanguage[language][42], 155, 110, GFXFF); else tft.drawCentreString(myLanguage[language][30], 155, 110, GFXFF);
break; break;
case 110: case 110:
@@ -2406,10 +2406,10 @@ void KeyDown() {
case 90: case 90:
tft.setTextColor(TFT_BLACK); 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.pierrors) 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; if (radio.rds.pierrors) radio.rds.pierrors = false; else radio.rds.pierrors = true;
tft.setTextColor(TFT_YELLOW); 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); if (radio.rds.pierrors) tft.drawCentreString(myLanguage[language][42], 155, 110, GFXFF); else tft.drawCentreString(myLanguage[language][30], 155, 110, GFXFF);
break; break;
case 110: case 110:
@@ -2977,7 +2977,7 @@ void BuildMenu() {
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); if (radio.rds.pierrors) tft.drawRightString(myLanguage[language][42], 305, 90, GFXFF); else tft.drawRightString(myLanguage[language][30], 305, 90, GFXFF);
if (showsquelch) tft.drawRightString(myLanguage[language][42], 305, 110, GFXFF); else tft.drawRightString(myLanguage[language][30], 305, 110, GFXFF); if (showsquelch) tft.drawRightString(myLanguage[language][42], 305, 110, GFXFF); else tft.drawRightString(myLanguage[language][30], 305, 110, GFXFF);
if (showmodulation) tft.drawRightString(myLanguage[language][42], 305, 130, GFXFF); else tft.drawRightString(myLanguage[language][30], 305, 130, GFXFF); if (showmodulation) tft.drawRightString(myLanguage[language][42], 305, 130, GFXFF); else tft.drawRightString(myLanguage[language][30], 305, 130, GFXFF);
if (amnb != 0) tft.drawRightString(String(amnb, DEC), 265, 150, GFXFF); else tft.drawRightString(myLanguage[language][30], 265, 150, GFXFF); if (amnb != 0) tft.drawRightString(String(amnb, DEC), 265, 150, GFXFF); else tft.drawRightString(myLanguage[language][30], 265, 150, GFXFF);
+2 -5
View File
@@ -251,7 +251,7 @@ void TEF6686::readRDS(bool showrdserrors)
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 != 1 && (!correctpi || rds.dynamicpi)) { if (rds.region != 1 && (rds.correct || rds.pierrors)) {
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;
@@ -266,10 +266,8 @@ void TEF6686::readRDS(bool showrdserrors)
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;
if (strcmp(rds.picode, "0000?") == 0) { if (strcmp(rds.picode, "0000?") == 0) {
memset(rds.picode, 0, sizeof(rds.picode)); memset(rds.picode, 0, sizeof(rds.picode));
correctpi = rds.correct;
} }
} }
@@ -573,7 +571,7 @@ void TEF6686::clearRDS (bool fullsearchrds)
PStext[i] = L'\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 < 18; 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;
for (i = 0; i < 50; i++) af[i].frequency = 0; for (i = 0; i < 50; i++) af[i].frequency = 0;
@@ -601,7 +599,6 @@ void TEF6686::clearRDS (bool fullsearchrds)
rds.hasArtist = false; rds.hasArtist = false;
rds.hasEvent = false; rds.hasEvent = false;
rds.hasHost = false; rds.hasHost = false;
correctpi = false;
ps_counter = 0; ps_counter = 0;
af_counter = 0; af_counter = 0;
rds.MS = 0; rds.MS = 0;
+6 -7
View File
@@ -19,7 +19,7 @@ enum RADIO_TUNE_MODE {
TUNE_MAN, TUNE_AUTO, TUNE_MEM, TUNE_MI_BAND TUNE_MAN, TUNE_AUTO, TUNE_MEM, TUNE_MI_BAND
}; };
const char* const PTY_EU[] { static const char* const PTY_EU[] {
"None", "None",
"News", "News",
"Current Affairs", "Current Affairs",
@@ -52,10 +52,10 @@ const char* const PTY_EU[] {
"Documentary", "Documentary",
"Alarm Test", "Alarm Test",
"Alarm!!!", "Alarm!!!",
" " " "
}; };
const char* const PTY_USA[] { static const char* const PTY_USA[] {
"None", "None",
"News", "News",
"Information", "Information",
@@ -88,7 +88,7 @@ const char* const PTY_USA[] {
"Weather", "Weather",
"Emergency Test", "Emergency Test",
"EMERGENCY!", "EMERGENCY!",
" " " "
}; };
typedef struct _rds_ { typedef struct _rds_ {
@@ -101,7 +101,7 @@ typedef struct _rds_ {
String RTTitle; String RTTitle;
String RTHost; String RTHost;
String RTEvent; String RTEvent;
char stationType[17]; char stationType[18];
char picode[6]; char picode[6];
uint16_t hours, minutes, days, months, years, offsetplusmin, rdsA, rdsB, rdsC, rdsD, rdsErr; uint16_t hours, minutes, days, months, years, offsetplusmin, rdsA, rdsB, rdsC, rdsD, rdsErr;
int8_t offset; int8_t offset;
@@ -128,7 +128,7 @@ typedef struct _rds_ {
bool filter; bool filter;
bool underscore; bool underscore;
bool rdsreset; bool rdsreset;
bool dynamicpi; bool pierrors;
} rds_; } rds_;
typedef struct _af_ { typedef struct _af_ {
@@ -201,7 +201,6 @@ class TEF6686 {
uint16_t rdsBprevious; uint16_t rdsBprevious;
uint16_t rdsCprevious; uint16_t rdsCprevious;
uint16_t rdsDprevious; uint16_t rdsDprevious;
bool correctpi;
bool rtABold; bool rtABold;
wchar_t PStext[9] = L""; wchar_t PStext[9] = L"";
byte ps_counter; byte ps_counter;
+9 -9
View File
@@ -62,7 +62,7 @@ static const char myLanguage[9][74][85] = {
"Stationlist client IP", "Stationlist client IP",
"Show SW wavelength", "Show SW wavelength",
"RDS filter", "RDS filter",
"Dynamic PI", "Show PI errors",
"Show squelch", "Show squelch",
"Modulation meter", "Modulation meter",
"AM Noise blanker", "AM Noise blanker",
@@ -138,7 +138,7 @@ static const char myLanguage[9][74][85] = {
"Stationlist client IP", "Stationlist client IP",
"Toon SW golflengte", "Toon SW golflengte",
"RDS filter", "RDS filter",
"Dynamische PI", "Toon PI fouten",
"Toon squelch", "Toon squelch",
"Modulatie meter", "Modulatie meter",
"AM ruis filter", "AM ruis filter",
@@ -214,7 +214,7 @@ static const char myLanguage[9][74][85] = {
"IP klienta Stationlist", "IP klienta Stationlist",
"Pokaz dlugosci fal SW", "Pokaz dlugosci fal SW",
"Filtr RDS", "Filtr RDS",
"Dynamiczne PI", "Show PI errors",
"Pokaz blokade szumow", "Pokaz blokade szumow",
"Wskaznik modulacji", "Wskaznik modulacji",
"Reduktor szumow AM", "Reduktor szumow AM",
@@ -290,7 +290,7 @@ static const char myLanguage[9][74][85] = {
"IP klijenta StationList", "IP klijenta StationList",
"Prikaži valnu duljinu KV-a", "Prikaži valnu duljinu KV-a",
"RDS filter", "RDS filter",
"Dinamičan PI", "Show PI errors",
"Prikaži squelch", "Prikaži squelch",
"Mjerač modulacije", "Mjerač modulacije",
"AM prigušivač šuma", "AM prigušivač šuma",
@@ -366,7 +366,7 @@ static const char myLanguage[9][74][85] = {
"IP πελάτη λίστας σταθμών", "IP πελάτη λίστας σταθμών",
"Εμφάνιση μήκους κύματος SW", "Εμφάνιση μήκους κύματος SW",
"Φίλτρο RDS", "Φίλτρο RDS",
"Δυναμικό PI", "Show PI errors",
"Εμφάνιση squelch", "Εμφάνιση squelch",
"Μετρητής διαμόρφωσης", "Μετρητής διαμόρφωσης",
"Απαλοιφή θορύβου AM", "Απαλοιφή θορύβου AM",
@@ -442,7 +442,7 @@ static const char myLanguage[9][74][85] = {
"Stationlist client IP", "Stationlist client IP",
"Show SW wavelength", "Show SW wavelength",
"RDS filter", "RDS filter",
"Dynamic PI", "Show PI errors",
"Show squelch", "Show squelch",
"Modulation meter", "Modulation meter",
"AM Noise blanker", "AM Noise blanker",
@@ -518,7 +518,7 @@ static const char myLanguage[9][74][85] = {
"Stationlist Client IP", "Stationlist Client IP",
"Zeige KW-Wellenlänge", "Zeige KW-Wellenlänge",
"RDS-Filter", "RDS-Filter",
"Dynamischer PI-Code", "Show PI errors",
"Zeige Rauschsperre", "Zeige Rauschsperre",
"Modulationspegel", "Modulationspegel",
"AM Rauschunterdrückung", "AM Rauschunterdrückung",
@@ -594,7 +594,7 @@ static const char myLanguage[9][74][85] = {
"Stationlist client IP", "Stationlist client IP",
"Show SW wavelength", "Show SW wavelength",
"RDS filter", "RDS filter",
"Dynamic PI", "Show PI errors",
"Show squelch", "Show squelch",
"Modulation meter", "Modulation meter",
"AM Noise blanker", "AM Noise blanker",
@@ -670,7 +670,7 @@ static const char myLanguage[9][74][85] = {
"Stationlist client IP", "Stationlist client IP",
"Show SW wavelength", "Show SW wavelength",
"RDS filter", "RDS filter",
"Dynamic PI", "Show PI errors",
"Show squelch", "Show squelch",
"Modulation meter", "Modulation meter",
"AM Noise blanker", "AM Noise blanker",