Added option to lock CT to PI

This commit is contained in:
Sjef Verhoeven PE5PVB
2025-01-19 20:39:02 +01:00
parent 2dfd23a468
commit 798c9b43cf
6 changed files with 177 additions and 28 deletions
+4 -1
View File
@@ -191,7 +191,7 @@ byte amgain;
byte freqoldcount;
byte HighCutLevel;
byte HighCutOffset;
byte items[10] = {10, static_cast<byte>(dynamicspi ? 10 : 9), 7, 10, 10, 10, 9, 9, 10, 9};
byte items[10] = {10, static_cast<byte>(dynamicspi ? 10 : 9), 7, 10, 10, 10, 9, 10, 10, 9};
byte iMSEQ;
byte iMSset;
byte language;
@@ -591,6 +591,7 @@ void setup() {
autoDST = EEPROM.readByte(EE_BYTE_AUTODST);
clockampm = EEPROM.readByte(EE_BYTE_CLOCKAMPM);
logcounter = EEPROM.readUInt(EE_UINT16_LOGCOUNTER);
radio.rds.PICTlock = EEPROM.readUInt(EE_UINT16_PICTLOCK);
#ifdef DYNAMIC_SPI_SPEED
if (spispeed == SPI_SPEED_DEFAULT) {
@@ -4581,6 +4582,7 @@ void DefaultSettings() {
EEPROM.writeByte(EE_BYTE_AUTOLOG, 1);
EEPROM.writeByte(EE_BYTE_AUTODST, 1);
EEPROM.writeByte(EE_BYTE_CLOCKAMPM, 0);
EEPROM.writeUInt(EE_UINT16_PICTLOCK, 0);
#ifdef DEEPELEC_DP_66X
EEPROM.writeByte(EE_BYTE_ROTARYMODE, 1);
@@ -4836,6 +4838,7 @@ void endMenu() {
EEPROM.writeByte(EE_BYTE_AUTOLOG, autolog);
EEPROM.writeByte(EE_BYTE_AUTODST, autoDST);
EEPROM.writeByte(EE_BYTE_CLOCKAMPM, clockampm);
EEPROM.writeUInt(EE_UINT16_PICTLOCK, radio.rds.PICTlock);
EEPROM.commit();
if (af == 2) radio.rds.afreg = true; else radio.rds.afreg = false;
Serial.end();
+1 -1
View File
@@ -1341,7 +1341,7 @@ void TEF6686::readRDS(byte showrdserrors) {
} break;
case RDS_GROUP_4A: {
if (!rdsBerrorThreshold && !rdsCerrorThreshold && !rdsDerrorThreshold && rds.ctupdate) {
if (!rdsBerrorThreshold && !rdsCerrorThreshold && !rdsDerrorThreshold && rds.ctupdate && (rds.PICTlock == rds.rdsA || rds.PICTlock == 0)) {
// CT
uint32_t mjd;
mjd = (rds.rdsB & 0x03);
+1 -1
View File
@@ -578,7 +578,7 @@ typedef struct _rds_ {
char stationState[3];
char dabafeid[5];
char dabafchannel[4];
uint16_t rdsA, rdsB, rdsC, rdsD, rdsErr, rdsStat, correctPI, rdsplusTag1, rdsplusTag2;
uint16_t rdsA, rdsB, rdsC, rdsD, rdsErr, rdsStat, correctPI, rdsplusTag1, rdsplusTag2, PICTlock = 0;
bool ps12error, ps34error, ps56error, ps78error;
time_t time;
int32_t offset;
+5 -4
View File
@@ -225,9 +225,9 @@
#define EE_CHECKBYTE_VALUE 10 // 0 ~ 255,add new entry, change for new value
#define EE_PRESETS_FREQUENCY 0 // Default value when memory channel should be skipped!
#ifdef HAS_AIR_BAND
#define EE_TOTAL_CNT 2288 // Total occupied eeprom bytes
#define EE_TOTAL_CNT 2292 // Total occupied eeprom bytes
#else
#define EE_TOTAL_CNT 2283 // Total occupied eeprom bytes
#define EE_TOTAL_CNT 2287 // Total occupied eeprom bytes
#endif
#define EE_PRESETS_BAND_START 0 // 99 * 1 byte
@@ -350,9 +350,10 @@
#define EE_BYTE_AUTODST 2277
#define EE_BYTE_CLOCKAMPM 2278
#define EE_UINT16_LOGCOUNTER 2279
#define EE_UINT16_PICTLOCK 2283
#ifdef HAS_AIR_BAND
#define EE_BYTE_AIRSTEPSIZE 2283
#define EE_UINT16_FREQUENCY_AIR 2284
#define EE_BYTE_AIRSTEPSIZE 2287
#define EE_UINT16_FREQUENCY_AIR 2288
#endif
// End of EEPROM index defines
+109
View File
@@ -1588,6 +1588,21 @@ void ShowOneLine(byte position, byte item, bool selected) {
FullLineSprite.drawString(String(fmscansens), 298, 2);
break;
case CONNECTIVITY:
FullLineSprite.setTextDatum(TL_DATUM);
FullLineSprite.setTextColor(ActiveColor, ActiveColorSmooth, false);
FullLineSprite.drawString(removeNewline(myLanguage[language][301]), 6, 2);
char PICT[5];
sprintf(PICT, "%04X", radio.rds.PICTlock);
FullLineSprite.setTextDatum(TR_DATUM);
FullLineSprite.setTextColor(PrimaryColor, PrimaryColorSmooth, false);
FullLineSprite.drawString((radio.rds.PICTlock == 0 ? myLanguage[language][30] : myLanguage[language][42]), 298, 2);
FullLineSprite.setTextColor(ActiveColor, ActiveColorSmooth, false);
FullLineSprite.drawString((radio.rds.PICTlock != 0 ? String(PICT) : ""), 258, 2);
break;
case DXMODE:
FullLineSprite.setTextDatum(TL_DATUM);
FullLineSprite.setTextColor(ActiveColor, ActiveColorSmooth, false);
@@ -2678,6 +2693,29 @@ void ShowOneButton(byte position, byte item, bool selected) {
PSSprite.drawString(String(fmscansens), 75, 15);
break;
case CONNECTIVITY:
PSSprite.setTextDatum(TC_DATUM);
PSSprite.setTextColor(ActiveColor, ActiveColorSmooth, false);
PSSprite.drawString(shortLine(removeNewline(myLanguage[language][301])), 75, 1);
if (radio.rds.PICTlock == 0) {
PSSprite.setTextDatum(TC_DATUM);
PSSprite.drawString(myLanguage[language][30], 75, 15);
} else {
char PICT[5];
sprintf(PICT, "%04X", radio.rds.PICTlock);
PSSprite.setTextDatum(TL_DATUM);
PSSprite.setTextColor(ActiveColor, ActiveColorSmooth, false);
PSSprite.drawString(myLanguage[language][42], 77, 15);
PSSprite.setTextColor(PrimaryColor, PrimaryColorSmooth, false);
PSSprite.setTextDatum(TR_DATUM);
PSSprite.drawString(String(PICT), 73, 15);
}
break;
case DXMODE:
PSSprite.setTextDatum(TC_DATUM);
PSSprite.setTextColor(ActiveColor, ActiveColorSmooth, false);
@@ -3853,6 +3891,32 @@ void MenuUp() {
OneBigLineSprite.drawString((clockampm ? "12" : "24"), 135, 0);
OneBigLineSprite.pushSprite(24, 118);
break;
case ITEM10:
char PICT[5];
OneBigLineSprite.setTextColor(PrimaryColor, PrimaryColorSmooth, false);
if (radio.rds.PICTlock != 0) {
OneBigLineSprite.setTextDatum(TC_DATUM);
OneBigLineSprite.drawString(myLanguage[language][30], 135, 0);
radio.rds.PICTlock = 0;
} else {
if (radio.rds.correctPI != 0) {
radio.rds.PICTlock = radio.rds.correctPI;
sprintf(PICT, "%04X", radio.rds.PICTlock);
OneBigLineSprite.setTextDatum(TR_DATUM);
OneBigLineSprite.drawString(myLanguage[language][42], 135, 0);
OneBigLineSprite.setTextDatum(TL_DATUM);
OneBigLineSprite.setTextColor(ActiveColor, ActiveColorSmooth, false);
OneBigLineSprite.drawString(String(PICT), 155, 0);
} else {
OneBigLineSprite.setTextDatum(TC_DATUM);
OneBigLineSprite.setTextColor(PrimaryColor, PrimaryColorSmooth, false);
OneBigLineSprite.drawString(myLanguage[language][302], 135, 0);
}
}
OneBigLineSprite.pushSprite(24, 118);
break;
}
break;
@@ -4838,6 +4902,32 @@ void MenuDown() {
OneBigLineSprite.drawString((clockampm ? "12" : "24"), 135, 0);
OneBigLineSprite.pushSprite(24, 118);
break;
case ITEM10:
char PICT[5];
OneBigLineSprite.setTextColor(PrimaryColor, PrimaryColorSmooth, false);
if (radio.rds.PICTlock != 0) {
OneBigLineSprite.setTextDatum(TC_DATUM);
OneBigLineSprite.drawString(myLanguage[language][30], 135, 0);
radio.rds.PICTlock = 0;
} else {
if (radio.rds.correctPI != 0) {
radio.rds.PICTlock = radio.rds.correctPI;
sprintf(PICT, "%04X", radio.rds.PICTlock);
OneBigLineSprite.setTextDatum(TR_DATUM);
OneBigLineSprite.drawString(myLanguage[language][42], 135, 0);
OneBigLineSprite.setTextDatum(TL_DATUM);
OneBigLineSprite.setTextColor(ActiveColor, ActiveColorSmooth, false);
OneBigLineSprite.drawString(String(PICT), 155, 0);
} else {
OneBigLineSprite.setTextDatum(TC_DATUM);
OneBigLineSprite.setTextColor(PrimaryColor, PrimaryColorSmooth, false);
OneBigLineSprite.drawString(myLanguage[language][302], 135, 0);
}
}
OneBigLineSprite.pushSprite(24, 118);
break;
}
break;
@@ -5881,6 +5971,25 @@ void DoMenu() {
OneBigLineSprite.drawString((clockampm ? "12" : "24"), 135, 0);
OneBigLineSprite.pushSprite(24, 118);
break;
case ITEM10:
Infoboxprint(myLanguage[language][301]);
char PICT[5];
OneBigLineSprite.setTextColor(PrimaryColor, PrimaryColorSmooth, false);
if (radio.rds.PICTlock == 0) {
OneBigLineSprite.setTextDatum(TC_DATUM);
OneBigLineSprite.drawString(myLanguage[language][30], 135, 0);
} else {
sprintf(PICT, "%04X", radio.rds.PICTlock);
OneBigLineSprite.setTextDatum(TR_DATUM);
OneBigLineSprite.drawString(myLanguage[language][42], 135, 0);
OneBigLineSprite.setTextDatum(TL_DATUM);
OneBigLineSprite.setTextColor(ActiveColor, ActiveColorSmooth, false);
OneBigLineSprite.drawString(String(PICT), 155, 0);
}
OneBigLineSprite.pushSprite(24, 118);
}
break;
+55 -19
View File
@@ -5,7 +5,7 @@
// [number of languages][number of texts]
static const char* const myLanguage[18][301] PROGMEM = {
static const char* const myLanguage[18][303] PROGMEM = {
{ "English", // English
"Rotary direction changed", // 1
"Please release button", // 2
@@ -306,7 +306,9 @@ static const char* const myLanguage[18][301] PROGMEM = {
"Logbook full!", // 297
"Clock mode", // 298
"Auto DST on NTP time", // 299
"The logbook contains over 130 entries, which the viewer cannot process. Please download the CSV file to process it." // 300
"The logbook contains over 130 entries, which the viewer cannot process. Please download the CSV file to process it.", // 300
"PI locked CT sync", // 301
"Error! No RDS signal" // 302
},
{ "Nederlands", // Dutch
@@ -609,7 +611,9 @@ static const char* const myLanguage[18][301] PROGMEM = {
"Logboek vol!", // 297
"Klok methode", // 298
"Auto zomertijd\nop NTP tijd", // 299
"Het logboek bevat meer dan 130 items, die de viewer niet kan verwerken. Download alstublieft het CSV-bestand om het te bekijken." // 300
"Het logboek bevat meer dan 130 items, die de viewer niet kan verwerken. Download alstublieft het CSV-bestand om het te bekijken.", // 300
"PI gebonden CT sync", // 301
"Fout! Geen RDS!" // 302
},
{ "Polski", // Polish
@@ -912,7 +916,9 @@ static const char* const myLanguage[18][301] PROGMEM = {
"Wykaz pełny!", // 297
"Tryb zegara", // 298
"Auto czas letni wg NTP", // 299
"Wykaz zawiera ponad 130 wpisów, których przeglądarka nie może pokazać. Pobierz plik CSV, aby je przetworzyć." // 300
"Wykaz zawiera ponad 130 wpisów, których przeglądarka nie może pokazać. Pobierz plik CSV, aby je przetworzyć.", // 300
"PI locked CT sync", // 301
"Error! No RDS signal" // 302
},
{ "Hrvatski", // Croatian
@@ -1215,7 +1221,9 @@ static const char* const myLanguage[18][301] PROGMEM = {
"Logbook full!", // 297
"Clock mode", // 298
"Auto DST on NTP time", // 299
"The logbook contains over 130 entries, which the viewer cannot process. Please download the CSV file to process it." // 300
"The logbook contains over 130 entries, which the viewer cannot process. Please download the CSV file to process it.", // 300
"PI locked CT sync", // 301
"Error! No RDS signal" // 302
},
{ "Ελληνικά", // Greek
@@ -1518,7 +1526,9 @@ static const char* const myLanguage[18][301] PROGMEM = {
"Βιβλίο γεμάτο!", // 297
"Λειτουργία ρολογιού", // 298
"Αυτόματο DST\nσε ώρα NTP", // 299
"Το βιβλίο περιέχει πάνω από 130 καταγραφές, και είναι αδύνατη η επεξεργασία τους από το χρήστη. Κάντε λήψη του αρχείου CSV για να το επεξεργαστείτε." // 300
"Το βιβλίο περιέχει πάνω από 130 καταγραφές, και είναι αδύνατη η επεξεργασία τους από το χρήστη. Κάντε λήψη του αρχείου CSV για να το επεξεργαστείτε.", // 300
"PI locked CT sync", // 301
"Error! No RDS signal" // 302
},
{ "Română", // Romanian
@@ -1821,7 +1831,9 @@ static const char* const myLanguage[18][301] PROGMEM = {
"Logbook full!", // 297
"Clock mode", // 298
"Auto DST on NTP time", // 299
"The logbook contains over 130 entries, which the viewer cannot process. Please download the CSV file to process it." // 300
"The logbook contains over 130 entries, which the viewer cannot process. Please download the CSV file to process it.", // 300
"PI locked CT sync", // 301
"Error! No RDS signal" // 302
},
{ "Deutsch", // German
@@ -2124,7 +2136,9 @@ static const char* const myLanguage[18][301] PROGMEM = {
"Logbuch ist voll!", // 297
"Uhrzeit-Modus", // 298
"Auto-Sommerzeit\nüber NTP", // 299
"Das Logbuch enthält mehr als 130 Einträge, was der Viewer nicht verarbeiten kann. Bitte lade die CSV-Datei zum Verarbeiten herunter." // 300
"Das Logbuch enthält mehr als 130 Einträge, was der Viewer nicht verarbeiten kann. Bitte lade die CSV-Datei zum Verarbeiten herunter.", // 300
"PI locked CT sync", // 301
"Error! No RDS signal" // 302
},
{ "Čeština", // Czech
@@ -2427,7 +2441,9 @@ static const char* const myLanguage[18][301] PROGMEM = {
"Logbook je plný!", // 297
"Režim hodin", // 298
"Automatický letní čas u NTP času", // 299
"Logbook obsahuje více než 130 položek, které prohlížeč nedokáže zpracovat. Pro zpracování všech položek si stáhněte CSV soubor." // 300
"Logbook obsahuje více než 130 položek, které prohlížeč nedokáže zpracovat. Pro zpracování všech položek si stáhněte CSV soubor.", // 300
"PI locked CT sync", // 301
"Error! No RDS signal" // 302
},
{ "Magyar", // Hungarian
@@ -2730,7 +2746,9 @@ static const char* const myLanguage[18][301] PROGMEM = {
"Logbook full!", // 297
"Clock mode", // 298
"Auto DST on NTP time", // 299
"The logbook contains over 130 entries, which the viewer cannot process. Please download the CSV file to process it." // 300
"The logbook contains over 130 entries, which the viewer cannot process. Please download the CSV file to process it.", // 300
"PI locked CT sync", // 301
"Error! No RDS signal" // 302
},
{ "Français", // French
@@ -3033,7 +3051,9 @@ static const char* const myLanguage[18][301] PROGMEM = {
"Journal de bord plein!", // 297
"Mode horloge", // 298
"DST automatique\nsur l'heure NTP", // 299
"Le journal de bord contient plus de 130 entrées que le spectateur ne peut pas traiter. Télécharger le fichier CSV pour le traiter." // 300
"Le journal de bord contient plus de 130 entrées que le spectateur ne peut pas traiter. Télécharger le fichier CSV pour le traiter.", // 300
"PI locked CT sync", // 301
"Error! No RDS signal" // 302
},
{ "Български", // Bulgarian
@@ -3336,7 +3356,9 @@ static const char* const myLanguage[18][301] PROGMEM = {
"Logbook full!", // 297
"Clock mode", // 298
"Auto DST on NTP time", // 299
"The logbook contains over 130 entries, which the viewer cannot process. Please download the CSV file to process it." // 300
"The logbook contains over 130 entries, which the viewer cannot process. Please download the CSV file to process it.", // 300
"PI locked CT sync", // 301
"Error! No RDS signal" // 302
},
{ "Русский", // Russian
@@ -3639,7 +3661,9 @@ static const char* const myLanguage[18][301] PROGMEM = {
"Logbook full!", // 297
"Clock mode", // 298
"Auto DST on NTP time", // 299
"The logbook contains over 130 entries, which the viewer cannot process. Please download the CSV file to process it." // 300
"The logbook contains over 130 entries, which the viewer cannot process. Please download the CSV file to process it.", // 300
"PI locked CT sync", // 301
"Error! No RDS signal" // 302
},
{ "Українська", // Ukranian
@@ -3942,7 +3966,9 @@ static const char* const myLanguage[18][301] PROGMEM = {
"Logbook full!", // 297
"Clock mode", // 298
"Auto DST on NTP time", // 299
"The logbook contains over 130 entries, which the viewer cannot process. Please download the CSV file to process it." // 300
"The logbook contains over 130 entries, which the viewer cannot process. Please download the CSV file to process it.", // 300
"PI locked CT sync", // 301
"Error! No RDS signal" // 302
},
{ "Italiano", // Italian
@@ -4245,7 +4271,9 @@ static const char* const myLanguage[18][301] PROGMEM = {
"Logbook full!", // 297
"Clock mode", // 298
"Auto DST on NTP time", // 299
"The logbook contains over 130 entries, which the viewer cannot process. Please download the CSV file to process it." // 300
"The logbook contains over 130 entries, which the viewer cannot process. Please download the CSV file to process it.",// 300
"PI locked CT sync", // 301
"Error! No RDS signal" // 302
},
{ "Simplified Chinese", // Simplified Chinese
@@ -4548,7 +4576,9 @@ static const char* const myLanguage[18][301] PROGMEM = {
"Logbook full!", // 297
"Clock mode", // 298
"Auto DST on NTP time", // 299
"The logbook contains over 130 entries, which the viewer cannot process. Please download the CSV file to process it." // 300
"The logbook contains over 130 entries, which the viewer cannot process. Please download the CSV file to process it.", // 300
"PI locked CT sync", // 301
"Error! No RDS signal" // 302
},
{ "Norsk", // Norwegian
@@ -4851,7 +4881,9 @@ static const char* const myLanguage[18][301] PROGMEM = {
"Loggbok full!", // 297
"Klokkemodus", // 298
"Auto sommertid på NTP-tid", // 299
"Loggboken inneholder over 130 oppføringer, som en ikke kan behandle. Last ned CSV-filen for å behandle den." // 300
"Loggboken inneholder over 130 oppføringer, som en ikke kan behandle. Last ned CSV-filen for å behandle den.", // 300
"PI locked CT sync", // 301
"Error! No RDS signal" // 302
},
{ "Español", // Spanish
@@ -5154,7 +5186,9 @@ static const char* const myLanguage[18][301] PROGMEM = {
"¡Libro lleno!", // 297
"Modo reloj", // 298
"DST automático\nen hora NTP", // 299
"El libro de registro contiene más de 130 entradas que el visor no puede procesar. Descargue el archivo CSV para procesarlo." // 300
"El libro de registro contiene más de 130 entradas que el visor no puede procesar. Descargue el archivo CSV para procesarlo.", // 300
"PI locked CT sync", // 301
"Error! No RDS signal" // 302
},
{ "Português", // Portuguese
@@ -5457,7 +5491,9 @@ static const char* const myLanguage[18][301] PROGMEM = {
"Livro cheio!", // 297
"Modo de relógio", // 298
"DST automático\nno horário NTP", // 299
"O diário de bordo contém mais de 130 entradas que o espectador não consegue processar. Descarregue o ficheiro CSV para processá-lo." // 300
"O diário de bordo contém mais de 130 entradas que o espectador não consegue processar. Descarregue o ficheiro CSV para processá-lo.", // 300
"PI locked CT sync", // 301
"Error! No RDS signal" // 302
}
};
#endif