From c2e9764d4b5436c82a0e24045a2106e83f932448 Mon Sep 17 00:00:00 2001 From: Sjef Verhoeven PE5PVB Date: Tue, 4 Jul 2023 20:24:52 +0200 Subject: [PATCH] Fix bug on PTY, updated PI detector --- TEF6686_ESP32.ino | 22 +++++++++++----------- src/TEF6686.cpp | 7 ++----- src/TEF6686.h | 13 ++++++------- src/language.h | 18 +++++++++--------- 4 files changed, 28 insertions(+), 32 deletions(-) diff --git a/TEF6686_ESP32.ino b/TEF6686_ESP32.ino index bbf9214..15893a4 100644 --- a/TEF6686_ESP32.ino +++ b/TEF6686_ESP32.ino @@ -120,7 +120,7 @@ byte TEF; byte theme; byte tunemode; char buff[16]; -char programTypePrevious[17]; +char programTypePrevious[18]; char radioIdPrevious[6]; int AGC; int BWOld; @@ -272,7 +272,7 @@ void setup() { subnetclient = EEPROM.readByte(56); showSWMIBand = EEPROM.readByte(57); radio.rds.filter = EEPROM.readByte(58); - radio.rds.dynamicpi = EEPROM.readByte(59); + radio.rds.pierrors = EEPROM.readByte(59); frequency_LW = EEPROM.readUInt(221); frequency_MW = EEPROM.readUInt(225); frequency_SW = EEPROM.readUInt(229); @@ -1264,7 +1264,7 @@ void ModeButtonPress() { EEPROM.writeByte(56, subnetclient); EEPROM.writeByte(57, showSWMIBand); EEPROM.writeByte(58, radio.rds.filter); - EEPROM.writeByte(59, radio.rds.dynamicpi); + EEPROM.writeByte(59, radio.rds.pierrors); EEPROM.writeByte(244, showsquelch); EEPROM.writeByte(245, showmodulation); EEPROM.writeByte(246, amnb); @@ -1646,7 +1646,7 @@ void ButtonPress() { 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); + if (radio.rds.pierrors) tft.drawCentreString(myLanguage[language][42], 155, 110, GFXFF); else tft.drawCentreString(myLanguage[language][30], 155, 110, GFXFF); break; case 110: @@ -2026,10 +2026,10 @@ void KeyUp() { 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; + if (radio.rds.pierrors) tft.drawCentreString(myLanguage[language][42], 155, 110, GFXFF); else tft.drawCentreString(myLanguage[language][30], 155, 110, GFXFF); + if (radio.rds.pierrors) radio.rds.pierrors = false; else radio.rds.pierrors = 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); + if (radio.rds.pierrors) tft.drawCentreString(myLanguage[language][42], 155, 110, GFXFF); else tft.drawCentreString(myLanguage[language][30], 155, 110, GFXFF); break; case 110: @@ -2406,10 +2406,10 @@ void KeyDown() { 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; + if (radio.rds.pierrors) tft.drawCentreString(myLanguage[language][42], 155, 110, GFXFF); else tft.drawCentreString(myLanguage[language][30], 155, 110, GFXFF); + if (radio.rds.pierrors) radio.rds.pierrors = false; else radio.rds.pierrors = 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); + if (radio.rds.pierrors) tft.drawCentreString(myLanguage[language][42], 155, 110, GFXFF); else tft.drawCentreString(myLanguage[language][30], 155, 110, GFXFF); break; 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); 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.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 (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); diff --git a/src/TEF6686.cpp b/src/TEF6686.cpp index fdc2a0b..5fb3d1c 100644 --- a/src/TEF6686.cpp +++ b/src/TEF6686.cpp @@ -251,7 +251,7 @@ void TEF6686::readRDS(bool showrdserrors) if (rdsReady) { // We have all data to decode... let's go... //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[1] = (rds.rdsA >> 8) & 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 ? rds.picode[5] = '\0'; - correctpi = rds.correct; if (strcmp(rds.picode, "0000?") == 0) { memset(rds.picode, 0, sizeof(rds.picode)); - correctpi = rds.correct; } } @@ -573,7 +571,7 @@ void TEF6686::clearRDS (bool fullsearchrds) PStext[i] = L'\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 < 50; i++) af[i].frequency = 0; @@ -601,7 +599,6 @@ void TEF6686::clearRDS (bool fullsearchrds) rds.hasArtist = false; rds.hasEvent = false; rds.hasHost = false; - correctpi = false; ps_counter = 0; af_counter = 0; rds.MS = 0; diff --git a/src/TEF6686.h b/src/TEF6686.h index c501eea..00778b7 100644 --- a/src/TEF6686.h +++ b/src/TEF6686.h @@ -19,7 +19,7 @@ enum RADIO_TUNE_MODE { TUNE_MAN, TUNE_AUTO, TUNE_MEM, TUNE_MI_BAND }; -const char* const PTY_EU[] { +static const char* const PTY_EU[] { "None", "News", "Current Affairs", @@ -52,10 +52,10 @@ const char* const PTY_EU[] { "Documentary", "Alarm Test", "Alarm!!!", - " " + " " }; -const char* const PTY_USA[] { +static const char* const PTY_USA[] { "None", "News", "Information", @@ -88,7 +88,7 @@ const char* const PTY_USA[] { "Weather", "Emergency Test", "EMERGENCY!", - " " + " " }; typedef struct _rds_ { @@ -101,7 +101,7 @@ typedef struct _rds_ { String RTTitle; String RTHost; String RTEvent; - char stationType[17]; + char stationType[18]; char picode[6]; uint16_t hours, minutes, days, months, years, offsetplusmin, rdsA, rdsB, rdsC, rdsD, rdsErr; int8_t offset; @@ -128,7 +128,7 @@ typedef struct _rds_ { bool filter; bool underscore; bool rdsreset; - bool dynamicpi; + bool pierrors; } rds_; typedef struct _af_ { @@ -201,7 +201,6 @@ class TEF6686 { uint16_t rdsBprevious; uint16_t rdsCprevious; uint16_t rdsDprevious; - bool correctpi; bool rtABold; wchar_t PStext[9] = L""; byte ps_counter; diff --git a/src/language.h b/src/language.h index 39203f4..c43faab 100644 --- a/src/language.h +++ b/src/language.h @@ -62,7 +62,7 @@ static const char myLanguage[9][74][85] = { "Stationlist client IP", "Show SW wavelength", "RDS filter", - "Dynamic PI", + "Show PI errors", "Show squelch", "Modulation meter", "AM Noise blanker", @@ -138,7 +138,7 @@ static const char myLanguage[9][74][85] = { "Stationlist client IP", "Toon SW golflengte", "RDS filter", - "Dynamische PI", + "Toon PI fouten", "Toon squelch", "Modulatie meter", "AM ruis filter", @@ -214,7 +214,7 @@ static const char myLanguage[9][74][85] = { "IP klienta Stationlist", "Pokaz dlugosci fal SW", "Filtr RDS", - "Dynamiczne PI", + "Show PI errors", "Pokaz blokade szumow", "Wskaznik modulacji", "Reduktor szumow AM", @@ -290,7 +290,7 @@ static const char myLanguage[9][74][85] = { "IP klijenta StationList", "Prikaži valnu duljinu KV-a", "RDS filter", - "Dinamičan PI", + "Show PI errors", "Prikaži squelch", "Mjerač modulacije", "AM prigušivač šuma", @@ -366,7 +366,7 @@ static const char myLanguage[9][74][85] = { "IP πελάτη λίστας σταθμών", "Εμφάνιση μήκους κύματος SW", "Φίλτρο RDS", - "Δυναμικό PI", + "Show PI errors", "Εμφάνιση squelch", "Μετρητής διαμόρφωσης", "Απαλοιφή θορύβου AM", @@ -442,7 +442,7 @@ static const char myLanguage[9][74][85] = { "Stationlist client IP", "Show SW wavelength", "RDS filter", - "Dynamic PI", + "Show PI errors", "Show squelch", "Modulation meter", "AM Noise blanker", @@ -518,7 +518,7 @@ static const char myLanguage[9][74][85] = { "Stationlist Client IP", "Zeige KW-Wellenlänge", "RDS-Filter", - "Dynamischer PI-Code", + "Show PI errors", "Zeige Rauschsperre", "Modulationspegel", "AM Rauschunterdrückung", @@ -594,7 +594,7 @@ static const char myLanguage[9][74][85] = { "Stationlist client IP", "Show SW wavelength", "RDS filter", - "Dynamic PI", + "Show PI errors", "Show squelch", "Modulation meter", "AM Noise blanker", @@ -670,7 +670,7 @@ static const char myLanguage[9][74][85] = { "Stationlist client IP", "Show SW wavelength", "RDS filter", - "Dynamic PI", + "Show PI errors", "Show squelch", "Modulation meter", "AM Noise blanker",