Added extra menu options for FM DX mode (not integrated yet!)

This commit is contained in:
Sjef Verhoeven PE5PVB
2024-04-09 16:27:24 +02:00
parent 24443c4245
commit 209f7079b7
5 changed files with 281 additions and 28 deletions

View File

@@ -92,6 +92,8 @@ bool RDSstatusold;
bool rdsstereoold;
bool rtcset;
bool scandxmode;
bool scanmem;
bool scanmute;
bool screenmute;
bool screensavertriggered = false;
bool seek;
@@ -173,6 +175,7 @@ byte rdsqualityold;
byte region;
byte rotarymode;
byte touchrotating;
byte scancancel;
byte scanstart;
byte scanstop;
byte scanhold;
@@ -484,6 +487,9 @@ void setup() {
scanstart = EEPROM.readByte(EE_BYTE_SCANSTART);
scanstop = EEPROM.readByte(EE_BYTE_SCANSTOP);
scanhold = EEPROM.readByte(EE_BYTE_SCANHOLD);
scanmem = EEPROM.readByte(EE_BYTE_SCANMEM);
scancancel = EEPROM.readByte(EE_BYTE_SCANCANCEL);
scanmute = EEPROM.readByte(EE_BYTE_SCANMUTE);
if (spispeed == SPI_SPEED_DEFAULT) tft.setSPISpeed(SPI_FREQUENCY / 1000000); else tft.setSPISpeed(spispeed * 10);
LWLowEdgeSet = FREQ_LW_LOW_EDGE_MIN;
@@ -2077,6 +2083,9 @@ void ModeButtonPress() {
EEPROM.writeByte(EE_BYTE_SCANSTART, scanstart);
EEPROM.writeByte(EE_BYTE_SCANSTOP, scanstop);
EEPROM.writeByte(EE_BYTE_SCANHOLD, scanhold);
EEPROM.writeByte(EE_BYTE_SCANMEM, scanmem);
EEPROM.writeByte(EE_BYTE_SCANCANCEL, scancancel);
EEPROM.writeByte(EE_BYTE_SCANMUTE, scanmute);
EEPROM.commit();
if (af == 2) radio.rds.afreg = true; else radio.rds.afreg = false;
if (!usesquelch) radio.setUnMute();
@@ -4170,6 +4179,9 @@ void DefaultSettings(byte userhardwaremodel) {
EEPROM.writeByte(EE_BYTE_SCANSTART, 0);
EEPROM.writeByte(EE_BYTE_SCANSTOP, 9);
EEPROM.writeByte(EE_BYTE_SCANHOLD, 5);
EEPROM.writeByte(EE_BYTE_SCANMEM, 1);
EEPROM.writeByte(EE_BYTE_SCANCANCEL, 0);
EEPROM.writeByte(EE_BYTE_SCANMUTE, 0);
for (int i = 0; i < EE_PRESETS_CNT; i++) {
EEPROM.writeByte(i + EE_PRESETS_BAND_START, BAND_FM);

View File

@@ -198,7 +198,7 @@
#define EE_PRESETS_CNT 99
#define EE_CHECKBYTE_VALUE 6 // 0 ~ 255,add new entry, change for new value
#define EE_TOTAL_CNT 2216
#define EE_TOTAL_CNT 2219
#define EE_UINT16_FREQUENCY_FM 0
#define EE_BYTE_VOLSET 4
#define EE_BYTE_STEREO 5
@@ -285,12 +285,15 @@
#define EE_BYTE_SCANSTART 130
#define EE_BYTE_SCANSTOP 131
#define EE_BYTE_SCANHOLD 132
#define EE_PRESETS_BAND_START 133
#define EE_PRESET_BW_START 233
#define EE_PRESET_MS_START 333
#define EE_PRESETS_FREQUENCY_START 433
#define EE_PRESETS_RDSPI_START 829 // 5 bytes
#define EE_PRESETS_RDSPS_START 1324 // 9 bytes
#define EE_BYTE_SCANMEM 133
#define EE_BYTE_SCANCANCEL 134
#define EE_BYTE_SCANMUTE 135
#define EE_PRESETS_BAND_START 136
#define EE_PRESET_BW_START 236
#define EE_PRESET_MS_START 336
#define EE_PRESETS_FREQUENCY_START 436
#define EE_PRESETS_RDSPI_START 832 // 5 bytes
#define EE_PRESETS_RDSPS_START 1327 // 9 bytes
#define EE_PRESETS_FREQUENCY 0
// End of EEPROM index defines
@@ -310,6 +313,10 @@ typedef struct {
char RDSPS[9];
} mem;
enum SCAN_CANCEL {
SCAN_CANCEL = OFF, CORRECTPI, SIGNAL
};
// FM band: before BAND_GAP; AM band: after BAND_GAP
enum RADIO_BAND {
BAND_OIRT = 0, BAND_FM, BAND_GAP, BAND_LW, BAND_MW, BAND_SW

View File

@@ -7,7 +7,7 @@
#include <cstring>
byte menuitem;
byte items[9] = {9, static_cast<byte>(dynamicspi ? 9 : 8), 7, 10, 9, 10, 9, 6, 4};
byte items[9] = {9, static_cast<byte>(dynamicspi ? 9 : 8), 7, 10, 9, 10, 9, 6, 7};
extern mem presets[];
void doTheme() { // Use this to put your own colors in: http://www.barth-dev.de/online/rgb565-color-picker/
@@ -1009,6 +1009,16 @@ void ShowOneLine(byte position, byte item, bool selected) {
FullLineSprite.setTextColor(PrimaryColor, PrimaryColorSmooth, false);
FullLineSprite.drawString(String(stationlistid, DEC), 298, 3);
break;
case DXMODE:
FullLineSprite.setTextDatum(TL_DATUM);
FullLineSprite.setTextColor(ActiveColor, ActiveColorSmooth, false);
FullLineSprite.drawString(removeNewline(myLanguage[language][216]), 6, 3);
FullLineSprite.setTextDatum(TR_DATUM);
FullLineSprite.setTextColor(PrimaryColor, PrimaryColorSmooth, false);
FullLineSprite.drawString((scanmem ? myLanguage[language][218] : myLanguage[language][217]), 298, 3);
break;
}
break;
@@ -1103,6 +1113,20 @@ void ShowOneLine(byte position, byte item, bool selected) {
FullLineSprite.setTextColor(PrimaryColor, PrimaryColorSmooth, false);
FullLineSprite.drawString((XDRGTKMuteScreen ? myLanguage[language][42] : myLanguage[language][30]), 298, 3);
break;
case DXMODE:
FullLineSprite.setTextDatum(TL_DATUM);
FullLineSprite.setTextColor(ActiveColor, ActiveColorSmooth, false);
FullLineSprite.drawString(removeNewline(myLanguage[language][219]), 6, 3);
FullLineSprite.setTextDatum(TR_DATUM);
FullLineSprite.setTextColor(PrimaryColor, PrimaryColorSmooth, false);
switch (scancancel) {
case OFF: FullLineSprite.drawString(myLanguage[language][30], 298, 3); break;
case CORRECTPI: FullLineSprite.drawString(myLanguage[language][220], 298, 3); break;
case SIGNAL: FullLineSprite.drawString(myLanguage[language][221], 298, 3); break;
}
break;
}
break;
@@ -1185,6 +1209,16 @@ void ShowOneLine(byte position, byte item, bool selected) {
if (amgain != 0) FullLineSprite.setTextColor(ActiveColor, ActiveColorSmooth, false);
FullLineSprite.drawString((amgain != 0 ? "dB" : myLanguage[language][30]), 298, 3);
break;
case DXMODE:
FullLineSprite.setTextDatum(TL_DATUM);
FullLineSprite.setTextColor(ActiveColor, ActiveColorSmooth, false);
FullLineSprite.drawString(removeNewline(myLanguage[language][222]), 6, 3);
FullLineSprite.setTextDatum(TR_DATUM);
FullLineSprite.setTextColor(PrimaryColor, PrimaryColorSmooth, false);
FullLineSprite.drawString((scanmute ? myLanguage[language][42] : myLanguage[language][30]), 298, 3);
break;
}
break;
@@ -2522,6 +2556,29 @@ void MenuUp() {
OneBigLineSprite.drawString(String(scanhold, DEC), 135, 0);
OneBigLineSprite.pushSprite(24, 118);
break;
case ITEM5:
scanmem = !scanmem;
OneBigLineSprite.drawString((scanmem ? myLanguage[language][218] : myLanguage[language][217]), 135, 0);
OneBigLineSprite.pushSprite(24, 118);
break;
case ITEM6:
scancancel++;
if (scancancel > 2) scancancel = 0;
switch (scancancel) {
case OFF: OneBigLineSprite.drawString(myLanguage[language][30], 135, 0); break;
case CORRECTPI: OneBigLineSprite.drawString(myLanguage[language][220], 135, 0); break;
case SIGNAL: OneBigLineSprite.drawString(myLanguage[language][221], 135, 0); break;
}
OneBigLineSprite.pushSprite(24, 118);
break;
case ITEM7:
scanmute = !scanmute;
OneBigLineSprite.drawString((scanmute ? myLanguage[language][42] : myLanguage[language][30]), 135, 0);
OneBigLineSprite.pushSprite(24, 118);
break;
}
break;
}
@@ -3323,6 +3380,29 @@ void MenuDown() {
OneBigLineSprite.drawString(String(scanhold, DEC), 135, 0);
OneBigLineSprite.pushSprite(24, 118);
break;
case ITEM5:
scanmem = !scanmem;
OneBigLineSprite.drawString((scanmem ? myLanguage[language][218] : myLanguage[language][217]), 135, 0);
OneBigLineSprite.pushSprite(24, 118);
break;
case ITEM6:
scancancel--;
if (scancancel > 2) scancancel = 2;
switch (scancancel) {
case OFF: OneBigLineSprite.drawString(myLanguage[language][30], 135, 0); break;
case CORRECTPI: OneBigLineSprite.drawString(myLanguage[language][220], 135, 0); break;
case SIGNAL: OneBigLineSprite.drawString(myLanguage[language][221], 135, 0); break;
}
OneBigLineSprite.pushSprite(24, 118);
break;
case ITEM7:
scanmute = !scanmute;
OneBigLineSprite.drawString((scanmute ? myLanguage[language][42] : myLanguage[language][30]), 135, 0);
OneBigLineSprite.pushSprite(24, 118);
break;
}
break;
}
@@ -4108,7 +4188,7 @@ void DoMenu() {
menuopen = false;
menu = false;
memorypos = scanstart;
scanmodeold = tunemode;
scanmodeold = tunemode;
tunemode = TUNE_MEM;
BuildDisplay();
DoMemoryPosTune();
@@ -4142,6 +4222,31 @@ void DoMenu() {
OneBigLineSprite.drawString(String(scanhold, DEC), 135, 0);
OneBigLineSprite.pushSprite(24, 118);
break;
case ITEM5:
Infoboxprint(myLanguage[language][216]);
OneBigLineSprite.drawString((scanmem ? myLanguage[language][218] : myLanguage[language][217]), 135, 0);
OneBigLineSprite.pushSprite(24, 118);
break;
case ITEM6:
Infoboxprint(myLanguage[language][219]);
switch (scancancel) {
case OFF: OneBigLineSprite.drawString(myLanguage[language][30], 135, 0); break;
case CORRECTPI: OneBigLineSprite.drawString(myLanguage[language][220], 135, 0); break;
case SIGNAL: OneBigLineSprite.drawString(myLanguage[language][221], 135, 0); break;
}
OneBigLineSprite.pushSprite(24, 118);
break;
case ITEM7:
Infoboxprint(myLanguage[language][222]);
OneBigLineSprite.drawString((scanmute ? myLanguage[language][42] : myLanguage[language][30]), 135, 0);
OneBigLineSprite.pushSprite(24, 118);
break;
}
break;
}

View File

@@ -56,6 +56,8 @@ extern bool RDSstatusold;
extern bool rdsstereoold;
extern bool usesquelch;
extern bool scandxmode;
extern bool scanmem;
extern bool scanmute;
extern bool softmuteam;
extern bool softmutefm;
extern bool Stereostatusold;
@@ -103,6 +105,7 @@ extern byte poweroptions;
extern byte eonptyold[20];
extern byte rdsblockold;
extern byte region;
extern byte scancancel;
extern byte scanstart;
extern byte scanstop;
extern byte scanhold;

View File

@@ -5,7 +5,7 @@
// [number of languages][number of texts]
// *** means the text is the same as in English
static const char* const myLanguage[18][216] PROGMEM = {
static const char* const myLanguage[18][223] PROGMEM = {
{ "English", // English
"Rotary direction changed", // 1
"Please release button", // 2
@@ -221,7 +221,14 @@ static const char* const myLanguage[18][216] PROGMEM = {
"Start DX scanning", // 212
"FM DX Options", // 213
"Abort! The start channel\nis marked as skipped.", // 214
"Auto sort AF" // 215
"Auto sort AF", // 215
"Memory channels", // 216
"Exclude", // 217
"Only", // 218
"Auto cancel scan", // 219
"Correct PI", // 220
"Signal", // 221
"Mute audio\nwhile scanning" // 222
},
{ "Nederlands", // Dutch
@@ -439,7 +446,14 @@ static const char* const myLanguage[18][216] PROGMEM = {
"Start DX zoeken", // 212
"FM DX Opties", // 213
"Fout! Startkanaal is\ngemarkeerd als skip", // 214
"Auto AF sorteren" // 215
"Auto AF sorteren", // 215
"Geheugenkanalen", // 216
"Uitsluiten", // 217
"Enkel", // 218
"Auto afbreken", // 219
"Correcte PI", // 220
"Signaal", // 221
"Geen geluid\ntijdens scannen" // 222
},
{ "Polski", // Polish
@@ -657,7 +671,14 @@ static const char* const myLanguage[18][216] PROGMEM = {
"Start DX scanning", // 212
"FM DX Options", // 213
"Abort! The start channel\nis marked as skipped.", // 214
"Automat. sortowanie AF" // 215
"Automat. sortowanie AF", // 215
"Memory channels", // 216
"Exclude", // 217
"Only", // 218
"Auto cancel scan", // 219
"Correct PI", // 220
"Signal", // 221
"Mute audio\nwhile scanning" // 222
},
{ "Hrvatski", // Croatian
@@ -875,7 +896,14 @@ static const char* const myLanguage[18][216] PROGMEM = {
"Start DX scanning", // 212
"FM DX Options", // 213
"Abort! The start channel\nis marked as skipped.", // 214
"Autom. sortiranje AF-a" // 215
"Autom. sortiranje AF-a", // 215
"Memory channels", // 216
"Exclude", // 217
"Only", // 218
"Auto cancel scan", // 219
"Correct PI", // 220
"Signal", // 221
"Mute audio\nwhile scanning" // 222
},
{ "Ελληνικά", // Greek
@@ -1093,7 +1121,14 @@ static const char* const myLanguage[18][216] PROGMEM = {
"Start DX scanning", // 212
"FM DX Options", // 213
"Abort! The start channel\nis marked as skipped.", // 214
"Αυτόματη ταξινόμηση\nAF" // 215
"Αυτόματη ταξινόμηση\nAF", // 215
"Memory channels", // 216
"Exclude", // 217
"Only", // 218
"Auto cancel scan", // 219
"Correct PI", // 220
"Signal", // 221
"Mute audio\nwhile scanning" // 222
},
{ "Română", // Romanian
@@ -1311,7 +1346,14 @@ static const char* const myLanguage[18][216] PROGMEM = {
"Start DX scanning", // 212
"FM DX Options", // 213
"Abort! The start channel\nis marked as skipped.", // 214
"Sortare automata AF" // 215
"Sortare automata AF", // 215
"Memory channels", // 216
"Exclude", // 217
"Only", // 218
"Auto cancel scan", // 219
"Correct PI", // 220
"Signal", // 221
"Mute audio\nwhile scanning" // 222
},
{ "Deutsch", // German
@@ -1529,7 +1571,14 @@ static const char* const myLanguage[18][216] PROGMEM = {
"Start DX scanning", // 212
"FM DX Options", // 213
"Abort! The start channel\nis marked as skipped.", // 214
"AF Autosortierung" // 215
"AF Autosortierung", // 215
"Memory channels", // 216
"Exclude", // 217
"Only", // 218
"Auto cancel scan", // 219
"Correct PI", // 220
"Signal", // 221
"Mute audio\nwhile scanning" // 222
},
{ "Český", // Czech
@@ -1747,7 +1796,14 @@ static const char* const myLanguage[18][216] PROGMEM = {
"Start DX scanning", // 212
"FM DX Options", // 213
"Abort! The start channel\nis marked as skipped.", // 214
"Auto řazení AF" // 215
"Auto řazení AF", // 215
"Memory channels", // 216
"Exclude", // 217
"Only", // 218
"Auto cancel scan", // 219
"Correct PI", // 220
"Signal", // 221
"Mute audio\nwhile scanning" // 222
},
{ "Slovenský", // Slovak
@@ -1965,7 +2021,14 @@ static const char* const myLanguage[18][216] PROGMEM = {
"Start DX scanning", // 212
"FM DX Options", // 213
"Abort! The start channel\nis marked as skipped.", // 214
"Auto radenie AF" // 215
"Auto radenie AF", // 215
"Memory channels", // 216
"Exclude", // 217
"Only", // 218
"Auto cancel scan", // 219
"Correct PI", // 220
"Signal", // 221
"Mute audio\nwhile scanning" // 222
},
{ "Français", // French
@@ -2183,7 +2246,14 @@ static const char* const myLanguage[18][216] PROGMEM = {
"Start DX scanning", // 212
"FM DX Options", // 213
"Abort! The start channel\nis marked as skipped.", // 214
"Tri AF automatique" // 215
"Tri AF automatique", // 215
"Memory channels", // 216
"Exclude", // 217
"Only", // 218
"Auto cancel scan", // 219
"Correct PI", // 220
"Signal", // 221
"Mute audio\nwhile scanning" // 222
},
{ "Български", // Bulgarian
@@ -2401,7 +2471,14 @@ static const char* const myLanguage[18][216] PROGMEM = {
"Start DX scanning", // 212
"FM DX Options", // 213
"Abort! The start channel\nis marked as skipped.", // 214
"Auto sort AF" // 215 ***
"Auto sort AF", // 215 ***
"Memory channels", // 216
"Exclude", // 217
"Only", // 218
"Auto cancel scan", // 219
"Correct PI", // 220
"Signal", // 221
"Mute audio\nwhile scanning" // 222
},
{ "Русский", // Russian
@@ -2619,7 +2696,14 @@ static const char* const myLanguage[18][216] PROGMEM = {
"Start DX scanning", // 212
"FM DX Options", // 213
"Abort! The start channel\nis marked as skipped.", // 214
"Сортировка AF-частот" // 215
"Сортировка AF-частот", // 215
"Memory channels", // 216
"Exclude", // 217
"Only", // 218
"Auto cancel scan", // 219
"Correct PI", // 220
"Signal", // 221
"Mute audio\nwhile scanning" // 222
},
{ "Українська", // Ukranian
@@ -2837,7 +2921,14 @@ static const char* const myLanguage[18][216] PROGMEM = {
"Start DX scanning", // 212
"FM DX Options", // 213
"Abort! The start channel\nis marked as skipped.", // 214
"Авто сорт. AF" // 215
"Авто сорт. AF", // 215
"Memory channels", // 216
"Exclude", // 217
"Only", // 218
"Auto cancel scan", // 219
"Correct PI", // 220
"Signal", // 221
"Mute audio\nwhile scanning" // 222
},
{ "Italiano", // Italian
@@ -3055,7 +3146,14 @@ static const char* const myLanguage[18][216] PROGMEM = {
"Start DX scanning", // 212
"FM DX Options", // 213
"Abort! The start channel\nis marked as skipped.", // 214
"Autoordinamento AF" // 215
"Autoordinamento AF", // 215
"Memory channels", // 216
"Exclude", // 217
"Only", // 218
"Auto cancel scan", // 219
"Correct PI", // 220
"Signal", // 221
"Mute audio\nwhile scanning" // 222
},
{ "Simplified Chinese", // Simplified Chinese
@@ -3273,7 +3371,14 @@ static const char* const myLanguage[18][216] PROGMEM = {
"Start DX scanning", // 212
"FM DX Options", // 213
"Abort! The start channel\nis marked as skipped.", // 214
"自动排列AF" // 215
"自动排列AF", // 215
"Memory channels", // 216
"Exclude", // 217
"Only", // 218
"Auto cancel scan", // 219
"Correct PI", // 220
"Signal", // 221
"Mute audio\nwhile scanning" // 222
},
{ "Norsk", // Norwegian
@@ -3491,7 +3596,14 @@ static const char* const myLanguage[18][216] PROGMEM = {
"Start DX scanning", // 212
"FM DX Options", // 213
"Abort! The start channel\nis marked as skipped.", // 214
"Auto sorterings AF" // 215
"Auto sorterings AF", // 215
"Memory channels", // 216
"Exclude", // 217
"Only", // 218
"Auto cancel scan", // 219
"Correct PI", // 220
"Signal", // 221
"Mute audio\nwhile scanning" // 222
},
{ "Español", // Spanish
@@ -3709,7 +3821,14 @@ static const char* const myLanguage[18][216] PROGMEM = {
"Start DX scanning", // 212
"FM DX Options", // 213
"Abort! The start channel\nis marked as skipped.", // 214
"Orden automático de AF" // 215
"Orden automático de AF", // 215
"Memory channels", // 216
"Exclude", // 217
"Only", // 218
"Auto cancel scan", // 219
"Correct PI", // 220
"Signal", // 221
"Mute audio\nwhile scanning" // 222
},
{ "Português", // Portuguese
@@ -3927,7 +4046,14 @@ static const char* const myLanguage[18][216] PROGMEM = {
"Start DX scanning", // 212
"FM DX Options", // 213
"Abort! The start channel\nis marked as skipped.", // 214
"Classificar AF\nautomaticamente" // 215
"Classificar AF\nautomaticamente", // 215
"Memory channels", // 216
"Exclude", // 217
"Only", // 218
"Auto cancel scan", // 219
"Correct PI", // 220
"Signal", // 221
"Mute audio\nwhile scanning" // 222
}
};
#endif