From 91dd1f851851a7d5a9b01f6d2d80917e507d5fe0 Mon Sep 17 00:00:00 2001 From: lawendel <38895093+lawendel@users.noreply.github.com> Date: Sat, 4 May 2024 15:02:23 +0200 Subject: [PATCH 1/6] Update language.h (Italian updates) Latest functions added, minor changes on previous translations (some mods + second line (\n) introduced --- src/language.h | 76 +++++++++++++++++++++++++------------------------- 1 file changed, 38 insertions(+), 38 deletions(-) diff --git a/src/language.h b/src/language.h index 1e062e1..6a73fd6 100644 --- a/src/language.h +++ b/src/language.h @@ -2952,23 +2952,23 @@ static const char* const myLanguage[18][223] PROGMEM = { "Soglia di basso livello: ", // 18 "Contrasto: ", // 19 "Imposta volume", // 20 - "Imp. offset conversione", // 21 - "Imp. limite di banda inf.", // 22 - "Imp. limite di banda sup.", // 23 - "Imp. offset di livello", // 24 - "Imp. soglia separaz. stereo", // 25 - "Imp. frequenza taglio alti", // 26 - "Imp. soglia taglio alti", // 27 - "Imp. soglia di livello basso", // 28 - "Imp. la luminosità del display", // 29 + "Offset conversione", // 21 + “Limite di banda inferiore”, // 22 + “Limite di banda superiore”, // 23 + “Offset di livello", // 24 + “Soglia separazione stereo", // 25 + “Frequenza taglio alti", // 26 + “Soglia taglio alti", // 27 + “Soglia di livello basso", // 28 + “Luminosità schermo”, // 29 "Off", // 30 *** "Schermo disattivato!", // 31 "Deseleziona box RF+ per audio", // 32 "OFF", // 33 *** "SCANSIONE...", // 34 "Ricevitore non rilevato", // 35 - "AM Antenna gain", // 36 - "FM AGC", // 37 + “Guadagno antenna AM", // 36 + “AGC FM", // 37 "Mostra errori RDS", // 38 "Lingua", // 39 "Scegli la lingua", // 40 @@ -2987,19 +2987,19 @@ static const char* const myLanguage[18][223] PROGMEM = { "Connetti a: ", // 53 "per configurare il Wi-Fi", // 54 "Connessione al Wi-Fi", // 55 - "NON RIUSCITA. Wi-Fi inattivo", // 56 + "NON RIUSCITA!”, // 56 "CONNESSO!", // 57 "IP per StationList", // 58 - "Mostra banda SW in m.", // 59 + "Mostra banda SW in m.“, // 59 "Filtro RDS", // 60 "Mostra errori PI", // 61 - "Mostra squelch", // 62 NEEDS NEW TRANSLATION, ENGLISH: USE SQUELCH + “Utilizzare squelch", // 62 "Meter di modulazione", // 63 "Soppressione rumore AM", // 64 "Soppressione rumore FM", // 65 "Predefiniti caricati", // 66 "Uscita audio", // 67 - "Consenti sintonia con salvaschermo", // 68 + "Consenti sintonia\ncon salvaschermo", // 68 "Inversione schermo", // 69 "Info sul software", // 70 "Codice principale:", // 71 @@ -3014,9 +3014,9 @@ static const char* const myLanguage[18][223] PROGMEM = { "Min.", // 80 *** "Velocità SPI Dinamico", // 81 *** "Sensibilità scansione", // 82 - "NONE", // 83 represents: AM/FM bands unavailable(please delete this note after translation) - "Software version", // 84 - "Frequency font", // 85 *** + “ASSENTE”, // 83 + “Versione Software", // 84 + “Font frequenza”, // 85 *** "Auto", // 86 "AF non disponibile", // 87 "EON non disponibile", // 88 @@ -3038,7 +3038,7 @@ static const char* const myLanguage[18][223] PROGMEM = { "SW", // 104 *** "FM", // 105 *** "OIRT", // 106 *** - "Rotazione a schermo spento", // 107 *** + "Rotazione con schermo spento", // 107 *** "Selezionare modello", // 108 *** "Base (ILI9341)", // 109 *** "Portatile (ILI9341)", // 110 *** @@ -3100,7 +3100,7 @@ static const char* const myLanguage[18][223] PROGMEM = { "Identificatore", // 166 *** "Acquisto", // 167 *** "Ottieni dati", // 168 *** - "Passo di default MW", // 169 *** + "Passo di sintonia\nMW predefinito", // 169 *** "Tangerine", // 170 *** "Ocean", // 171 *** "Indigo", // 172 *** @@ -3115,7 +3115,7 @@ static const char* const myLanguage[18][223] PROGMEM = { "Impostazioni FM", // 181 *** "Impostazioni AM", // 182 *** "Connettività", // 183 *** - "PREMI MODO PER CONFERMARE", // 184 *** + "PREMI MODO PER RITORNARE”, // 184 *** "CoChannelDet AM", // 185 "Sensibilità CoChannelDet", // 186 "Soglia CoChannelDet AM", // 187 @@ -3136,24 +3136,24 @@ static const char* const myLanguage[18][223] PROGMEM = { "Tutto", // 202 *** "PS veloce", // 203 *** "Default", // 204 - "Mute screen on\nXDRGTK connection", // 205 - "FMSI stereo\nimprovement", // 206 - "Function only available\non TEF6687/6689!", // 207 - "Function not available\non selected skin!", // 208 - "Begin scanning\nmemory channels", // 209 - "Stop scanning\nmemory channels", // 210 - "Wait time", // 211 - "Start DX scanning", // 212 - "FM DX Options", // 213 - "Abort! The start channel\nis marked as skipped.", // 214 + “Spegni schermo se\nconnesso a XDRGTK", // 205 + "FMSI miglioramento\nsuono stereofonico”, // 206 + "Funzione disponibile\nsolo su TEF6687/6689!", // 207 + "Funzione non disponibile\nsulla skin selezionata!”, // 208 + “Avvio scansione\ncanali in memoria”, // 209 + “Fine scansione\ncanali in memoria", // 210 + “Tempo di attesa“, // 211 + “Avvio scansione DX", // 212 + “Opzioni FM DX", // 213 + “Interrotto! Il canale di avvio\nviene saltato.”, // 214 "Autoordinamento AF", // 215 - "Memory channels", // 216 - "Exclude", // 217 - "Only", // 218 - "Auto cancel scan", // 219 - "Correct PI", // 220 - "Signal", // 221 - "Mute audio\nwhile scanning" // 222 + “Canali di memoria“, // 216 + "Escludere”, // 217 + “Solamente”, // 218 + “Fine scansione automatica“, // 219 + "PI corretto”, // 220 + "Signale”, // 221 + “Audio silenziato\ndurante scansione” // 222 }, { "Simplified Chinese", // Simplified Chinese From 567c7b1b8f6d313dbe491da96560174ad94ef59a Mon Sep 17 00:00:00 2001 From: ohmytime Date: Sun, 5 May 2024 14:19:29 +0800 Subject: [PATCH 2/6] Fix wrong punctuation --- src/language.h | 66 +++++++++++++++++++++++++------------------------- 1 file changed, 33 insertions(+), 33 deletions(-) diff --git a/src/language.h b/src/language.h index 6a73fd6..105b63d 100644 --- a/src/language.h +++ b/src/language.h @@ -2953,22 +2953,22 @@ static const char* const myLanguage[18][223] PROGMEM = { "Contrasto: ", // 19 "Imposta volume", // 20 "Offset conversione", // 21 - “Limite di banda inferiore”, // 22 - “Limite di banda superiore”, // 23 - “Offset di livello", // 24 - “Soglia separazione stereo", // 25 - “Frequenza taglio alti", // 26 - “Soglia taglio alti", // 27 - “Soglia di livello basso", // 28 - “Luminosità schermo”, // 29 + "Limite di banda inferiore", // 22 + "Limite di banda superiore", // 23 + "Offset di livello", // 24 + "Soglia separazione stereo", // 25 + "Frequenza taglio alti", // 26 + "Soglia taglio alti", // 27 + "Soglia di livello basso", // 28 + "Luminosità schermo", // 29 "Off", // 30 *** "Schermo disattivato!", // 31 "Deseleziona box RF+ per audio", // 32 "OFF", // 33 *** "SCANSIONE...", // 34 "Ricevitore non rilevato", // 35 - “Guadagno antenna AM", // 36 - “AGC FM", // 37 + "Guadagno antenna AM", // 36 + "AGC FM", // 37 "Mostra errori RDS", // 38 "Lingua", // 39 "Scegli la lingua", // 40 @@ -2987,13 +2987,13 @@ static const char* const myLanguage[18][223] PROGMEM = { "Connetti a: ", // 53 "per configurare il Wi-Fi", // 54 "Connessione al Wi-Fi", // 55 - "NON RIUSCITA!”, // 56 + "NON RIUSCITA!", // 56 "CONNESSO!", // 57 "IP per StationList", // 58 - "Mostra banda SW in m.“, // 59 + "Mostra banda SW in m.", // 59 "Filtro RDS", // 60 "Mostra errori PI", // 61 - “Utilizzare squelch", // 62 + "Utilizzare squelch", // 62 "Meter di modulazione", // 63 "Soppressione rumore AM", // 64 "Soppressione rumore FM", // 65 @@ -3014,9 +3014,9 @@ static const char* const myLanguage[18][223] PROGMEM = { "Min.", // 80 *** "Velocità SPI Dinamico", // 81 *** "Sensibilità scansione", // 82 - “ASSENTE”, // 83 - “Versione Software", // 84 - “Font frequenza”, // 85 *** + "ASSENTE", // 83 + "Versione Software", // 84 + "Font frequenza", // 85 *** "Auto", // 86 "AF non disponibile", // 87 "EON non disponibile", // 88 @@ -3115,7 +3115,7 @@ static const char* const myLanguage[18][223] PROGMEM = { "Impostazioni FM", // 181 *** "Impostazioni AM", // 182 *** "Connettività", // 183 *** - "PREMI MODO PER RITORNARE”, // 184 *** + "PREMI MODO PER RITORNARE", // 184 *** "CoChannelDet AM", // 185 "Sensibilità CoChannelDet", // 186 "Soglia CoChannelDet AM", // 187 @@ -3136,24 +3136,24 @@ static const char* const myLanguage[18][223] PROGMEM = { "Tutto", // 202 *** "PS veloce", // 203 *** "Default", // 204 - “Spegni schermo se\nconnesso a XDRGTK", // 205 - "FMSI miglioramento\nsuono stereofonico”, // 206 + "Spegni schermo se\nconnesso a XDRGTK", // 205 + "FMSI miglioramento\nsuono stereofonico", // 206 "Funzione disponibile\nsolo su TEF6687/6689!", // 207 - "Funzione non disponibile\nsulla skin selezionata!”, // 208 - “Avvio scansione\ncanali in memoria”, // 209 - “Fine scansione\ncanali in memoria", // 210 - “Tempo di attesa“, // 211 - “Avvio scansione DX", // 212 - “Opzioni FM DX", // 213 - “Interrotto! Il canale di avvio\nviene saltato.”, // 214 + "Funzione non disponibile\nsulla skin selezionata!", // 208 + "Avvio scansione\ncanali in memoria", // 209 + "Fine scansione\ncanali in memoria", // 210 + "Tempo di attesa", // 211 + "Avvio scansione DX", // 212 + "Opzioni FM DX", // 213 + "Interrotto! Il canale di avvio\nviene saltato.", // 214 "Autoordinamento AF", // 215 - “Canali di memoria“, // 216 - "Escludere”, // 217 - “Solamente”, // 218 - “Fine scansione automatica“, // 219 - "PI corretto”, // 220 - "Signale”, // 221 - “Audio silenziato\ndurante scansione” // 222 + "Canali di memoria", // 216 + "Escludere", // 217 + "Solamente", // 218 + "Fine scansione automatica", // 219 + "PI corretto", // 220 + "Signale", // 221 + "Audio silenziato\ndurante scansione" // 222 }, { "Simplified Chinese", // Simplified Chinese From c48c413f0a65a2d54a40d31834045c5d247c804e Mon Sep 17 00:00:00 2001 From: leryfm <150333458+leryfm@users.noreply.github.com> Date: Sun, 5 May 2024 11:43:47 +0300 Subject: [PATCH 3/6] Update russian language.h translated and updated new lines --- src/language.h | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/src/language.h b/src/language.h index 105b63d..125dc9d 100644 --- a/src/language.h +++ b/src/language.h @@ -2686,24 +2686,24 @@ static const char* const myLanguage[18][223] PROGMEM = { "Все", // 202 "Быстрый PS", // 203 "По умолчанию", // 204 - "Погасить дисплей при\nподключении XDRGTK", // 205 + "Гасить дисплей при\nработе с XDRGTK", // 205 "FMSI стерео\nулучшение", // 206 - "Функция доступна только\nна TEF6687/6689!", // 207 + "Доступно только\nна TEF6687/6689", // 207 "Функция недоступна\nна этом оформлении", // 208 - "Begin scanning\nmemory channels", // 209 - "Stop scanning\nmemory channels", // 210 - "Wait time", // 211 - "Start DX scanning", // 212 - "FM DX Options", // 213 - "Abort! The start channel\nis marked as skipped.", // 214 + "Стартовый канал\nпамяти", // 209 + "Конечный канал\nпамяти", // 210 + "Время ожидания", // 211 + "Начать DX-сканирование", // 212 + "Настройки FM DX сканера", // 213 + "Прервано! Стартовый канал\nпомечен для пропуска.", // 214 "Сортировка AF-частот", // 215 - "Memory channels", // 216 - "Exclude", // 217 - "Only", // 218 - "Auto cancel scan", // 219 - "Correct PI", // 220 - "Signal", // 221 - "Mute audio\nwhile scanning" // 222 + "Логика работы с \nканалами памяти", // 216 + "Кроме", // 217 + "Только", // 218 + "Автоматическая отмена \nсканирования", // 219 + "При корректном PI", // 220 + "При наличии сигнала", // 221 + "Отключать аудио\nпри сканировании" // 222 }, { "Українська", // Ukranian From fa30f90cf4487d4c9884cb4004f750f4800c52db Mon Sep 17 00:00:00 2001 From: ohmytime Date: Sun, 5 May 2024 17:18:20 +0800 Subject: [PATCH 4/6] Air Band support [ongoing] --- TEF6686_ESP32.ino | 321 +++++++++++++++++++++++++++++++++++++++++----- src/TEF6686.cpp | 12 +- src/TEF6686.h | 1 + src/config.h | 9 ++ src/constants.h | 35 ++++- src/gui.cpp | 108 +++++++++++++++- src/language.h | 56 +++++--- 7 files changed, 478 insertions(+), 64 deletions(-) create mode 100644 src/config.h diff --git a/TEF6686_ESP32.ino b/TEF6686_ESP32.ino index 2baeddb..8d76872 100644 --- a/TEF6686_ESP32.ino +++ b/TEF6686_ESP32.ino @@ -17,6 +17,7 @@ #include "src/FREQFONT.h" #include "src/TEF6686.h" #include "src/constants.h" +#include "src/config.h" #include "src/language.h" #include "src/gui.h" #include "src/comms.h" @@ -34,7 +35,6 @@ #define STANDBYLED 19 #define SMETERPIN 27 -// #define CHINA_PORTABLE // uncomment for China Portable build (Simplified Chinese) #define DYNAMIC_SPI_SPEED // uncomment to enable dynamic SPI Speed https://github.com/ohmytime/TFT_eSPI_DynamicSpeed #ifdef ARS @@ -82,6 +82,9 @@ bool memtune; bool menu; bool menuopen; bool mwstepsize; +#ifdef HAS_AIR_BAND +bool airstepsize; +#endif bool nobattery; bool optenc; bool rdsflagreset; @@ -335,6 +338,11 @@ unsigned int frequency_MIBand_75M; unsigned int frequency_MIBand_90M; unsigned int frequency_MW; unsigned int frequency_SW; +#ifdef HAS_AIR_BAND +unsigned int frequency_AIR; +unsigned int AIRHighEdgeSet; +unsigned int AIRLowEdgeSet; +#endif unsigned int frequencyold; unsigned int HighEdgeOIRTSet; unsigned int HighEdgeSet; @@ -445,6 +453,9 @@ void setup() { frequency_LW = EEPROM.readUInt(EE_UINT16_FREQUENCY_LW); frequency_MW = EEPROM.readUInt(EE_UINT16_FREQUENCY_MW); frequency_SW = EEPROM.readUInt(EE_UINT16_FREQUENCY_SW); +#ifdef HAS_AIR_BAND + frequency_AIR = EEPROM.readUInt(EE_UINT16_FREQUENCY_AIR); +#endif XDRGTK_key = EEPROM.readString(EE_STRING_XDRGTK_KEY); usesquelch = EEPROM.readByte(EE_BYTE_USESQUELCH); showmodulation = EEPROM.readByte(EE_BYTE_SHOWMODULATION); @@ -475,6 +486,9 @@ void setup() { radio.rds.fastps = EEPROM.readByte(EE_BYTE_FASTPS); tot = EEPROM.readByte(EE_BYTE_TOT); mwstepsize = EEPROM.readByte(EE_BYTE_MWREGION); +#ifdef HAS_AIR_BAND + airstepsize = EEPROM.readByte(EE_BYTE_AIRSTEPSIZE); +#endif spispeed = EEPROM.readByte(EE_BYTE_SPISPEED); amscansens = EEPROM.readByte(EE_BYTE_AMSCANSENS); fmscansens = EEPROM.readByte(EE_BYTE_FMSCANSENS); @@ -746,12 +760,10 @@ void setup() { radio.setVolume(VolSet); radio.setOffset(LevelOffset); radio.setAMOffset(AMLevelOffset); - - if (band > BAND_GAP) { + if (band > BAND_GAP && band != BAND_AIR) { radio.setAMCoChannel(amcodect, amcodectcount); radio.setAMAttenuation(amgain); } - radio.setStereoLevel(StereoLevel); radio.setHighCutLevel(HighCutLevel); radio.setHighCutOffset(HighCutOffset); @@ -1252,23 +1264,145 @@ void doBandSelectionFM() { } } -void CheckBandForbiddenAM () { +void CheckBandForbiddenAM() { +#ifdef HAS_AIR_BAND switch (band) { case BAND_LW: - if (bandAM == AM_BAND_MW_SW || bandAM == AM_BAND_MW || bandAM == AM_BAND_SW) bandforbidden = 1; else bandforbidden = 0; + if (bandAM == AM_BAND_MW_SW_AIR || bandAM == AM_BAND_MW_SW || bandAM == AM_BAND_MW_AIR || bandAM == AM_BAND_SW_AIR || bandAM == AM_BAND_MW || bandAM == AM_BAND_SW || bandAM == AM_BAND_AIR) + bandforbidden = 1; + else + bandforbidden = 0; break; case BAND_MW: - if (bandAM == AM_BAND_LW_SW || bandAM == AM_BAND_LW || bandAM == AM_BAND_SW) bandforbidden = 1; else bandforbidden = 0; + if (bandAM == AM_BAND_LW_SW_AIR || bandAM == AM_BAND_LW_SW || bandAM == AM_BAND_LW_AIR || bandAM == AM_BAND_SW_AIR || bandAM == AM_BAND_LW || bandAM == AM_BAND_SW || bandAM == AM_BAND_AIR) + bandforbidden = 1; + else + bandforbidden = 0; break; case BAND_SW: - if (bandAM == AM_BAND_LW_MW || bandAM == AM_BAND_LW || bandAM == AM_BAND_MW) bandforbidden = 1; else bandforbidden = 0; + if (bandAM == AM_BAND_LW_MW_AIR || bandAM == AM_BAND_LW_MW || bandAM == AM_BAND_LW_AIR || bandAM == AM_BAND_MW_AIR || bandAM == AM_BAND_LW || bandAM == AM_BAND_MW || bandAM == AM_BAND_AIR) + bandforbidden = 1; + else + bandforbidden = 0; + break; + case BAND_AIR: + if (bandAM == AM_BAND_LW_MW_SW || bandAM == AM_BAND_LW_MW || bandAM == AM_BAND_LW_SW || bandAM == AM_BAND_MW_SW || bandAM == AM_BAND_LW || bandAM == AM_BAND_MW || bandAM == AM_BAND_SW) + bandforbidden = 1; + else + bandforbidden = 0; break; } +#else + switch (band) { + case BAND_LW: + if (bandAM == AM_BAND_MW_SW || bandAM == AM_BAND_MW || bandAM == AM_BAND_SW) bandforbidden = 1; + else bandforbidden = 0; + break; + case BAND_MW: + if (bandAM == AM_BAND_LW_SW || bandAM == AM_BAND_LW || bandAM == AM_BAND_SW) bandforbidden = 1; + else bandforbidden = 0; + break; + case BAND_SW: + if (bandAM == AM_BAND_LW_MW || bandAM == AM_BAND_LW || bandAM == AM_BAND_MW) bandforbidden = 1; + else bandforbidden = 0; + break; + } +#endif } void doBandSelectionAM() { if (band < BAND_GAP) return; +#ifdef HAS_AIR_BAND // has air band + switch (bandAM) { + case AM_BAND_ALL: + break; + case AM_BAND_LW_MW_SW: + if (band == BAND_AIR) { + band = BAND_LW; + SelectBand(); + } + break; + case AM_BAND_LW_MW_AIR: + if (band == BAND_SW) { + band = BAND_LW; + SelectBand(); + } + break; + case AM_BAND_LW_SW_AIR: + if (band == BAND_MW) { + band = BAND_LW; + SelectBand(); + } + break; + case AM_BAND_MW_SW_AIR: + if (band == BAND_LW) { + band = BAND_MW; + SelectBand(); + } + break; + case AM_BAND_LW_MW: + if (band == BAND_SW || band == BAND_AIR) { + band = BAND_LW; + SelectBand(); + } + break; + case AM_BAND_LW_SW: + if (band == BAND_MW || band == BAND_AIR) { + band = BAND_LW; + SelectBand(); + } + break; + case AM_BAND_LW_AIR: + if (band == BAND_MW || band == BAND_SW) { + band = BAND_LW; + SelectBand(); + } + break; + case AM_BAND_MW_SW: + if (band == BAND_LW || band == BAND_AIR) { + band = BAND_MW; + SelectBand(); + } + break; + case AM_BAND_MW_AIR: + if (band == BAND_LW || band == BAND_SW) { + band = BAND_MW; + SelectBand(); + } + break; + case AM_BAND_SW_AIR: + if (band == BAND_LW || band == BAND_MW) { + band = BAND_SW; + SelectBand(); + } + break; + case AM_BAND_LW: + if (band != BAND_LW) { + band = BAND_LW; + SelectBand(); + } + break; + case AM_BAND_MW: + if (band != BAND_MW) { + band = BAND_MW; + SelectBand(); + } + break; + case AM_BAND_SW: + if (band != BAND_SW) { + band = BAND_SW; + SelectBand(); + } + break; + case AM_BAND_AIR: + if (band != BAND_AIR) { + band = BAND_AIR; + SelectBand(); + } + break; + } +#else // has no air band switch (bandAM) { case AM_BAND_ALL: break; @@ -1313,17 +1447,30 @@ void doBandSelectionAM() { SelectBand(); break; } +#endif } void AMjumptoFM() { if (bandFM != FM_BAND_NONE) { if (bandFM == FM_BAND_FM) band = BAND_FM; else band = BAND_OIRT; } else { - // do nothing + FMjumptoAM(); } } void FMjumptoAM() { +#ifdef HAS_AIR_BAND + if (bandAM == AM_BAND_ALL || bandAM == AM_BAND_LW_MW_AIR || bandAM == AM_BAND_LW_SW_AIR || bandAM == AM_BAND_LW_MW || bandAM == AM_BAND_LW_SW || bandAM == AM_BAND_LW_AIR || bandAM == AM_BAND_LW) { + band = BAND_LW; + if (stepsize > 3) stepsize = 3; + } else if (bandAM == AM_BAND_MW_SW || bandAM == AM_BAND_MW_AIR || bandAM == AM_BAND_MW) { + band = BAND_MW; + } else if (bandAM == AM_BAND_SW_AIR || bandAM == AM_BAND_SW) { + band = BAND_SW; + } else if (bandAM == AM_BAND_AIR) { + band = BAND_AIR; + } +#else if (bandAM == AM_BAND_ALL || bandAM == AM_BAND_LW_MW || bandAM == AM_BAND_LW_SW || bandAM == AM_BAND_LW) { band = BAND_LW; if (stepsize > 3) stepsize = 3; @@ -1332,10 +1479,43 @@ void FMjumptoAM() { } else if (bandAM == AM_BAND_SW) { band = BAND_SW; } +#endif } void ToggleBand(byte nowBand) { switch (nowBand) { +#ifdef HAS_AIR_BAND + case BAND_LW: + if (bandAM == AM_BAND_LW_MW_SW || bandAM == AM_BAND_LW_MW_AIR || bandAM == AM_BAND_LW_MW || bandAM == AM_BAND_ALL) { + band = BAND_MW; + } else if (bandAM == AM_BAND_LW_SW_AIR || bandAM == AM_BAND_LW_SW) { + band = BAND_SW; + } else if (bandAM == AM_BAND_LW_MW_AIR || bandAM == AM_BAND_LW_SW_AIR || bandAM == AM_BAND_LW_AIR) { + band = BAND_AIR; + } else if (bandAM == AM_BAND_LW || bandAM == AM_BAND_NONE) { + AMjumptoFM(); + } + break; + case BAND_MW: + if (bandAM == AM_BAND_LW_MW_SW || bandAM == AM_BAND_MW_SW_AIR || bandAM == AM_BAND_MW_SW || bandAM == AM_BAND_ALL) { + band = BAND_SW; + } else if (bandAM == AM_BAND_LW_MW_AIR || bandAM == AM_BAND_MW_AIR) { + band = BAND_AIR; + } else if (bandAM == AM_BAND_MW || bandAM == AM_BAND_NONE) { + AMjumptoFM(); + } + break; + case BAND_SW: + if (bandAM == AM_BAND_LW_SW_AIR || bandAM == AM_BAND_MW_SW_AIR || bandAM == AM_BAND_SW_AIR || bandAM == AM_BAND_ALL) { + band = BAND_AIR; + } else if (bandAM == AM_BAND_LW_MW_SW || bandAM == AM_BAND_LW_SW || bandAM == AM_BAND_MW_SW || bandAM == AM_BAND_SW || bandAM == AM_BAND_NONE) { + AMjumptoFM(); + } + break; + case BAND_AIR: + AMjumptoFM(); + break; +#else // has no air band case BAND_LW: if (bandAM == AM_BAND_LW_MW || bandAM == AM_BAND_ALL) { band = BAND_MW; @@ -1360,8 +1540,9 @@ void ToggleBand(byte nowBand) { break; case BAND_SW: if (bandFM != FM_BAND_NONE) { - if (bandFM == FM_BAND_FM) band = BAND_FM; else band = BAND_OIRT; - } else { + if (bandFM == FM_BAND_FM) band = BAND_FM; + else band = BAND_OIRT; + } else { // FM be disabled if (bandAM == AM_BAND_LW_SW || bandAM == AM_BAND_ALL) { band = BAND_LW; } else if (bandAM == AM_BAND_MW_SW) { @@ -1371,6 +1552,7 @@ void ToggleBand(byte nowBand) { } } break; +#endif case BAND_OIRT: if (bandFM == FM_BAND_ALL || bandFM == FM_BAND_FM) { band = BAND_FM; @@ -1472,10 +1654,13 @@ void StoreFrequency() { EEPROM.writeUInt(EE_UINT16_FREQUENCY_LW, frequency_LW); EEPROM.writeUInt(EE_UINT16_FREQUENCY_MW, frequency_MW); EEPROM.writeUInt(EE_UINT16_FREQUENCY_SW, frequency_SW); +#ifdef HAS_AIR_BAND + EEPROM.writeUInt(EE_UINT16_FREQUENCY_AIR, frequency_AIR); +#endif EEPROM.commit(); } -void LimitAMFrequency() { +void LimitAMFrequency() {//todo air switch (band) { case BAND_LW: frequency_AM = frequency_LW; @@ -1853,10 +2038,23 @@ void SelectBand() { case BAND_LW: freqold = frequency_LW; frequency_AM = frequency_LW; break; case BAND_MW: freqold = frequency_MW; frequency_AM = frequency_MW; break; case BAND_SW: freqold = frequency_SW; frequency_AM = frequency_SW; break; +#ifdef HAS_AIR_BAND + case BAND_AIR: freqold = frequency_AIR; frequency_AM = frequency_AIR;break; +#endif } LimitAMFrequency(); if (!externaltune) CheckBandForbiddenAM(); +#ifdef HAS_AIR_BAND + if (band == BAND_AIR) { + radio.SetFreqAIR(10700); + log_d("BAND SELECT -> 航空的频率: %d",frequency_AIR); + } else { + radio.SetFreqAM(frequency_AM); + } +#else radio.SetFreqAM(frequency_AM); +#endif + log_d("BAND SELECT -> 现在的频率: %d",frequency_AM); radio.setAMAttenuation(amgain); radio.setAMCoChannel(amcodect, amcodectcount); doBW(); @@ -1876,7 +2074,11 @@ void SelectBand() { tftPrint(0, "iMS", 265, 59, GreyoutColor, BackgroundColor, 16); tft.drawRoundRect(286, 56, 32, 20, 5, GreyoutColor); tftPrint(0, "EQ", 303, 59, GreyoutColor, BackgroundColor, 16); + // todo + // if (band == AM_BAND_AIR) tftPrint(-1, "MHz", 258, 76, ActiveColor, ActiveColorSmooth, 28); + // else tftPrint(-1, "KHz", 258, 76, ActiveColor, ActiveColorSmooth, 28); } + log_d("BAND SELECT -> 现在的波段: %d",band); } else { if (tunemode == TUNE_MI_BAND) tunemode = TUNE_MAN; radio.power(0); @@ -2111,7 +2313,7 @@ void Round5K(unsigned int freqAM) { } } -void RoundStep() { +void RoundStep() {//todo air if (band == BAND_FM) { unsigned int freq = frequency; switch (fmdefaultstepsize) { @@ -2166,7 +2368,7 @@ void ButtonPress() { EEPROM.writeByte(memorypos + EE_PRESETS_BAND_START, band); EEPROM.writeByte(memorypos + EE_PRESET_BW_START, BWset); EEPROM.writeByte(memorypos + EE_PRESET_MS_START, StereoToggle); - if (band == BAND_FM) { + if (band == BAND_FM) {//todo air EEPROM.writeUInt((memorypos * 4) + EE_PRESETS_FREQUENCY_START, frequency); } else if (band == BAND_OIRT) { EEPROM.writeUInt((memorypos * 4) + EE_PRESETS_FREQUENCY_START, frequency_OIRT); @@ -2200,7 +2402,7 @@ void ButtonPress() { EEPROM.commit(); - if (band == BAND_FM) { + if (band == BAND_FM) {//todo air presets[memorypos].frequency = frequency; } else if (band == BAND_OIRT) { presets[memorypos].frequency = frequency_OIRT; @@ -2506,22 +2708,36 @@ void DoMemoryPosTune() { band = presets[memorypos].band; } - if (band == BAND_FM) { - frequency = presets[memorypos].frequency; - radio.SetFreq(frequency); - } else if (band == BAND_OIRT) { - frequency_OIRT = presets[memorypos].frequency; - radio.SetFreq(frequency_OIRT); - } else if (band == BAND_LW) { - frequency_LW = presets[memorypos].frequency; - radio.SetFreqAM(frequency_LW); - } else if (band == BAND_MW) { - frequency_MW = presets[memorypos].frequency; - radio.SetFreqAM(frequency_MW); - } else if (band == BAND_SW) { - frequency_SW = presets[memorypos].frequency; - radio.SetFreqAM(frequency_SW); + switch (band) { + case BAND_FM: + frequency = presets[memorypos].frequency; + radio.SetFreq(frequency); + break; + case BAND_OIRT: + frequency = presets[memorypos].frequency; + radio.SetFreq(frequency_OIRT); + break; + case BAND_LW: + frequency = presets[memorypos].frequency; + radio.SetFreq(frequency_LW); + break; + case BAND_MW: + frequency = presets[memorypos].frequency; + radio.SetFreq(frequency_MW); + break; + case BAND_SW: + frequency = presets[memorypos].frequency; + radio.SetFreq(frequency_SW); + break; +#ifdef HAS_AIR_BAND + case BAND_AIR: + frequency = presets[memorypos].frequency; + // radio.SetFreq(frequency_AIR); // todo + radio.SetFreqAM(10700); // todo + break; +#endif } + ShowFreq(0); if (band == BAND_FM || band == BAND_OIRT) { @@ -2593,6 +2809,9 @@ void ShowFreq(int mode) { case BAND_LW: frequency_AM = frequency_LW; break; case BAND_MW: frequency_AM = frequency_MW; break; case BAND_SW: frequency_AM = frequency_SW; break; +#ifdef HAS_AIR_BAND + case BAND_AIR: frequency_AM = frequency_AIR; break; // todo air +#endif } if (!screenmute) { @@ -2609,7 +2828,11 @@ void ShowFreq(int mode) { FrequencySprite.setTextDatum(TR_DATUM); FrequencySprite.setTextColor(FreqColor, FreqColorSmooth, false); - FrequencySprite.drawString(String(frequency_AM) + " ", 218, -6); + if (band == BAND_AIR) { + FrequencySprite.drawString(String(frequency_AM / 1000) + "." + String(frequency_AM % 1000) + " ", 218, -6); + } else { + FrequencySprite.drawString(String(frequency_AM) + " ", 218, -6); + } FrequencySprite.unloadFont(); FrequencySprite.setTextColor(PrimaryColor, PrimaryColorSmooth, false); FrequencySprite.setTextDatum(TL_DATUM); @@ -3071,7 +3294,7 @@ void doSquelch() { SquelchSprite.unloadFont(); } -void updateBW() { +void updateBW() {//todo air if (BWset == 0) { if (!screenmute && !advancedRDS && !afscreen) { tft.drawRoundRect(248, 35, 71, 20, 5, ActiveColor); @@ -3123,7 +3346,8 @@ void updateEQ() { } void updateCodetect() { - if (band > BAND_GAP) { + if ( + band > BAND_GAP && band != BAND_AIR) { if (WAM) { tftPrint(-1, "CO", 50, 61, PrimaryColor, PrimaryColorSmooth, 16); } else { @@ -3433,10 +3657,18 @@ void TuneUp() { } else if (frequency_AM < MWLowEdgeSet) { temp = FREQ_MW_STEP_9K; frequency_AM = (frequency_AM / FREQ_MW_STEP_9K) * FREQ_MW_STEP_9K; - } else { + } else if (frequency_AM < SWHighEdgeSet && frequency_AM > SWLowEdgeSet) { temp = FREQ_SW_STEP_5K; frequency_AM = (frequency_AM / FREQ_SW_STEP_5K) * FREQ_SW_STEP_5K; } +#ifdef HAS_AIR_BAND + else if (frequency_AM < AIRHighEdgeSet && frequency_AM > AIRLowEdgeSet) { + + if (airstepsize == 0) temp = FREQ_AIR_STEP_25K; + else temp = FREQ_AIR_STEP_8K33; + log_d("tune up airband stepsize = %d",airstepsize); + } +#endif } else { if (band == BAND_OIRT) { temp = FREQ_OIRT_STEP_30K; @@ -3501,6 +3733,18 @@ void TuneUp() { radio.SetFreqAM(frequency_AM); frequency_SW = frequency_AM; } +#ifdef HAS_AIR_BAND + else if (band == BAND_AIR) { + log_d("tune up airband = %d",frequency_AM); + frequency_AM += temp; + if (frequency_AIR > AIRHighEdgeSet) { + frequency_AM = AIRLowEdgeSet; + if (edgebeep) EdgeBeeper(); + } + radio.SetFreqAM(frequency_AM); + frequency_AIR = frequency_AM; + } +#endif radio.clearRDS(fullsearchrds); if (RDSSPYUSB) Serial.print("G:\r\nRESET-------\r\n\r\n"); if (RDSSPYTCP) RemoteClient.print("G:\r\nRESET-------\r\n\r\n"); @@ -3759,6 +4003,9 @@ void DefaultSettings(byte userhardwaremodel) { if (userhardwaremodel == BASE_ILI9341) EEPROM.writeUInt(EE_UINT16_FREQUENCY_LW, 180); else EEPROM.writeUInt(EE_UINT16_FREQUENCY_LW, 164); if (userhardwaremodel == BASE_ILI9341) EEPROM.writeUInt(EE_UINT16_FREQUENCY_MW, 540); else EEPROM.writeUInt(EE_UINT16_FREQUENCY_MW, 639); if (userhardwaremodel == BASE_ILI9341) EEPROM.writeUInt(EE_UINT16_FREQUENCY_SW, 1800); else EEPROM.writeUInt(EE_UINT16_FREQUENCY_SW, 5000); +#ifdef HAS_AIR_BAND + EEPROM.writeUInt(EE_UINT16_FREQUENCY_AIR, 135350); +#endif EEPROM.writeString(EE_STRING_XDRGTK_KEY, "password"); if (userhardwaremodel == BASE_ILI9341) EEPROM.writeByte(EE_BYTE_USESQUELCH, 1); else EEPROM.writeByte(EE_BYTE_USESQUELCH, 0); EEPROM.writeByte(EE_BYTE_SHOWMODULATION, 1); @@ -3790,6 +4037,9 @@ void DefaultSettings(byte userhardwaremodel) { EEPROM.writeByte(EE_BYTE_FASTPS, 1); EEPROM.writeByte(EE_BYTE_TOT, 0); EEPROM.writeByte(EE_BYTE_MWREGION, 0); +#ifdef HAS_AIR_BAND + EEPROM.writeByte(EE_BYTE_AIRSTEPSIZE, 0); +#endif EEPROM.writeByte(EE_BYTE_SPISPEED, 0); EEPROM.writeByte(EE_BYTE_AMSCANSENS, 4); EEPROM.writeByte(EE_BYTE_FMSCANSENS, 4); @@ -4016,6 +4266,9 @@ void endMenu() { EEPROM.writeByte(EE_BYTE_FASTPS, radio.rds.fastps); EEPROM.writeByte(EE_BYTE_TOT, tot); EEPROM.writeByte(EE_BYTE_MWREGION, mwstepsize); +#ifdef HAS_AIR_BAND + EEPROM.writeByte(EE_BYTE_AIRSTEPSIZE, airstepsize); +#endif EEPROM.writeByte(EE_BYTE_SPISPEED, spispeed); EEPROM.writeByte(EE_BYTE_AMSCANSENS, amscansens); EEPROM.writeByte(EE_BYTE_FMSCANSENS, fmscansens); diff --git a/src/TEF6686.cpp b/src/TEF6686.cpp index 1327463..2a084dd 100644 --- a/src/TEF6686.cpp +++ b/src/TEF6686.cpp @@ -135,16 +135,16 @@ void TEF6686::init(byte TEF) { if (xtalADC < XTAL_0V_ADC + XTAL_ADC_TOL) { Tuner_Init(tuner_init_tab9216); - log_v("XTAL : 9.216M"); + log_d("TEF668X XTAL : 9.216M"); } else if (xtalADC > XTAL_1V_ADC - XTAL_ADC_TOL && xtalADC < XTAL_1V_ADC + XTAL_ADC_TOL) { Tuner_Init(tuner_init_tab12000); - log_v("XTAL : 12M"); + log_d("TEF668X XTAL : 12M"); } else if (xtalADC > XTAL_2V_ADC - XTAL_ADC_TOL && xtalADC < XTAL_2V_ADC + XTAL_ADC_TOL) { Tuner_Init(tuner_init_tab55000); - log_v("XTAL : 55M"); + log_d("TEF668X XTAL : 55M"); } else { Tuner_Init(tuner_init_tab4000); - log_v("XTAL : 4M"); + log_d("TEF668X XTAL : 4M"); } power(1); Tuner_Init(tuner_init_tab); @@ -178,6 +178,10 @@ void TEF6686::SetFreqAM(uint16_t frequency) { devTEF_Radio_Tune_AM (frequency); } +void TEF6686::SetFreqAIR(uint16_t frequency) { + devTEF_Radio_Tune_AM (10700); +} + void TEF6686::setOffset(int8_t offset) { devTEF_Radio_Set_LevelOffset(offset * 10); } diff --git a/src/TEF6686.h b/src/TEF6686.h index ec33c13..2d461ef 100644 --- a/src/TEF6686.h +++ b/src/TEF6686.h @@ -660,6 +660,7 @@ class TEF6686 { void readRDS(byte showrdserrors); void SetFreq(uint16_t frequency); void SetFreqAM(uint16_t frequency); + void SetFreqAIR(uint16_t frequency); bool getProcessing(uint16_t &highcut, uint16_t &stereo, uint16_t &sthiblend, uint8_t &stband_1, uint8_t &stband_2, uint8_t &stband_3, uint8_t &stband_4); bool getStatus(int16_t &level, uint16_t &USN, uint16_t &WAM, int16_t &offset, uint16_t &bandwidth, uint16_t &modulation, int8_t &snr); bool getStatusAM(int16_t &level, uint16_t &noise, uint16_t &cochannel, int16_t &offset, uint16_t &bandwidth, uint16_t &modulation, int8_t &snr); diff --git a/src/config.h b/src/config.h new file mode 100644 index 0000000..53da484 --- /dev/null +++ b/src/config.h @@ -0,0 +1,9 @@ +#ifndef CONFIG_H +#define CONFIG_H + +#include + +// #define HAS_AIR_BAND // uncomment to enable Air Band(Make sure you have Air Band extend board) +#define CHINA_PORTABLE // uncomment for China Portable build (Simplified Chinese) + +#endif \ No newline at end of file diff --git a/src/constants.h b/src/constants.h index 43c9266..cfd6202 100644 --- a/src/constants.h +++ b/src/constants.h @@ -1,3 +1,5 @@ +#include "config.h" + #define ON 1 #define OFF 0 #define REVERSE false @@ -33,6 +35,10 @@ #define FREQ_MW_STEP_9K 9 #define FREQ_MW_STEP_10K 10 #define FREQ_SW_STEP_5K 5 +#ifdef HAS_AIR_BAND +#define FREQ_AIR_STEP_25K 25 +#define FREQ_AIR_STEP_8K33 8.33 +#endif #define FREQ_OIRT_STEP_30K 3 #define FREQ_FM_STEP_50K 5 #define FREQ_FM_STEP_100K 10 @@ -48,6 +54,10 @@ #define FREQ_SW_LOW_EDGE_MAX (FREQ_SW_160M_START) #define FREQ_SW_HIGH_EDGE_MIN (FREQ_SW_11M_END) #define FREQ_SW_HIGH_EDGE_MAX (FREQ_SW_END) +#ifdef HAS_AIR_BAND +#define FREQ_AIR_LOW_EDGE_MIN 108000 +#define FREQ_AIR_HIGH_EDGE_MIN 137000 +#endif #define FREQ_FM_START 65000 #define FREQ_FM_END 108000 #define FREQ_FM_OIRT_START 6500 // use values of 1/10 * kHz @@ -196,9 +206,13 @@ // EEPROM index defines #define EE_PRESETS_CNT 99 // When set > 99 change the complete EEPROM adressing! -#define EE_CHECKBYTE_VALUE 7 // 0 ~ 255,add new entry, change for new value +#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 2219 // Total occupied eeprom bytes +#else #define EE_TOTAL_CNT 2214 // Total occupied eeprom bytes +#endif #define EE_PRESETS_BAND_START 0 // 99 * 1 byte #define EE_PRESET_BW_START 99 // 99 * 1 byte @@ -296,6 +310,10 @@ #define EE_BYTE_SCANMEM 2211 #define EE_BYTE_SCANCANCEL 2212 #define EE_BYTE_SCANMUTE 2213 +#ifdef HAS_AIR_BAND +#define EE_BYTE_AIRSTEPSIZE 2114 +#define EE_UINT16_FREQUENCY_AIR 2215 +#endif // End of EEPROM index defines static const char* const unitString[] = {"dBμV", "dBf", "dBm"}; @@ -319,15 +337,28 @@ enum SCAN_CANCEL { // 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 + BAND_OIRT = 0, BAND_FM, BAND_GAP, BAND_LW, BAND_MW, BAND_SW, BAND_AIR }; +#ifndef HAS_AIR_BAND // Toggle: LW -> MW -> SW enum RADIO_AM_BAND_SELECTION { AM_BAND_ALL = 0, AM_BAND_LW_MW, AM_BAND_LW_SW, AM_BAND_MW_SW, AM_BAND_LW, AM_BAND_MW, AM_BAND_SW, AM_BAND_NONE, AM_BAND_CNT }; +#else +// Toggle: LW -> MW -> SW -> AIR +enum RADIO_AM_BAND_SELECTION { + AM_BAND_ALL = 0, + AM_BAND_LW_MW_SW, AM_BAND_LW_MW_AIR, AM_BAND_LW_SW_AIR, AM_BAND_MW_SW_AIR, + AM_BAND_LW_MW, AM_BAND_LW_SW, AM_BAND_LW_AIR, + AM_BAND_MW_SW, AM_BAND_MW_AIR, + AM_BAND_SW_AIR, + AM_BAND_LW, AM_BAND_MW, AM_BAND_SW, AM_BAND_AIR, AM_BAND_NONE, + AM_BAND_CNT +}; +#endif /* end of HAS_AIR_BAND */ // Toggle: OIRT -> FM enum RADIO_FM_BAND_SELECTION { diff --git a/src/gui.cpp b/src/gui.cpp index 52a82cb..d2ed284 100644 --- a/src/gui.cpp +++ b/src/gui.cpp @@ -1,6 +1,7 @@ #include "gui.h" #include "language.h" #include "constants.h" +#include "config.h" #include #include #include @@ -1193,7 +1194,27 @@ void ShowOneLine(byte position, byte item, bool selected) { FullLineSprite.setTextDatum(TR_DATUM); FullLineSprite.setTextColor(PrimaryColor, PrimaryColorSmooth, false); - +#ifdef HAS_AIR_BAND + switch (bandAM) { + case AM_BAND_ALL: FullLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][103] + String(",") + myLanguage[language][104] + String(",") + myLanguage[language][223], 298, 3); break; + case AM_BAND_LW_MW_SW: FullLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][103] + String(",") + myLanguage[language][104], 298, 3); break; + case AM_BAND_LW_MW_AIR: FullLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][103] + String(",") + myLanguage[language][223], 298, 3); break; + case AM_BAND_LW_SW_AIR: FullLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][104] + String(",") + myLanguage[language][223], 298, 3); break; + case AM_BAND_MW_SW_AIR: FullLineSprite.drawString(myLanguage[language][103] + String(",") + myLanguage[language][104] + String(",") + myLanguage[language][223], 298, 3); break; + case AM_BAND_LW_MW: FullLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][103], 298, 3); break; + case AM_BAND_LW_SW: FullLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][104], 298, 3); break; + case AM_BAND_LW_AIR: FullLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][223], 298, 3); break; + case AM_BAND_MW_SW: FullLineSprite.drawString(myLanguage[language][103] + String(",") + myLanguage[language][104], 298, 3); break; + case AM_BAND_MW_AIR: FullLineSprite.drawString(myLanguage[language][103] + String(",") + myLanguage[language][223], 298, 3); break; + case AM_BAND_SW_AIR: FullLineSprite.drawString(myLanguage[language][104] + String(",") + myLanguage[language][223], 298, 3); break; + case AM_BAND_LW: FullLineSprite.drawString(myLanguage[language][102], 298, 3); break; + case AM_BAND_MW: FullLineSprite.drawString(myLanguage[language][103], 298, 3); break; + case AM_BAND_SW: FullLineSprite.drawString(myLanguage[language][104], 298, 3); break; + case AM_BAND_AIR: FullLineSprite.drawString(myLanguage[language][223], 298, 3); break; + case AM_BAND_NONE: FullLineSprite.drawString(myLanguage[language][83], 298, 3); break; + } + break; +#else switch (bandAM) { case AM_BAND_ALL: FullLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][103] + String(",") + myLanguage[language][104], 298, 3); break; case AM_BAND_LW_MW: FullLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][103], 298, 3); break; @@ -1204,7 +1225,8 @@ void ShowOneLine(byte position, byte item, bool selected) { case AM_BAND_SW: FullLineSprite.drawString(myLanguage[language][104], 298, 3); break; case AM_BAND_NONE: FullLineSprite.drawString(myLanguage[language][83], 298, 3); break; } - break; + break; +#endif case DISPLAYSETTINGS: FullLineSprite.setTextDatum(TL_DATUM); @@ -1618,10 +1640,22 @@ void BuildDisplay() { case BAND_LW: tftPrint(-1, myLanguage[language][102], 70, 32, bandColor, PrimaryColorSmooth, 16); break; case BAND_MW: tftPrint(-1, myLanguage[language][103], 70, 32, bandColor, PrimaryColorSmooth, 16); break; case BAND_SW: tftPrint(-1, myLanguage[language][104], 70, 32, bandColor, PrimaryColorSmooth, 16); break; +#ifdef HAS_AIR_BAND + case BAND_AIR: tftPrint(-1, myLanguage[language][223], 70, 32, bandColor, PrimaryColorSmooth, 16); break; +#endif case BAND_FM: tftPrint(-1, myLanguage[language][105], 70, 32, bandColor, PrimaryColorSmooth, 16); break; case BAND_OIRT: tftPrint(-1, myLanguage[language][106], 70, 32, bandColor, PrimaryColorSmooth, 16); break; } - if (band < BAND_GAP) tftPrint(-1, "MHz", 258, 76, ActiveColor, ActiveColorSmooth, 28); else tftPrint(-1, "kHz", 258, 76, ActiveColor, ActiveColorSmooth, 28); + if (band < BAND_GAP) tftPrint(-1, "MHz", 258, 76, ActiveColor, ActiveColorSmooth, 28); + else { +#ifdef HAS_AIR_BAND + if (band == AM_BAND_AIR) + tftPrint(-1, "MHz", 258, 76, ActiveColor, ActiveColorSmooth, 28); + else tftPrint(-1, "KHz", 258, 76, ActiveColor, ActiveColorSmooth, 28); +#else + tftPrint(-1, "KHz", 258, 76, ActiveColor, ActiveColorSmooth, 28); +#endif + } RDSstatusold = false; Stereostatusold = false; @@ -1785,7 +1819,26 @@ void MenuUp() { case ITEM8: bandAM++; if (bandAM > AM_BAND_CNT - 1) bandAM = AM_BAND_ALL; - +#ifdef HAS_AIR_BAND + switch (bandAM) { + case AM_BAND_ALL: OneBigLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][103] + String(",") + myLanguage[language][104]+ String(",") + myLanguage[language][223], 135, 0); break; + case AM_BAND_LW_MW_SW: OneBigLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][103] + String(",") + myLanguage[language][104], 135, 0); break; + case AM_BAND_LW_MW_AIR: OneBigLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][103] + String(",") + myLanguage[language][223], 135, 0); break; + case AM_BAND_LW_SW_AIR: OneBigLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][104] + String(",") + myLanguage[language][223], 135, 0); break; + case AM_BAND_MW_SW_AIR: OneBigLineSprite.drawString(myLanguage[language][103] + String(",") + myLanguage[language][104] + String(",") + myLanguage[language][223], 135, 0); break; + case AM_BAND_LW_MW: OneBigLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][103], 135, 0); break; + case AM_BAND_LW_SW: OneBigLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][104], 135, 0); break; + case AM_BAND_LW_AIR: OneBigLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][223], 135, 0); break; + case AM_BAND_MW_SW: OneBigLineSprite.drawString(myLanguage[language][103] + String(",") + myLanguage[language][104], 135, 0); break; + case AM_BAND_MW_AIR: OneBigLineSprite.drawString(myLanguage[language][103] + String(",") + myLanguage[language][223], 135, 0); break; + case AM_BAND_SW_AIR: OneBigLineSprite.drawString(myLanguage[language][104] + String(",") + myLanguage[language][223], 135, 0); break; + case AM_BAND_LW: OneBigLineSprite.drawString(myLanguage[language][102], 135, 0); break; + case AM_BAND_MW: OneBigLineSprite.drawString(myLanguage[language][103], 135, 0); break; + case AM_BAND_SW: OneBigLineSprite.drawString(myLanguage[language][104], 135, 0); break; + case AM_BAND_AIR: OneBigLineSprite.drawString(myLanguage[language][223], 135, 0); break; + case AM_BAND_NONE: OneBigLineSprite.drawString(myLanguage[language][83], 135, 0); break; + } +#else switch (bandAM) { case AM_BAND_ALL: OneBigLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][103] + String(",") + myLanguage[language][104], 135, 0); break; case AM_BAND_LW_MW: OneBigLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][103], 135, 0); break; @@ -1796,7 +1849,7 @@ void MenuUp() { case AM_BAND_SW: OneBigLineSprite.drawString(myLanguage[language][104], 135, 0); break; case AM_BAND_NONE: OneBigLineSprite.drawString(myLanguage[language][83], 135, 0); break; } - +#endif OneBigLineSprite.pushSprite(24, 118); break; @@ -2589,6 +2642,26 @@ void MenuDown() { bandAM--; if (bandAM > AM_BAND_CNT) bandAM = AM_BAND_NONE; +#ifdef HAS_AIR_BAND + switch (bandAM) { + case AM_BAND_ALL: OneBigLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][103] + String(",") + myLanguage[language][104]+ String(",") + myLanguage[language][223], 135, 0); break; + case AM_BAND_LW_MW_SW: OneBigLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][103] + String(",") + myLanguage[language][104], 135, 0); break; + case AM_BAND_LW_MW_AIR: OneBigLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][103] + String(",") + myLanguage[language][223], 135, 0); break; + case AM_BAND_LW_SW_AIR: OneBigLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][104] + String(",") + myLanguage[language][223], 135, 0); break; + case AM_BAND_MW_SW_AIR: OneBigLineSprite.drawString(myLanguage[language][103] + String(",") + myLanguage[language][104] + String(",") + myLanguage[language][223], 135, 0); break; + case AM_BAND_LW_MW: OneBigLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][103], 135, 0); break; + case AM_BAND_LW_SW: OneBigLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][104], 135, 0); break; + case AM_BAND_LW_AIR: OneBigLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][223], 135, 0); break; + case AM_BAND_MW_SW: OneBigLineSprite.drawString(myLanguage[language][103] + String(",") + myLanguage[language][104], 135, 0); break; + case AM_BAND_MW_AIR: OneBigLineSprite.drawString(myLanguage[language][103] + String(",") + myLanguage[language][223], 135, 0); break; + case AM_BAND_SW_AIR: OneBigLineSprite.drawString(myLanguage[language][104] + String(",") + myLanguage[language][223], 135, 0); break; + case AM_BAND_LW: OneBigLineSprite.drawString(myLanguage[language][102], 135, 0); break; + case AM_BAND_MW: OneBigLineSprite.drawString(myLanguage[language][103], 135, 0); break; + case AM_BAND_SW: OneBigLineSprite.drawString(myLanguage[language][104], 135, 0); break; + case AM_BAND_AIR: OneBigLineSprite.drawString(myLanguage[language][223], 135, 0); break; + case AM_BAND_NONE: OneBigLineSprite.drawString(myLanguage[language][83], 135, 0); break; + } +#else switch (bandAM) { case AM_BAND_ALL: OneBigLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][103] + String(",") + myLanguage[language][104], 135, 0); break; case AM_BAND_LW_MW: OneBigLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][103], 135, 0); break; @@ -2599,6 +2672,8 @@ void MenuDown() { case AM_BAND_SW: OneBigLineSprite.drawString(myLanguage[language][104], 135, 0); break; case AM_BAND_NONE: OneBigLineSprite.drawString(myLanguage[language][83], 135, 0); break; } +#endif + OneBigLineSprite.pushSprite(24, 118); break; @@ -3101,6 +3176,7 @@ void MenuDown() { OneBigLineSprite.drawString((showSWMIBand ? myLanguage[language][42] : myLanguage[language][30]), 135, 0); OneBigLineSprite.pushSprite(24, 118); + break; case ITEM5: @@ -3455,6 +3531,26 @@ void DoMenu() { case ITEM8: Infoboxprint(myLanguage[language][101]); +#ifdef HAS_AIR_BAND + switch (bandAM) { + case AM_BAND_ALL: OneBigLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][103] + String(",") + myLanguage[language][104]+ String(",") + myLanguage[language][223], 135, 0); break; + case AM_BAND_LW_MW_SW: OneBigLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][103] + String(",") + myLanguage[language][104], 135, 0); break; + case AM_BAND_LW_MW_AIR: OneBigLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][103] + String(",") + myLanguage[language][223], 135, 0); break; + case AM_BAND_LW_SW_AIR: OneBigLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][104] + String(",") + myLanguage[language][223], 135, 0); break; + case AM_BAND_MW_SW_AIR: OneBigLineSprite.drawString(myLanguage[language][103] + String(",") + myLanguage[language][104] + String(",") + myLanguage[language][223], 135, 0); break; + case AM_BAND_LW_MW: OneBigLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][103], 135, 0); break; + case AM_BAND_LW_SW: OneBigLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][104], 135, 0); break; + case AM_BAND_LW_AIR: OneBigLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][223], 135, 0); break; + case AM_BAND_MW_SW: OneBigLineSprite.drawString(myLanguage[language][103] + String(",") + myLanguage[language][104], 135, 0); break; + case AM_BAND_MW_AIR: OneBigLineSprite.drawString(myLanguage[language][103] + String(",") + myLanguage[language][223], 135, 0); break; + case AM_BAND_SW_AIR: OneBigLineSprite.drawString(myLanguage[language][104] + String(",") + myLanguage[language][223], 135, 0); break; + case AM_BAND_LW: OneBigLineSprite.drawString(myLanguage[language][102], 135, 0); break; + case AM_BAND_MW: OneBigLineSprite.drawString(myLanguage[language][103], 135, 0); break; + case AM_BAND_SW: OneBigLineSprite.drawString(myLanguage[language][104], 135, 0); break; + case AM_BAND_AIR: OneBigLineSprite.drawString(myLanguage[language][223], 135, 0); break; + case AM_BAND_NONE: OneBigLineSprite.drawString(myLanguage[language][83], 135, 0); break; + } +#else switch (bandAM) { case AM_BAND_ALL: OneBigLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][103] + String(",") + myLanguage[language][104], 135, 0); break; case AM_BAND_LW_MW: OneBigLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][103], 135, 0); break; @@ -3465,6 +3561,8 @@ void DoMenu() { case AM_BAND_SW: OneBigLineSprite.drawString(myLanguage[language][104], 135, 0); break; case AM_BAND_NONE: OneBigLineSprite.drawString(myLanguage[language][83], 135, 0); break; } +#endif + OneBigLineSprite.pushSprite(24, 118); break; diff --git a/src/language.h b/src/language.h index 105b63d..c68b808 100644 --- a/src/language.h +++ b/src/language.h @@ -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][223] PROGMEM = { +static const char* const myLanguage[18][224] PROGMEM = { { "English", // English "Rotary direction changed", // 1 "Please release button", // 2 @@ -228,7 +228,8 @@ static const char* const myLanguage[18][223] PROGMEM = { "Auto cancel scan", // 219 "Correct PI", // 220 "Signal", // 221 - "Mute audio\nwhile scanning" // 222 + "Mute audio\nwhile scanning", // 222 + "AIR" // 223 }, { "Nederlands", // Dutch @@ -453,7 +454,8 @@ static const char* const myLanguage[18][223] PROGMEM = { "Auto afbreken", // 219 "Correcte PI", // 220 "Signaal", // 221 - "Geen geluid\ntijdens scannen" // 222 + "Geen geluid\ntijdens scannen", // 222 + "AIR" // 223 }, { "Polski", // Polish @@ -678,7 +680,8 @@ static const char* const myLanguage[18][223] PROGMEM = { "Automatyczne\nanulowanie skanowania", // 219 "Poprawne PI", // 220 "Sygnał", // 221 - "Wycisz dźwięk\npodczas skanowania" // 222 + "Wycisz dźwięk\npodczas skanowania", // 222 + "AIR" // 223 }, { "Hrvatski", // Croatian @@ -903,7 +906,8 @@ static const char* const myLanguage[18][223] PROGMEM = { "Auto cancel scan", // 219 "Correct PI", // 220 "Signal", // 221 - "Mute audio\nwhile scanning" // 222 + "Mute audio\nwhile scanning", // 222 + "AIR" // 223 }, { "Ελληνικά", // Greek @@ -1128,7 +1132,8 @@ static const char* const myLanguage[18][223] PROGMEM = { "Αυτόματη ακύρωση\nανίχνευσης", // 219 "Σωστό PI", // 220 "Σήμα", // 221 - "Σίγαση ήχου\nκατά την ανίχνευση" // 222 + "Σίγαση ήχου\nκατά την ανίχνευση", // 222 + "AIR" // 223 }, { "Română", // Romanian @@ -1353,7 +1358,8 @@ static const char* const myLanguage[18][223] PROGMEM = { "Auto cancel scan", // 219 "Correct PI", // 220 "Signal", // 221 - "Mute audio\nwhile scanning" // 222 + "Mute audio\nwhile scanning", // 222 + "AIR" // 223 }, { "Deutsch", // German @@ -1578,7 +1584,8 @@ static const char* const myLanguage[18][223] PROGMEM = { "Automatisches Scan-Ende", // 219 "Korrekter PI-Code", // 220 "Signal", // 221 - "Stumm beim Scannen" // 222 + "Stumm beim Scannen", // 222 + "AIR" // 223 }, { "Český", // Czech @@ -1803,7 +1810,8 @@ static const char* const myLanguage[18][223] PROGMEM = { "Auto cancel scan", // 219 "Correct PI", // 220 "Signal", // 221 - "Mute audio\nwhile scanning" // 222 + "Mute audio\nwhile scanning", // 222 + "AIR" // 223 }, { "Slovenský", // Slovak @@ -2028,7 +2036,8 @@ static const char* const myLanguage[18][223] PROGMEM = { "Auto cancel scan", // 219 "Correct PI", // 220 "Signal", // 221 - "Mute audio\nwhile scanning" // 222 + "Mute audio\nwhile scanning", // 222 + "AIR" // 223 }, { "Français", // French @@ -2253,7 +2262,8 @@ static const char* const myLanguage[18][223] PROGMEM = { "Annuler automatiquement", // 219 "PI Correct", // 220 "Signal", // 221 - "Audio muet lors\nde la numérisation" // 222 + "Audio muet lors\nde la numérisation", // 222 + "AIR" // 223 }, { "Български", // Bulgarian @@ -2478,7 +2488,8 @@ static const char* const myLanguage[18][223] PROGMEM = { "Auto cancel scan", // 219 "Correct PI", // 220 "Signal", // 221 - "Mute audio\nwhile scanning" // 222 + "Mute audio\nwhile scanning", // 222 + "AIR" // 223 }, { "Русский", // Russian @@ -2703,7 +2714,8 @@ static const char* const myLanguage[18][223] PROGMEM = { "Auto cancel scan", // 219 "Correct PI", // 220 "Signal", // 221 - "Mute audio\nwhile scanning" // 222 + "Mute audio\nwhile scanning", // 222 + "AIR" // 223 }, { "Українська", // Ukranian @@ -2928,7 +2940,8 @@ static const char* const myLanguage[18][223] PROGMEM = { "Auto cancel scan", // 219 "Correct PI", // 220 "Signal", // 221 - "Mute audio\nwhile scanning" // 222 + "Mute audio\nwhile scanning", // 222 + "AIR" // 223 }, { "Italiano", // Italian @@ -3153,7 +3166,8 @@ static const char* const myLanguage[18][223] PROGMEM = { "Fine scansione automatica", // 219 "PI corretto", // 220 "Signale", // 221 - "Audio silenziato\ndurante scansione" // 222 + "Audio silenziato\ndurante scansione", // 222 + "AIR" // 223 }, { "Simplified Chinese", // Simplified Chinese @@ -3378,7 +3392,8 @@ static const char* const myLanguage[18][223] PROGMEM = { "扫频停台条件", // 219 "节目识别码正确", // 220 "信号超阈值", // 221 - "扫描时静音" // 222 + "扫描时静音", // 222 + "AIR" // 223 }, { "Norsk", // Norwegian @@ -3603,7 +3618,8 @@ static const char* const myLanguage[18][223] PROGMEM = { "Avbryt skanning automatisk", // 219 "korrekt PI", // 220 "Signal", // 221 - "Demp lyden\nmens du skanner" // 222 + "Demp lyden\nmens du skanner", // 222 + "AIR" // 223 }, { "Español", // Spanish @@ -3828,7 +3844,8 @@ static const char* const myLanguage[18][223] PROGMEM = { "Cancelar automáticamente\nla búsqueda", // 219 "PI correcto", // 220 "Señal", // 221 - "Audio mudo\nmientras busca" // 222 + "Audio mudo\nmientras busca", // 222 + "AIR" // 223 }, { "Português", // Portuguese @@ -4053,7 +4070,8 @@ static const char* const myLanguage[18][223] PROGMEM = { "Cancelar automatic.\na pesquisa", // 219 "PI correto", // 220 "Sinal", // 221 - "Mudo áudio\nenquanto procura" // 222 + "Mudo áudio\nenquanto procura", // 222 + "AIR" // 223 } }; #endif From c951a39c4c3a4162241c127f4db945133a91c918 Mon Sep 17 00:00:00 2001 From: Sjef Verhoeven PE5PVB Date: Sun, 5 May 2024 14:47:31 +0200 Subject: [PATCH 5/6] Revert "Merge pull request #549 from ohmytime/Air_Band" This reverts commit a4af8de85ab3dddfdac1a4baade8cc1a7585a346, reversing changes made to dcf7203a7e526de8946718bece93a02976636990. --- TEF6686_ESP32.ino | 321 +++++----------------------------------------- src/TEF6686.cpp | 12 +- src/TEF6686.h | 1 - src/config.h | 9 -- src/constants.h | 35 +---- src/gui.cpp | 108 +--------------- src/language.h | 56 +++----- 7 files changed, 64 insertions(+), 478 deletions(-) delete mode 100644 src/config.h diff --git a/TEF6686_ESP32.ino b/TEF6686_ESP32.ino index 8d76872..2baeddb 100644 --- a/TEF6686_ESP32.ino +++ b/TEF6686_ESP32.ino @@ -17,7 +17,6 @@ #include "src/FREQFONT.h" #include "src/TEF6686.h" #include "src/constants.h" -#include "src/config.h" #include "src/language.h" #include "src/gui.h" #include "src/comms.h" @@ -35,6 +34,7 @@ #define STANDBYLED 19 #define SMETERPIN 27 +// #define CHINA_PORTABLE // uncomment for China Portable build (Simplified Chinese) #define DYNAMIC_SPI_SPEED // uncomment to enable dynamic SPI Speed https://github.com/ohmytime/TFT_eSPI_DynamicSpeed #ifdef ARS @@ -82,9 +82,6 @@ bool memtune; bool menu; bool menuopen; bool mwstepsize; -#ifdef HAS_AIR_BAND -bool airstepsize; -#endif bool nobattery; bool optenc; bool rdsflagreset; @@ -338,11 +335,6 @@ unsigned int frequency_MIBand_75M; unsigned int frequency_MIBand_90M; unsigned int frequency_MW; unsigned int frequency_SW; -#ifdef HAS_AIR_BAND -unsigned int frequency_AIR; -unsigned int AIRHighEdgeSet; -unsigned int AIRLowEdgeSet; -#endif unsigned int frequencyold; unsigned int HighEdgeOIRTSet; unsigned int HighEdgeSet; @@ -453,9 +445,6 @@ void setup() { frequency_LW = EEPROM.readUInt(EE_UINT16_FREQUENCY_LW); frequency_MW = EEPROM.readUInt(EE_UINT16_FREQUENCY_MW); frequency_SW = EEPROM.readUInt(EE_UINT16_FREQUENCY_SW); -#ifdef HAS_AIR_BAND - frequency_AIR = EEPROM.readUInt(EE_UINT16_FREQUENCY_AIR); -#endif XDRGTK_key = EEPROM.readString(EE_STRING_XDRGTK_KEY); usesquelch = EEPROM.readByte(EE_BYTE_USESQUELCH); showmodulation = EEPROM.readByte(EE_BYTE_SHOWMODULATION); @@ -486,9 +475,6 @@ void setup() { radio.rds.fastps = EEPROM.readByte(EE_BYTE_FASTPS); tot = EEPROM.readByte(EE_BYTE_TOT); mwstepsize = EEPROM.readByte(EE_BYTE_MWREGION); -#ifdef HAS_AIR_BAND - airstepsize = EEPROM.readByte(EE_BYTE_AIRSTEPSIZE); -#endif spispeed = EEPROM.readByte(EE_BYTE_SPISPEED); amscansens = EEPROM.readByte(EE_BYTE_AMSCANSENS); fmscansens = EEPROM.readByte(EE_BYTE_FMSCANSENS); @@ -760,10 +746,12 @@ void setup() { radio.setVolume(VolSet); radio.setOffset(LevelOffset); radio.setAMOffset(AMLevelOffset); - if (band > BAND_GAP && band != BAND_AIR) { + + if (band > BAND_GAP) { radio.setAMCoChannel(amcodect, amcodectcount); radio.setAMAttenuation(amgain); } + radio.setStereoLevel(StereoLevel); radio.setHighCutLevel(HighCutLevel); radio.setHighCutOffset(HighCutOffset); @@ -1264,145 +1252,23 @@ void doBandSelectionFM() { } } -void CheckBandForbiddenAM() { -#ifdef HAS_AIR_BAND +void CheckBandForbiddenAM () { switch (band) { case BAND_LW: - if (bandAM == AM_BAND_MW_SW_AIR || bandAM == AM_BAND_MW_SW || bandAM == AM_BAND_MW_AIR || bandAM == AM_BAND_SW_AIR || bandAM == AM_BAND_MW || bandAM == AM_BAND_SW || bandAM == AM_BAND_AIR) - bandforbidden = 1; - else - bandforbidden = 0; + if (bandAM == AM_BAND_MW_SW || bandAM == AM_BAND_MW || bandAM == AM_BAND_SW) bandforbidden = 1; else bandforbidden = 0; break; case BAND_MW: - if (bandAM == AM_BAND_LW_SW_AIR || bandAM == AM_BAND_LW_SW || bandAM == AM_BAND_LW_AIR || bandAM == AM_BAND_SW_AIR || bandAM == AM_BAND_LW || bandAM == AM_BAND_SW || bandAM == AM_BAND_AIR) - bandforbidden = 1; - else - bandforbidden = 0; + if (bandAM == AM_BAND_LW_SW || bandAM == AM_BAND_LW || bandAM == AM_BAND_SW) bandforbidden = 1; else bandforbidden = 0; break; case BAND_SW: - if (bandAM == AM_BAND_LW_MW_AIR || bandAM == AM_BAND_LW_MW || bandAM == AM_BAND_LW_AIR || bandAM == AM_BAND_MW_AIR || bandAM == AM_BAND_LW || bandAM == AM_BAND_MW || bandAM == AM_BAND_AIR) - bandforbidden = 1; - else - bandforbidden = 0; - break; - case BAND_AIR: - if (bandAM == AM_BAND_LW_MW_SW || bandAM == AM_BAND_LW_MW || bandAM == AM_BAND_LW_SW || bandAM == AM_BAND_MW_SW || bandAM == AM_BAND_LW || bandAM == AM_BAND_MW || bandAM == AM_BAND_SW) - bandforbidden = 1; - else - bandforbidden = 0; + if (bandAM == AM_BAND_LW_MW || bandAM == AM_BAND_LW || bandAM == AM_BAND_MW) bandforbidden = 1; else bandforbidden = 0; break; } -#else - switch (band) { - case BAND_LW: - if (bandAM == AM_BAND_MW_SW || bandAM == AM_BAND_MW || bandAM == AM_BAND_SW) bandforbidden = 1; - else bandforbidden = 0; - break; - case BAND_MW: - if (bandAM == AM_BAND_LW_SW || bandAM == AM_BAND_LW || bandAM == AM_BAND_SW) bandforbidden = 1; - else bandforbidden = 0; - break; - case BAND_SW: - if (bandAM == AM_BAND_LW_MW || bandAM == AM_BAND_LW || bandAM == AM_BAND_MW) bandforbidden = 1; - else bandforbidden = 0; - break; - } -#endif } void doBandSelectionAM() { if (band < BAND_GAP) return; -#ifdef HAS_AIR_BAND // has air band - switch (bandAM) { - case AM_BAND_ALL: - break; - case AM_BAND_LW_MW_SW: - if (band == BAND_AIR) { - band = BAND_LW; - SelectBand(); - } - break; - case AM_BAND_LW_MW_AIR: - if (band == BAND_SW) { - band = BAND_LW; - SelectBand(); - } - break; - case AM_BAND_LW_SW_AIR: - if (band == BAND_MW) { - band = BAND_LW; - SelectBand(); - } - break; - case AM_BAND_MW_SW_AIR: - if (band == BAND_LW) { - band = BAND_MW; - SelectBand(); - } - break; - case AM_BAND_LW_MW: - if (band == BAND_SW || band == BAND_AIR) { - band = BAND_LW; - SelectBand(); - } - break; - case AM_BAND_LW_SW: - if (band == BAND_MW || band == BAND_AIR) { - band = BAND_LW; - SelectBand(); - } - break; - case AM_BAND_LW_AIR: - if (band == BAND_MW || band == BAND_SW) { - band = BAND_LW; - SelectBand(); - } - break; - case AM_BAND_MW_SW: - if (band == BAND_LW || band == BAND_AIR) { - band = BAND_MW; - SelectBand(); - } - break; - case AM_BAND_MW_AIR: - if (band == BAND_LW || band == BAND_SW) { - band = BAND_MW; - SelectBand(); - } - break; - case AM_BAND_SW_AIR: - if (band == BAND_LW || band == BAND_MW) { - band = BAND_SW; - SelectBand(); - } - break; - case AM_BAND_LW: - if (band != BAND_LW) { - band = BAND_LW; - SelectBand(); - } - break; - case AM_BAND_MW: - if (band != BAND_MW) { - band = BAND_MW; - SelectBand(); - } - break; - case AM_BAND_SW: - if (band != BAND_SW) { - band = BAND_SW; - SelectBand(); - } - break; - case AM_BAND_AIR: - if (band != BAND_AIR) { - band = BAND_AIR; - SelectBand(); - } - break; - } -#else // has no air band switch (bandAM) { case AM_BAND_ALL: break; @@ -1447,30 +1313,17 @@ void doBandSelectionAM() { SelectBand(); break; } -#endif } void AMjumptoFM() { if (bandFM != FM_BAND_NONE) { if (bandFM == FM_BAND_FM) band = BAND_FM; else band = BAND_OIRT; } else { - FMjumptoAM(); + // do nothing } } void FMjumptoAM() { -#ifdef HAS_AIR_BAND - if (bandAM == AM_BAND_ALL || bandAM == AM_BAND_LW_MW_AIR || bandAM == AM_BAND_LW_SW_AIR || bandAM == AM_BAND_LW_MW || bandAM == AM_BAND_LW_SW || bandAM == AM_BAND_LW_AIR || bandAM == AM_BAND_LW) { - band = BAND_LW; - if (stepsize > 3) stepsize = 3; - } else if (bandAM == AM_BAND_MW_SW || bandAM == AM_BAND_MW_AIR || bandAM == AM_BAND_MW) { - band = BAND_MW; - } else if (bandAM == AM_BAND_SW_AIR || bandAM == AM_BAND_SW) { - band = BAND_SW; - } else if (bandAM == AM_BAND_AIR) { - band = BAND_AIR; - } -#else if (bandAM == AM_BAND_ALL || bandAM == AM_BAND_LW_MW || bandAM == AM_BAND_LW_SW || bandAM == AM_BAND_LW) { band = BAND_LW; if (stepsize > 3) stepsize = 3; @@ -1479,43 +1332,10 @@ void FMjumptoAM() { } else if (bandAM == AM_BAND_SW) { band = BAND_SW; } -#endif } void ToggleBand(byte nowBand) { switch (nowBand) { -#ifdef HAS_AIR_BAND - case BAND_LW: - if (bandAM == AM_BAND_LW_MW_SW || bandAM == AM_BAND_LW_MW_AIR || bandAM == AM_BAND_LW_MW || bandAM == AM_BAND_ALL) { - band = BAND_MW; - } else if (bandAM == AM_BAND_LW_SW_AIR || bandAM == AM_BAND_LW_SW) { - band = BAND_SW; - } else if (bandAM == AM_BAND_LW_MW_AIR || bandAM == AM_BAND_LW_SW_AIR || bandAM == AM_BAND_LW_AIR) { - band = BAND_AIR; - } else if (bandAM == AM_BAND_LW || bandAM == AM_BAND_NONE) { - AMjumptoFM(); - } - break; - case BAND_MW: - if (bandAM == AM_BAND_LW_MW_SW || bandAM == AM_BAND_MW_SW_AIR || bandAM == AM_BAND_MW_SW || bandAM == AM_BAND_ALL) { - band = BAND_SW; - } else if (bandAM == AM_BAND_LW_MW_AIR || bandAM == AM_BAND_MW_AIR) { - band = BAND_AIR; - } else if (bandAM == AM_BAND_MW || bandAM == AM_BAND_NONE) { - AMjumptoFM(); - } - break; - case BAND_SW: - if (bandAM == AM_BAND_LW_SW_AIR || bandAM == AM_BAND_MW_SW_AIR || bandAM == AM_BAND_SW_AIR || bandAM == AM_BAND_ALL) { - band = BAND_AIR; - } else if (bandAM == AM_BAND_LW_MW_SW || bandAM == AM_BAND_LW_SW || bandAM == AM_BAND_MW_SW || bandAM == AM_BAND_SW || bandAM == AM_BAND_NONE) { - AMjumptoFM(); - } - break; - case BAND_AIR: - AMjumptoFM(); - break; -#else // has no air band case BAND_LW: if (bandAM == AM_BAND_LW_MW || bandAM == AM_BAND_ALL) { band = BAND_MW; @@ -1540,9 +1360,8 @@ void ToggleBand(byte nowBand) { break; case BAND_SW: if (bandFM != FM_BAND_NONE) { - if (bandFM == FM_BAND_FM) band = BAND_FM; - else band = BAND_OIRT; - } else { // FM be disabled + if (bandFM == FM_BAND_FM) band = BAND_FM; else band = BAND_OIRT; + } else { if (bandAM == AM_BAND_LW_SW || bandAM == AM_BAND_ALL) { band = BAND_LW; } else if (bandAM == AM_BAND_MW_SW) { @@ -1552,7 +1371,6 @@ void ToggleBand(byte nowBand) { } } break; -#endif case BAND_OIRT: if (bandFM == FM_BAND_ALL || bandFM == FM_BAND_FM) { band = BAND_FM; @@ -1654,13 +1472,10 @@ void StoreFrequency() { EEPROM.writeUInt(EE_UINT16_FREQUENCY_LW, frequency_LW); EEPROM.writeUInt(EE_UINT16_FREQUENCY_MW, frequency_MW); EEPROM.writeUInt(EE_UINT16_FREQUENCY_SW, frequency_SW); -#ifdef HAS_AIR_BAND - EEPROM.writeUInt(EE_UINT16_FREQUENCY_AIR, frequency_AIR); -#endif EEPROM.commit(); } -void LimitAMFrequency() {//todo air +void LimitAMFrequency() { switch (band) { case BAND_LW: frequency_AM = frequency_LW; @@ -2038,23 +1853,10 @@ void SelectBand() { case BAND_LW: freqold = frequency_LW; frequency_AM = frequency_LW; break; case BAND_MW: freqold = frequency_MW; frequency_AM = frequency_MW; break; case BAND_SW: freqold = frequency_SW; frequency_AM = frequency_SW; break; -#ifdef HAS_AIR_BAND - case BAND_AIR: freqold = frequency_AIR; frequency_AM = frequency_AIR;break; -#endif } LimitAMFrequency(); if (!externaltune) CheckBandForbiddenAM(); -#ifdef HAS_AIR_BAND - if (band == BAND_AIR) { - radio.SetFreqAIR(10700); - log_d("BAND SELECT -> 航空的频率: %d",frequency_AIR); - } else { - radio.SetFreqAM(frequency_AM); - } -#else radio.SetFreqAM(frequency_AM); -#endif - log_d("BAND SELECT -> 现在的频率: %d",frequency_AM); radio.setAMAttenuation(amgain); radio.setAMCoChannel(amcodect, amcodectcount); doBW(); @@ -2074,11 +1876,7 @@ void SelectBand() { tftPrint(0, "iMS", 265, 59, GreyoutColor, BackgroundColor, 16); tft.drawRoundRect(286, 56, 32, 20, 5, GreyoutColor); tftPrint(0, "EQ", 303, 59, GreyoutColor, BackgroundColor, 16); - // todo - // if (band == AM_BAND_AIR) tftPrint(-1, "MHz", 258, 76, ActiveColor, ActiveColorSmooth, 28); - // else tftPrint(-1, "KHz", 258, 76, ActiveColor, ActiveColorSmooth, 28); } - log_d("BAND SELECT -> 现在的波段: %d",band); } else { if (tunemode == TUNE_MI_BAND) tunemode = TUNE_MAN; radio.power(0); @@ -2313,7 +2111,7 @@ void Round5K(unsigned int freqAM) { } } -void RoundStep() {//todo air +void RoundStep() { if (band == BAND_FM) { unsigned int freq = frequency; switch (fmdefaultstepsize) { @@ -2368,7 +2166,7 @@ void ButtonPress() { EEPROM.writeByte(memorypos + EE_PRESETS_BAND_START, band); EEPROM.writeByte(memorypos + EE_PRESET_BW_START, BWset); EEPROM.writeByte(memorypos + EE_PRESET_MS_START, StereoToggle); - if (band == BAND_FM) {//todo air + if (band == BAND_FM) { EEPROM.writeUInt((memorypos * 4) + EE_PRESETS_FREQUENCY_START, frequency); } else if (band == BAND_OIRT) { EEPROM.writeUInt((memorypos * 4) + EE_PRESETS_FREQUENCY_START, frequency_OIRT); @@ -2402,7 +2200,7 @@ void ButtonPress() { EEPROM.commit(); - if (band == BAND_FM) {//todo air + if (band == BAND_FM) { presets[memorypos].frequency = frequency; } else if (band == BAND_OIRT) { presets[memorypos].frequency = frequency_OIRT; @@ -2708,36 +2506,22 @@ void DoMemoryPosTune() { band = presets[memorypos].band; } - switch (band) { - case BAND_FM: - frequency = presets[memorypos].frequency; - radio.SetFreq(frequency); - break; - case BAND_OIRT: - frequency = presets[memorypos].frequency; - radio.SetFreq(frequency_OIRT); - break; - case BAND_LW: - frequency = presets[memorypos].frequency; - radio.SetFreq(frequency_LW); - break; - case BAND_MW: - frequency = presets[memorypos].frequency; - radio.SetFreq(frequency_MW); - break; - case BAND_SW: - frequency = presets[memorypos].frequency; - radio.SetFreq(frequency_SW); - break; -#ifdef HAS_AIR_BAND - case BAND_AIR: - frequency = presets[memorypos].frequency; - // radio.SetFreq(frequency_AIR); // todo - radio.SetFreqAM(10700); // todo - break; -#endif + if (band == BAND_FM) { + frequency = presets[memorypos].frequency; + radio.SetFreq(frequency); + } else if (band == BAND_OIRT) { + frequency_OIRT = presets[memorypos].frequency; + radio.SetFreq(frequency_OIRT); + } else if (band == BAND_LW) { + frequency_LW = presets[memorypos].frequency; + radio.SetFreqAM(frequency_LW); + } else if (band == BAND_MW) { + frequency_MW = presets[memorypos].frequency; + radio.SetFreqAM(frequency_MW); + } else if (band == BAND_SW) { + frequency_SW = presets[memorypos].frequency; + radio.SetFreqAM(frequency_SW); } - ShowFreq(0); if (band == BAND_FM || band == BAND_OIRT) { @@ -2809,9 +2593,6 @@ void ShowFreq(int mode) { case BAND_LW: frequency_AM = frequency_LW; break; case BAND_MW: frequency_AM = frequency_MW; break; case BAND_SW: frequency_AM = frequency_SW; break; -#ifdef HAS_AIR_BAND - case BAND_AIR: frequency_AM = frequency_AIR; break; // todo air -#endif } if (!screenmute) { @@ -2828,11 +2609,7 @@ void ShowFreq(int mode) { FrequencySprite.setTextDatum(TR_DATUM); FrequencySprite.setTextColor(FreqColor, FreqColorSmooth, false); - if (band == BAND_AIR) { - FrequencySprite.drawString(String(frequency_AM / 1000) + "." + String(frequency_AM % 1000) + " ", 218, -6); - } else { - FrequencySprite.drawString(String(frequency_AM) + " ", 218, -6); - } + FrequencySprite.drawString(String(frequency_AM) + " ", 218, -6); FrequencySprite.unloadFont(); FrequencySprite.setTextColor(PrimaryColor, PrimaryColorSmooth, false); FrequencySprite.setTextDatum(TL_DATUM); @@ -3294,7 +3071,7 @@ void doSquelch() { SquelchSprite.unloadFont(); } -void updateBW() {//todo air +void updateBW() { if (BWset == 0) { if (!screenmute && !advancedRDS && !afscreen) { tft.drawRoundRect(248, 35, 71, 20, 5, ActiveColor); @@ -3346,8 +3123,7 @@ void updateEQ() { } void updateCodetect() { - if ( - band > BAND_GAP && band != BAND_AIR) { + if (band > BAND_GAP) { if (WAM) { tftPrint(-1, "CO", 50, 61, PrimaryColor, PrimaryColorSmooth, 16); } else { @@ -3657,18 +3433,10 @@ void TuneUp() { } else if (frequency_AM < MWLowEdgeSet) { temp = FREQ_MW_STEP_9K; frequency_AM = (frequency_AM / FREQ_MW_STEP_9K) * FREQ_MW_STEP_9K; - } else if (frequency_AM < SWHighEdgeSet && frequency_AM > SWLowEdgeSet) { + } else { temp = FREQ_SW_STEP_5K; frequency_AM = (frequency_AM / FREQ_SW_STEP_5K) * FREQ_SW_STEP_5K; } -#ifdef HAS_AIR_BAND - else if (frequency_AM < AIRHighEdgeSet && frequency_AM > AIRLowEdgeSet) { - - if (airstepsize == 0) temp = FREQ_AIR_STEP_25K; - else temp = FREQ_AIR_STEP_8K33; - log_d("tune up airband stepsize = %d",airstepsize); - } -#endif } else { if (band == BAND_OIRT) { temp = FREQ_OIRT_STEP_30K; @@ -3733,18 +3501,6 @@ void TuneUp() { radio.SetFreqAM(frequency_AM); frequency_SW = frequency_AM; } -#ifdef HAS_AIR_BAND - else if (band == BAND_AIR) { - log_d("tune up airband = %d",frequency_AM); - frequency_AM += temp; - if (frequency_AIR > AIRHighEdgeSet) { - frequency_AM = AIRLowEdgeSet; - if (edgebeep) EdgeBeeper(); - } - radio.SetFreqAM(frequency_AM); - frequency_AIR = frequency_AM; - } -#endif radio.clearRDS(fullsearchrds); if (RDSSPYUSB) Serial.print("G:\r\nRESET-------\r\n\r\n"); if (RDSSPYTCP) RemoteClient.print("G:\r\nRESET-------\r\n\r\n"); @@ -4003,9 +3759,6 @@ void DefaultSettings(byte userhardwaremodel) { if (userhardwaremodel == BASE_ILI9341) EEPROM.writeUInt(EE_UINT16_FREQUENCY_LW, 180); else EEPROM.writeUInt(EE_UINT16_FREQUENCY_LW, 164); if (userhardwaremodel == BASE_ILI9341) EEPROM.writeUInt(EE_UINT16_FREQUENCY_MW, 540); else EEPROM.writeUInt(EE_UINT16_FREQUENCY_MW, 639); if (userhardwaremodel == BASE_ILI9341) EEPROM.writeUInt(EE_UINT16_FREQUENCY_SW, 1800); else EEPROM.writeUInt(EE_UINT16_FREQUENCY_SW, 5000); -#ifdef HAS_AIR_BAND - EEPROM.writeUInt(EE_UINT16_FREQUENCY_AIR, 135350); -#endif EEPROM.writeString(EE_STRING_XDRGTK_KEY, "password"); if (userhardwaremodel == BASE_ILI9341) EEPROM.writeByte(EE_BYTE_USESQUELCH, 1); else EEPROM.writeByte(EE_BYTE_USESQUELCH, 0); EEPROM.writeByte(EE_BYTE_SHOWMODULATION, 1); @@ -4037,9 +3790,6 @@ void DefaultSettings(byte userhardwaremodel) { EEPROM.writeByte(EE_BYTE_FASTPS, 1); EEPROM.writeByte(EE_BYTE_TOT, 0); EEPROM.writeByte(EE_BYTE_MWREGION, 0); -#ifdef HAS_AIR_BAND - EEPROM.writeByte(EE_BYTE_AIRSTEPSIZE, 0); -#endif EEPROM.writeByte(EE_BYTE_SPISPEED, 0); EEPROM.writeByte(EE_BYTE_AMSCANSENS, 4); EEPROM.writeByte(EE_BYTE_FMSCANSENS, 4); @@ -4266,9 +4016,6 @@ void endMenu() { EEPROM.writeByte(EE_BYTE_FASTPS, radio.rds.fastps); EEPROM.writeByte(EE_BYTE_TOT, tot); EEPROM.writeByte(EE_BYTE_MWREGION, mwstepsize); -#ifdef HAS_AIR_BAND - EEPROM.writeByte(EE_BYTE_AIRSTEPSIZE, airstepsize); -#endif EEPROM.writeByte(EE_BYTE_SPISPEED, spispeed); EEPROM.writeByte(EE_BYTE_AMSCANSENS, amscansens); EEPROM.writeByte(EE_BYTE_FMSCANSENS, fmscansens); diff --git a/src/TEF6686.cpp b/src/TEF6686.cpp index 2a084dd..1327463 100644 --- a/src/TEF6686.cpp +++ b/src/TEF6686.cpp @@ -135,16 +135,16 @@ void TEF6686::init(byte TEF) { if (xtalADC < XTAL_0V_ADC + XTAL_ADC_TOL) { Tuner_Init(tuner_init_tab9216); - log_d("TEF668X XTAL : 9.216M"); + log_v("XTAL : 9.216M"); } else if (xtalADC > XTAL_1V_ADC - XTAL_ADC_TOL && xtalADC < XTAL_1V_ADC + XTAL_ADC_TOL) { Tuner_Init(tuner_init_tab12000); - log_d("TEF668X XTAL : 12M"); + log_v("XTAL : 12M"); } else if (xtalADC > XTAL_2V_ADC - XTAL_ADC_TOL && xtalADC < XTAL_2V_ADC + XTAL_ADC_TOL) { Tuner_Init(tuner_init_tab55000); - log_d("TEF668X XTAL : 55M"); + log_v("XTAL : 55M"); } else { Tuner_Init(tuner_init_tab4000); - log_d("TEF668X XTAL : 4M"); + log_v("XTAL : 4M"); } power(1); Tuner_Init(tuner_init_tab); @@ -178,10 +178,6 @@ void TEF6686::SetFreqAM(uint16_t frequency) { devTEF_Radio_Tune_AM (frequency); } -void TEF6686::SetFreqAIR(uint16_t frequency) { - devTEF_Radio_Tune_AM (10700); -} - void TEF6686::setOffset(int8_t offset) { devTEF_Radio_Set_LevelOffset(offset * 10); } diff --git a/src/TEF6686.h b/src/TEF6686.h index 2d461ef..ec33c13 100644 --- a/src/TEF6686.h +++ b/src/TEF6686.h @@ -660,7 +660,6 @@ class TEF6686 { void readRDS(byte showrdserrors); void SetFreq(uint16_t frequency); void SetFreqAM(uint16_t frequency); - void SetFreqAIR(uint16_t frequency); bool getProcessing(uint16_t &highcut, uint16_t &stereo, uint16_t &sthiblend, uint8_t &stband_1, uint8_t &stband_2, uint8_t &stband_3, uint8_t &stband_4); bool getStatus(int16_t &level, uint16_t &USN, uint16_t &WAM, int16_t &offset, uint16_t &bandwidth, uint16_t &modulation, int8_t &snr); bool getStatusAM(int16_t &level, uint16_t &noise, uint16_t &cochannel, int16_t &offset, uint16_t &bandwidth, uint16_t &modulation, int8_t &snr); diff --git a/src/config.h b/src/config.h deleted file mode 100644 index 53da484..0000000 --- a/src/config.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef CONFIG_H -#define CONFIG_H - -#include - -// #define HAS_AIR_BAND // uncomment to enable Air Band(Make sure you have Air Band extend board) -#define CHINA_PORTABLE // uncomment for China Portable build (Simplified Chinese) - -#endif \ No newline at end of file diff --git a/src/constants.h b/src/constants.h index cfd6202..43c9266 100644 --- a/src/constants.h +++ b/src/constants.h @@ -1,5 +1,3 @@ -#include "config.h" - #define ON 1 #define OFF 0 #define REVERSE false @@ -35,10 +33,6 @@ #define FREQ_MW_STEP_9K 9 #define FREQ_MW_STEP_10K 10 #define FREQ_SW_STEP_5K 5 -#ifdef HAS_AIR_BAND -#define FREQ_AIR_STEP_25K 25 -#define FREQ_AIR_STEP_8K33 8.33 -#endif #define FREQ_OIRT_STEP_30K 3 #define FREQ_FM_STEP_50K 5 #define FREQ_FM_STEP_100K 10 @@ -54,10 +48,6 @@ #define FREQ_SW_LOW_EDGE_MAX (FREQ_SW_160M_START) #define FREQ_SW_HIGH_EDGE_MIN (FREQ_SW_11M_END) #define FREQ_SW_HIGH_EDGE_MAX (FREQ_SW_END) -#ifdef HAS_AIR_BAND -#define FREQ_AIR_LOW_EDGE_MIN 108000 -#define FREQ_AIR_HIGH_EDGE_MIN 137000 -#endif #define FREQ_FM_START 65000 #define FREQ_FM_END 108000 #define FREQ_FM_OIRT_START 6500 // use values of 1/10 * kHz @@ -206,13 +196,9 @@ // EEPROM index defines #define EE_PRESETS_CNT 99 // When set > 99 change the complete EEPROM adressing! -#define EE_CHECKBYTE_VALUE 10 // 0 ~ 255,add new entry, change for new value +#define EE_CHECKBYTE_VALUE 7 // 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 2219 // Total occupied eeprom bytes -#else #define EE_TOTAL_CNT 2214 // Total occupied eeprom bytes -#endif #define EE_PRESETS_BAND_START 0 // 99 * 1 byte #define EE_PRESET_BW_START 99 // 99 * 1 byte @@ -310,10 +296,6 @@ #define EE_BYTE_SCANMEM 2211 #define EE_BYTE_SCANCANCEL 2212 #define EE_BYTE_SCANMUTE 2213 -#ifdef HAS_AIR_BAND -#define EE_BYTE_AIRSTEPSIZE 2114 -#define EE_UINT16_FREQUENCY_AIR 2215 -#endif // End of EEPROM index defines static const char* const unitString[] = {"dBμV", "dBf", "dBm"}; @@ -337,28 +319,15 @@ enum SCAN_CANCEL { // 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, BAND_AIR + BAND_OIRT = 0, BAND_FM, BAND_GAP, BAND_LW, BAND_MW, BAND_SW }; -#ifndef HAS_AIR_BAND // Toggle: LW -> MW -> SW enum RADIO_AM_BAND_SELECTION { AM_BAND_ALL = 0, AM_BAND_LW_MW, AM_BAND_LW_SW, AM_BAND_MW_SW, AM_BAND_LW, AM_BAND_MW, AM_BAND_SW, AM_BAND_NONE, AM_BAND_CNT }; -#else -// Toggle: LW -> MW -> SW -> AIR -enum RADIO_AM_BAND_SELECTION { - AM_BAND_ALL = 0, - AM_BAND_LW_MW_SW, AM_BAND_LW_MW_AIR, AM_BAND_LW_SW_AIR, AM_BAND_MW_SW_AIR, - AM_BAND_LW_MW, AM_BAND_LW_SW, AM_BAND_LW_AIR, - AM_BAND_MW_SW, AM_BAND_MW_AIR, - AM_BAND_SW_AIR, - AM_BAND_LW, AM_BAND_MW, AM_BAND_SW, AM_BAND_AIR, AM_BAND_NONE, - AM_BAND_CNT -}; -#endif /* end of HAS_AIR_BAND */ // Toggle: OIRT -> FM enum RADIO_FM_BAND_SELECTION { diff --git a/src/gui.cpp b/src/gui.cpp index d2ed284..52a82cb 100644 --- a/src/gui.cpp +++ b/src/gui.cpp @@ -1,7 +1,6 @@ #include "gui.h" #include "language.h" #include "constants.h" -#include "config.h" #include #include #include @@ -1194,27 +1193,7 @@ void ShowOneLine(byte position, byte item, bool selected) { FullLineSprite.setTextDatum(TR_DATUM); FullLineSprite.setTextColor(PrimaryColor, PrimaryColorSmooth, false); -#ifdef HAS_AIR_BAND - switch (bandAM) { - case AM_BAND_ALL: FullLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][103] + String(",") + myLanguage[language][104] + String(",") + myLanguage[language][223], 298, 3); break; - case AM_BAND_LW_MW_SW: FullLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][103] + String(",") + myLanguage[language][104], 298, 3); break; - case AM_BAND_LW_MW_AIR: FullLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][103] + String(",") + myLanguage[language][223], 298, 3); break; - case AM_BAND_LW_SW_AIR: FullLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][104] + String(",") + myLanguage[language][223], 298, 3); break; - case AM_BAND_MW_SW_AIR: FullLineSprite.drawString(myLanguage[language][103] + String(",") + myLanguage[language][104] + String(",") + myLanguage[language][223], 298, 3); break; - case AM_BAND_LW_MW: FullLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][103], 298, 3); break; - case AM_BAND_LW_SW: FullLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][104], 298, 3); break; - case AM_BAND_LW_AIR: FullLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][223], 298, 3); break; - case AM_BAND_MW_SW: FullLineSprite.drawString(myLanguage[language][103] + String(",") + myLanguage[language][104], 298, 3); break; - case AM_BAND_MW_AIR: FullLineSprite.drawString(myLanguage[language][103] + String(",") + myLanguage[language][223], 298, 3); break; - case AM_BAND_SW_AIR: FullLineSprite.drawString(myLanguage[language][104] + String(",") + myLanguage[language][223], 298, 3); break; - case AM_BAND_LW: FullLineSprite.drawString(myLanguage[language][102], 298, 3); break; - case AM_BAND_MW: FullLineSprite.drawString(myLanguage[language][103], 298, 3); break; - case AM_BAND_SW: FullLineSprite.drawString(myLanguage[language][104], 298, 3); break; - case AM_BAND_AIR: FullLineSprite.drawString(myLanguage[language][223], 298, 3); break; - case AM_BAND_NONE: FullLineSprite.drawString(myLanguage[language][83], 298, 3); break; - } - break; -#else + switch (bandAM) { case AM_BAND_ALL: FullLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][103] + String(",") + myLanguage[language][104], 298, 3); break; case AM_BAND_LW_MW: FullLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][103], 298, 3); break; @@ -1225,8 +1204,7 @@ void ShowOneLine(byte position, byte item, bool selected) { case AM_BAND_SW: FullLineSprite.drawString(myLanguage[language][104], 298, 3); break; case AM_BAND_NONE: FullLineSprite.drawString(myLanguage[language][83], 298, 3); break; } - break; -#endif + break; case DISPLAYSETTINGS: FullLineSprite.setTextDatum(TL_DATUM); @@ -1640,22 +1618,10 @@ void BuildDisplay() { case BAND_LW: tftPrint(-1, myLanguage[language][102], 70, 32, bandColor, PrimaryColorSmooth, 16); break; case BAND_MW: tftPrint(-1, myLanguage[language][103], 70, 32, bandColor, PrimaryColorSmooth, 16); break; case BAND_SW: tftPrint(-1, myLanguage[language][104], 70, 32, bandColor, PrimaryColorSmooth, 16); break; -#ifdef HAS_AIR_BAND - case BAND_AIR: tftPrint(-1, myLanguage[language][223], 70, 32, bandColor, PrimaryColorSmooth, 16); break; -#endif case BAND_FM: tftPrint(-1, myLanguage[language][105], 70, 32, bandColor, PrimaryColorSmooth, 16); break; case BAND_OIRT: tftPrint(-1, myLanguage[language][106], 70, 32, bandColor, PrimaryColorSmooth, 16); break; } - if (band < BAND_GAP) tftPrint(-1, "MHz", 258, 76, ActiveColor, ActiveColorSmooth, 28); - else { -#ifdef HAS_AIR_BAND - if (band == AM_BAND_AIR) - tftPrint(-1, "MHz", 258, 76, ActiveColor, ActiveColorSmooth, 28); - else tftPrint(-1, "KHz", 258, 76, ActiveColor, ActiveColorSmooth, 28); -#else - tftPrint(-1, "KHz", 258, 76, ActiveColor, ActiveColorSmooth, 28); -#endif - } + if (band < BAND_GAP) tftPrint(-1, "MHz", 258, 76, ActiveColor, ActiveColorSmooth, 28); else tftPrint(-1, "kHz", 258, 76, ActiveColor, ActiveColorSmooth, 28); RDSstatusold = false; Stereostatusold = false; @@ -1819,26 +1785,7 @@ void MenuUp() { case ITEM8: bandAM++; if (bandAM > AM_BAND_CNT - 1) bandAM = AM_BAND_ALL; -#ifdef HAS_AIR_BAND - switch (bandAM) { - case AM_BAND_ALL: OneBigLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][103] + String(",") + myLanguage[language][104]+ String(",") + myLanguage[language][223], 135, 0); break; - case AM_BAND_LW_MW_SW: OneBigLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][103] + String(",") + myLanguage[language][104], 135, 0); break; - case AM_BAND_LW_MW_AIR: OneBigLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][103] + String(",") + myLanguage[language][223], 135, 0); break; - case AM_BAND_LW_SW_AIR: OneBigLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][104] + String(",") + myLanguage[language][223], 135, 0); break; - case AM_BAND_MW_SW_AIR: OneBigLineSprite.drawString(myLanguage[language][103] + String(",") + myLanguage[language][104] + String(",") + myLanguage[language][223], 135, 0); break; - case AM_BAND_LW_MW: OneBigLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][103], 135, 0); break; - case AM_BAND_LW_SW: OneBigLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][104], 135, 0); break; - case AM_BAND_LW_AIR: OneBigLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][223], 135, 0); break; - case AM_BAND_MW_SW: OneBigLineSprite.drawString(myLanguage[language][103] + String(",") + myLanguage[language][104], 135, 0); break; - case AM_BAND_MW_AIR: OneBigLineSprite.drawString(myLanguage[language][103] + String(",") + myLanguage[language][223], 135, 0); break; - case AM_BAND_SW_AIR: OneBigLineSprite.drawString(myLanguage[language][104] + String(",") + myLanguage[language][223], 135, 0); break; - case AM_BAND_LW: OneBigLineSprite.drawString(myLanguage[language][102], 135, 0); break; - case AM_BAND_MW: OneBigLineSprite.drawString(myLanguage[language][103], 135, 0); break; - case AM_BAND_SW: OneBigLineSprite.drawString(myLanguage[language][104], 135, 0); break; - case AM_BAND_AIR: OneBigLineSprite.drawString(myLanguage[language][223], 135, 0); break; - case AM_BAND_NONE: OneBigLineSprite.drawString(myLanguage[language][83], 135, 0); break; - } -#else + switch (bandAM) { case AM_BAND_ALL: OneBigLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][103] + String(",") + myLanguage[language][104], 135, 0); break; case AM_BAND_LW_MW: OneBigLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][103], 135, 0); break; @@ -1849,7 +1796,7 @@ void MenuUp() { case AM_BAND_SW: OneBigLineSprite.drawString(myLanguage[language][104], 135, 0); break; case AM_BAND_NONE: OneBigLineSprite.drawString(myLanguage[language][83], 135, 0); break; } -#endif + OneBigLineSprite.pushSprite(24, 118); break; @@ -2642,26 +2589,6 @@ void MenuDown() { bandAM--; if (bandAM > AM_BAND_CNT) bandAM = AM_BAND_NONE; -#ifdef HAS_AIR_BAND - switch (bandAM) { - case AM_BAND_ALL: OneBigLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][103] + String(",") + myLanguage[language][104]+ String(",") + myLanguage[language][223], 135, 0); break; - case AM_BAND_LW_MW_SW: OneBigLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][103] + String(",") + myLanguage[language][104], 135, 0); break; - case AM_BAND_LW_MW_AIR: OneBigLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][103] + String(",") + myLanguage[language][223], 135, 0); break; - case AM_BAND_LW_SW_AIR: OneBigLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][104] + String(",") + myLanguage[language][223], 135, 0); break; - case AM_BAND_MW_SW_AIR: OneBigLineSprite.drawString(myLanguage[language][103] + String(",") + myLanguage[language][104] + String(",") + myLanguage[language][223], 135, 0); break; - case AM_BAND_LW_MW: OneBigLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][103], 135, 0); break; - case AM_BAND_LW_SW: OneBigLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][104], 135, 0); break; - case AM_BAND_LW_AIR: OneBigLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][223], 135, 0); break; - case AM_BAND_MW_SW: OneBigLineSprite.drawString(myLanguage[language][103] + String(",") + myLanguage[language][104], 135, 0); break; - case AM_BAND_MW_AIR: OneBigLineSprite.drawString(myLanguage[language][103] + String(",") + myLanguage[language][223], 135, 0); break; - case AM_BAND_SW_AIR: OneBigLineSprite.drawString(myLanguage[language][104] + String(",") + myLanguage[language][223], 135, 0); break; - case AM_BAND_LW: OneBigLineSprite.drawString(myLanguage[language][102], 135, 0); break; - case AM_BAND_MW: OneBigLineSprite.drawString(myLanguage[language][103], 135, 0); break; - case AM_BAND_SW: OneBigLineSprite.drawString(myLanguage[language][104], 135, 0); break; - case AM_BAND_AIR: OneBigLineSprite.drawString(myLanguage[language][223], 135, 0); break; - case AM_BAND_NONE: OneBigLineSprite.drawString(myLanguage[language][83], 135, 0); break; - } -#else switch (bandAM) { case AM_BAND_ALL: OneBigLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][103] + String(",") + myLanguage[language][104], 135, 0); break; case AM_BAND_LW_MW: OneBigLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][103], 135, 0); break; @@ -2672,8 +2599,6 @@ void MenuDown() { case AM_BAND_SW: OneBigLineSprite.drawString(myLanguage[language][104], 135, 0); break; case AM_BAND_NONE: OneBigLineSprite.drawString(myLanguage[language][83], 135, 0); break; } -#endif - OneBigLineSprite.pushSprite(24, 118); break; @@ -3176,7 +3101,6 @@ void MenuDown() { OneBigLineSprite.drawString((showSWMIBand ? myLanguage[language][42] : myLanguage[language][30]), 135, 0); OneBigLineSprite.pushSprite(24, 118); - break; case ITEM5: @@ -3531,26 +3455,6 @@ void DoMenu() { case ITEM8: Infoboxprint(myLanguage[language][101]); -#ifdef HAS_AIR_BAND - switch (bandAM) { - case AM_BAND_ALL: OneBigLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][103] + String(",") + myLanguage[language][104]+ String(",") + myLanguage[language][223], 135, 0); break; - case AM_BAND_LW_MW_SW: OneBigLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][103] + String(",") + myLanguage[language][104], 135, 0); break; - case AM_BAND_LW_MW_AIR: OneBigLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][103] + String(",") + myLanguage[language][223], 135, 0); break; - case AM_BAND_LW_SW_AIR: OneBigLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][104] + String(",") + myLanguage[language][223], 135, 0); break; - case AM_BAND_MW_SW_AIR: OneBigLineSprite.drawString(myLanguage[language][103] + String(",") + myLanguage[language][104] + String(",") + myLanguage[language][223], 135, 0); break; - case AM_BAND_LW_MW: OneBigLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][103], 135, 0); break; - case AM_BAND_LW_SW: OneBigLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][104], 135, 0); break; - case AM_BAND_LW_AIR: OneBigLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][223], 135, 0); break; - case AM_BAND_MW_SW: OneBigLineSprite.drawString(myLanguage[language][103] + String(",") + myLanguage[language][104], 135, 0); break; - case AM_BAND_MW_AIR: OneBigLineSprite.drawString(myLanguage[language][103] + String(",") + myLanguage[language][223], 135, 0); break; - case AM_BAND_SW_AIR: OneBigLineSprite.drawString(myLanguage[language][104] + String(",") + myLanguage[language][223], 135, 0); break; - case AM_BAND_LW: OneBigLineSprite.drawString(myLanguage[language][102], 135, 0); break; - case AM_BAND_MW: OneBigLineSprite.drawString(myLanguage[language][103], 135, 0); break; - case AM_BAND_SW: OneBigLineSprite.drawString(myLanguage[language][104], 135, 0); break; - case AM_BAND_AIR: OneBigLineSprite.drawString(myLanguage[language][223], 135, 0); break; - case AM_BAND_NONE: OneBigLineSprite.drawString(myLanguage[language][83], 135, 0); break; - } -#else switch (bandAM) { case AM_BAND_ALL: OneBigLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][103] + String(",") + myLanguage[language][104], 135, 0); break; case AM_BAND_LW_MW: OneBigLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][103], 135, 0); break; @@ -3561,8 +3465,6 @@ void DoMenu() { case AM_BAND_SW: OneBigLineSprite.drawString(myLanguage[language][104], 135, 0); break; case AM_BAND_NONE: OneBigLineSprite.drawString(myLanguage[language][83], 135, 0); break; } -#endif - OneBigLineSprite.pushSprite(24, 118); break; diff --git a/src/language.h b/src/language.h index 7ad66fc..125dc9d 100644 --- a/src/language.h +++ b/src/language.h @@ -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][224] PROGMEM = { +static const char* const myLanguage[18][223] PROGMEM = { { "English", // English "Rotary direction changed", // 1 "Please release button", // 2 @@ -228,8 +228,7 @@ static const char* const myLanguage[18][224] PROGMEM = { "Auto cancel scan", // 219 "Correct PI", // 220 "Signal", // 221 - "Mute audio\nwhile scanning", // 222 - "AIR" // 223 + "Mute audio\nwhile scanning" // 222 }, { "Nederlands", // Dutch @@ -454,8 +453,7 @@ static const char* const myLanguage[18][224] PROGMEM = { "Auto afbreken", // 219 "Correcte PI", // 220 "Signaal", // 221 - "Geen geluid\ntijdens scannen", // 222 - "AIR" // 223 + "Geen geluid\ntijdens scannen" // 222 }, { "Polski", // Polish @@ -680,8 +678,7 @@ static const char* const myLanguage[18][224] PROGMEM = { "Automatyczne\nanulowanie skanowania", // 219 "Poprawne PI", // 220 "Sygnał", // 221 - "Wycisz dźwięk\npodczas skanowania", // 222 - "AIR" // 223 + "Wycisz dźwięk\npodczas skanowania" // 222 }, { "Hrvatski", // Croatian @@ -906,8 +903,7 @@ static const char* const myLanguage[18][224] PROGMEM = { "Auto cancel scan", // 219 "Correct PI", // 220 "Signal", // 221 - "Mute audio\nwhile scanning", // 222 - "AIR" // 223 + "Mute audio\nwhile scanning" // 222 }, { "Ελληνικά", // Greek @@ -1132,8 +1128,7 @@ static const char* const myLanguage[18][224] PROGMEM = { "Αυτόματη ακύρωση\nανίχνευσης", // 219 "Σωστό PI", // 220 "Σήμα", // 221 - "Σίγαση ήχου\nκατά την ανίχνευση", // 222 - "AIR" // 223 + "Σίγαση ήχου\nκατά την ανίχνευση" // 222 }, { "Română", // Romanian @@ -1358,8 +1353,7 @@ static const char* const myLanguage[18][224] PROGMEM = { "Auto cancel scan", // 219 "Correct PI", // 220 "Signal", // 221 - "Mute audio\nwhile scanning", // 222 - "AIR" // 223 + "Mute audio\nwhile scanning" // 222 }, { "Deutsch", // German @@ -1584,8 +1578,7 @@ static const char* const myLanguage[18][224] PROGMEM = { "Automatisches Scan-Ende", // 219 "Korrekter PI-Code", // 220 "Signal", // 221 - "Stumm beim Scannen", // 222 - "AIR" // 223 + "Stumm beim Scannen" // 222 }, { "Český", // Czech @@ -1810,8 +1803,7 @@ static const char* const myLanguage[18][224] PROGMEM = { "Auto cancel scan", // 219 "Correct PI", // 220 "Signal", // 221 - "Mute audio\nwhile scanning", // 222 - "AIR" // 223 + "Mute audio\nwhile scanning" // 222 }, { "Slovenský", // Slovak @@ -2036,8 +2028,7 @@ static const char* const myLanguage[18][224] PROGMEM = { "Auto cancel scan", // 219 "Correct PI", // 220 "Signal", // 221 - "Mute audio\nwhile scanning", // 222 - "AIR" // 223 + "Mute audio\nwhile scanning" // 222 }, { "Français", // French @@ -2262,8 +2253,7 @@ static const char* const myLanguage[18][224] PROGMEM = { "Annuler automatiquement", // 219 "PI Correct", // 220 "Signal", // 221 - "Audio muet lors\nde la numérisation", // 222 - "AIR" // 223 + "Audio muet lors\nde la numérisation" // 222 }, { "Български", // Bulgarian @@ -2488,8 +2478,7 @@ static const char* const myLanguage[18][224] PROGMEM = { "Auto cancel scan", // 219 "Correct PI", // 220 "Signal", // 221 - "Mute audio\nwhile scanning", // 222 - "AIR" // 223 + "Mute audio\nwhile scanning" // 222 }, { "Русский", // Russian @@ -2714,8 +2703,7 @@ static const char* const myLanguage[18][224] PROGMEM = { "Автоматическая отмена \nсканирования", // 219 "При корректном PI", // 220 "При наличии сигнала", // 221 - "Отключать аудио\nпри сканировании", // 222 - "AIR" // 223 + "Отключать аудио\nпри сканировании" // 222 }, { "Українська", // Ukranian @@ -2940,8 +2928,7 @@ static const char* const myLanguage[18][224] PROGMEM = { "Auto cancel scan", // 219 "Correct PI", // 220 "Signal", // 221 - "Mute audio\nwhile scanning", // 222 - "AIR" // 223 + "Mute audio\nwhile scanning" // 222 }, { "Italiano", // Italian @@ -3166,8 +3153,7 @@ static const char* const myLanguage[18][224] PROGMEM = { "Fine scansione automatica", // 219 "PI corretto", // 220 "Signale", // 221 - "Audio silenziato\ndurante scansione", // 222 - "AIR" // 223 + "Audio silenziato\ndurante scansione" // 222 }, { "Simplified Chinese", // Simplified Chinese @@ -3392,8 +3378,7 @@ static const char* const myLanguage[18][224] PROGMEM = { "扫频停台条件", // 219 "节目识别码正确", // 220 "信号超阈值", // 221 - "扫描时静音", // 222 - "AIR" // 223 + "扫描时静音" // 222 }, { "Norsk", // Norwegian @@ -3618,8 +3603,7 @@ static const char* const myLanguage[18][224] PROGMEM = { "Avbryt skanning automatisk", // 219 "korrekt PI", // 220 "Signal", // 221 - "Demp lyden\nmens du skanner", // 222 - "AIR" // 223 + "Demp lyden\nmens du skanner" // 222 }, { "Español", // Spanish @@ -3844,8 +3828,7 @@ static const char* const myLanguage[18][224] PROGMEM = { "Cancelar automáticamente\nla búsqueda", // 219 "PI correcto", // 220 "Señal", // 221 - "Audio mudo\nmientras busca", // 222 - "AIR" // 223 + "Audio mudo\nmientras busca" // 222 }, { "Português", // Portuguese @@ -4070,8 +4053,7 @@ static const char* const myLanguage[18][224] PROGMEM = { "Cancelar automatic.\na pesquisa", // 219 "PI correto", // 220 "Sinal", // 221 - "Mudo áudio\nenquanto procura", // 222 - "AIR" // 223 + "Mudo áudio\nenquanto procura" // 222 } }; #endif From 109c2578bd13df3e9d8569869d0ef9f4334daa83 Mon Sep 17 00:00:00 2001 From: ohmytime Date: Sun, 5 May 2024 21:44:56 +0800 Subject: [PATCH 6/6] AIR band revert --- TEF6686_ESP32.ino | 316 +++++++++++++++++++++++++++++++++++++++++----- src/TEF6686.cpp | 12 +- src/TEF6686.h | 1 + src/config.h | 9 ++ src/constants.h | 35 ++++- src/gui.cpp | 108 +++++++++++++++- src/language.h | 56 +++++--- 7 files changed, 473 insertions(+), 64 deletions(-) create mode 100644 src/config.h diff --git a/TEF6686_ESP32.ino b/TEF6686_ESP32.ino index 2baeddb..d61f1eb 100644 --- a/TEF6686_ESP32.ino +++ b/TEF6686_ESP32.ino @@ -17,6 +17,7 @@ #include "src/FREQFONT.h" #include "src/TEF6686.h" #include "src/constants.h" +#include "src/config.h" #include "src/language.h" #include "src/gui.h" #include "src/comms.h" @@ -34,7 +35,6 @@ #define STANDBYLED 19 #define SMETERPIN 27 -// #define CHINA_PORTABLE // uncomment for China Portable build (Simplified Chinese) #define DYNAMIC_SPI_SPEED // uncomment to enable dynamic SPI Speed https://github.com/ohmytime/TFT_eSPI_DynamicSpeed #ifdef ARS @@ -82,6 +82,9 @@ bool memtune; bool menu; bool menuopen; bool mwstepsize; +#ifdef HAS_AIR_BAND +bool airstepsize; +#endif bool nobattery; bool optenc; bool rdsflagreset; @@ -335,6 +338,11 @@ unsigned int frequency_MIBand_75M; unsigned int frequency_MIBand_90M; unsigned int frequency_MW; unsigned int frequency_SW; +#ifdef HAS_AIR_BAND +unsigned int frequency_AIR; +unsigned int AIRHighEdgeSet; +unsigned int AIRLowEdgeSet; +#endif unsigned int frequencyold; unsigned int HighEdgeOIRTSet; unsigned int HighEdgeSet; @@ -445,6 +453,9 @@ void setup() { frequency_LW = EEPROM.readUInt(EE_UINT16_FREQUENCY_LW); frequency_MW = EEPROM.readUInt(EE_UINT16_FREQUENCY_MW); frequency_SW = EEPROM.readUInt(EE_UINT16_FREQUENCY_SW); +#ifdef HAS_AIR_BAND + frequency_AIR = EEPROM.readUInt(EE_UINT16_FREQUENCY_AIR); +#endif XDRGTK_key = EEPROM.readString(EE_STRING_XDRGTK_KEY); usesquelch = EEPROM.readByte(EE_BYTE_USESQUELCH); showmodulation = EEPROM.readByte(EE_BYTE_SHOWMODULATION); @@ -475,6 +486,9 @@ void setup() { radio.rds.fastps = EEPROM.readByte(EE_BYTE_FASTPS); tot = EEPROM.readByte(EE_BYTE_TOT); mwstepsize = EEPROM.readByte(EE_BYTE_MWREGION); +#ifdef HAS_AIR_BAND + airstepsize = EEPROM.readByte(EE_BYTE_AIRSTEPSIZE); +#endif spispeed = EEPROM.readByte(EE_BYTE_SPISPEED); amscansens = EEPROM.readByte(EE_BYTE_AMSCANSENS); fmscansens = EEPROM.readByte(EE_BYTE_FMSCANSENS); @@ -746,12 +760,10 @@ void setup() { radio.setVolume(VolSet); radio.setOffset(LevelOffset); radio.setAMOffset(AMLevelOffset); - - if (band > BAND_GAP) { + if (band > BAND_GAP && band != BAND_AIR) { radio.setAMCoChannel(amcodect, amcodectcount); radio.setAMAttenuation(amgain); } - radio.setStereoLevel(StereoLevel); radio.setHighCutLevel(HighCutLevel); radio.setHighCutOffset(HighCutOffset); @@ -1252,23 +1264,145 @@ void doBandSelectionFM() { } } -void CheckBandForbiddenAM () { +void CheckBandForbiddenAM() { +#ifdef HAS_AIR_BAND switch (band) { case BAND_LW: - if (bandAM == AM_BAND_MW_SW || bandAM == AM_BAND_MW || bandAM == AM_BAND_SW) bandforbidden = 1; else bandforbidden = 0; + if (bandAM == AM_BAND_MW_SW_AIR || bandAM == AM_BAND_MW_SW || bandAM == AM_BAND_MW_AIR || bandAM == AM_BAND_SW_AIR || bandAM == AM_BAND_MW || bandAM == AM_BAND_SW || bandAM == AM_BAND_AIR) + bandforbidden = 1; + else + bandforbidden = 0; break; case BAND_MW: - if (bandAM == AM_BAND_LW_SW || bandAM == AM_BAND_LW || bandAM == AM_BAND_SW) bandforbidden = 1; else bandforbidden = 0; + if (bandAM == AM_BAND_LW_SW_AIR || bandAM == AM_BAND_LW_SW || bandAM == AM_BAND_LW_AIR || bandAM == AM_BAND_SW_AIR || bandAM == AM_BAND_LW || bandAM == AM_BAND_SW || bandAM == AM_BAND_AIR) + bandforbidden = 1; + else + bandforbidden = 0; break; case BAND_SW: - if (bandAM == AM_BAND_LW_MW || bandAM == AM_BAND_LW || bandAM == AM_BAND_MW) bandforbidden = 1; else bandforbidden = 0; + if (bandAM == AM_BAND_LW_MW_AIR || bandAM == AM_BAND_LW_MW || bandAM == AM_BAND_LW_AIR || bandAM == AM_BAND_MW_AIR || bandAM == AM_BAND_LW || bandAM == AM_BAND_MW || bandAM == AM_BAND_AIR) + bandforbidden = 1; + else + bandforbidden = 0; + break; + case BAND_AIR: + if (bandAM == AM_BAND_LW_MW_SW || bandAM == AM_BAND_LW_MW || bandAM == AM_BAND_LW_SW || bandAM == AM_BAND_MW_SW || bandAM == AM_BAND_LW || bandAM == AM_BAND_MW || bandAM == AM_BAND_SW) + bandforbidden = 1; + else + bandforbidden = 0; break; } +#else + switch (band) { + case BAND_LW: + if (bandAM == AM_BAND_MW_SW || bandAM == AM_BAND_MW || bandAM == AM_BAND_SW) bandforbidden = 1; + else bandforbidden = 0; + break; + case BAND_MW: + if (bandAM == AM_BAND_LW_SW || bandAM == AM_BAND_LW || bandAM == AM_BAND_SW) bandforbidden = 1; + else bandforbidden = 0; + break; + case BAND_SW: + if (bandAM == AM_BAND_LW_MW || bandAM == AM_BAND_LW || bandAM == AM_BAND_MW) bandforbidden = 1; + else bandforbidden = 0; + break; + } +#endif } void doBandSelectionAM() { if (band < BAND_GAP) return; +#ifdef HAS_AIR_BAND // has air band + switch (bandAM) { + case AM_BAND_ALL: + break; + case AM_BAND_LW_MW_SW: + if (band == BAND_AIR) { + band = BAND_LW; + SelectBand(); + } + break; + case AM_BAND_LW_MW_AIR: + if (band == BAND_SW) { + band = BAND_LW; + SelectBand(); + } + break; + case AM_BAND_LW_SW_AIR: + if (band == BAND_MW) { + band = BAND_LW; + SelectBand(); + } + break; + case AM_BAND_MW_SW_AIR: + if (band == BAND_LW) { + band = BAND_MW; + SelectBand(); + } + break; + case AM_BAND_LW_MW: + if (band == BAND_SW || band == BAND_AIR) { + band = BAND_LW; + SelectBand(); + } + break; + case AM_BAND_LW_SW: + if (band == BAND_MW || band == BAND_AIR) { + band = BAND_LW; + SelectBand(); + } + break; + case AM_BAND_LW_AIR: + if (band == BAND_MW || band == BAND_SW) { + band = BAND_LW; + SelectBand(); + } + break; + case AM_BAND_MW_SW: + if (band == BAND_LW || band == BAND_AIR) { + band = BAND_MW; + SelectBand(); + } + break; + case AM_BAND_MW_AIR: + if (band == BAND_LW || band == BAND_SW) { + band = BAND_MW; + SelectBand(); + } + break; + case AM_BAND_SW_AIR: + if (band == BAND_LW || band == BAND_MW) { + band = BAND_SW; + SelectBand(); + } + break; + case AM_BAND_LW: + if (band != BAND_LW) { + band = BAND_LW; + SelectBand(); + } + break; + case AM_BAND_MW: + if (band != BAND_MW) { + band = BAND_MW; + SelectBand(); + } + break; + case AM_BAND_SW: + if (band != BAND_SW) { + band = BAND_SW; + SelectBand(); + } + break; + case AM_BAND_AIR: + if (band != BAND_AIR) { + band = BAND_AIR; + SelectBand(); + } + break; + } +#else // has no air band switch (bandAM) { case AM_BAND_ALL: break; @@ -1313,17 +1447,30 @@ void doBandSelectionAM() { SelectBand(); break; } +#endif } void AMjumptoFM() { if (bandFM != FM_BAND_NONE) { if (bandFM == FM_BAND_FM) band = BAND_FM; else band = BAND_OIRT; } else { - // do nothing + FMjumptoAM(); } } void FMjumptoAM() { +#ifdef HAS_AIR_BAND + if (bandAM == AM_BAND_ALL || bandAM == AM_BAND_LW_MW_AIR || bandAM == AM_BAND_LW_SW_AIR || bandAM == AM_BAND_LW_MW || bandAM == AM_BAND_LW_SW || bandAM == AM_BAND_LW_AIR || bandAM == AM_BAND_LW) { + band = BAND_LW; + if (stepsize > 3) stepsize = 3; + } else if (bandAM == AM_BAND_MW_SW || bandAM == AM_BAND_MW_AIR || bandAM == AM_BAND_MW) { + band = BAND_MW; + } else if (bandAM == AM_BAND_SW_AIR || bandAM == AM_BAND_SW) { + band = BAND_SW; + } else if (bandAM == AM_BAND_AIR) { + band = BAND_AIR; + } +#else if (bandAM == AM_BAND_ALL || bandAM == AM_BAND_LW_MW || bandAM == AM_BAND_LW_SW || bandAM == AM_BAND_LW) { band = BAND_LW; if (stepsize > 3) stepsize = 3; @@ -1332,10 +1479,43 @@ void FMjumptoAM() { } else if (bandAM == AM_BAND_SW) { band = BAND_SW; } +#endif } void ToggleBand(byte nowBand) { switch (nowBand) { +#ifdef HAS_AIR_BAND + case BAND_LW: + if (bandAM == AM_BAND_LW_MW_SW || bandAM == AM_BAND_LW_MW_AIR || bandAM == AM_BAND_LW_MW || bandAM == AM_BAND_ALL) { + band = BAND_MW; + } else if (bandAM == AM_BAND_LW_SW_AIR || bandAM == AM_BAND_LW_SW) { + band = BAND_SW; + } else if (bandAM == AM_BAND_LW_MW_AIR || bandAM == AM_BAND_LW_SW_AIR || bandAM == AM_BAND_LW_AIR) { + band = BAND_AIR; + } else if (bandAM == AM_BAND_LW || bandAM == AM_BAND_NONE) { + AMjumptoFM(); + } + break; + case BAND_MW: + if (bandAM == AM_BAND_LW_MW_SW || bandAM == AM_BAND_MW_SW_AIR || bandAM == AM_BAND_MW_SW || bandAM == AM_BAND_ALL) { + band = BAND_SW; + } else if (bandAM == AM_BAND_LW_MW_AIR || bandAM == AM_BAND_MW_AIR) { + band = BAND_AIR; + } else if (bandAM == AM_BAND_MW || bandAM == AM_BAND_NONE) { + AMjumptoFM(); + } + break; + case BAND_SW: + if (bandAM == AM_BAND_LW_SW_AIR || bandAM == AM_BAND_MW_SW_AIR || bandAM == AM_BAND_SW_AIR || bandAM == AM_BAND_ALL) { + band = BAND_AIR; + } else if (bandAM == AM_BAND_LW_MW_SW || bandAM == AM_BAND_LW_SW || bandAM == AM_BAND_MW_SW || bandAM == AM_BAND_SW || bandAM == AM_BAND_NONE) { + AMjumptoFM(); + } + break; + case BAND_AIR: + AMjumptoFM(); + break; +#else // has no air band case BAND_LW: if (bandAM == AM_BAND_LW_MW || bandAM == AM_BAND_ALL) { band = BAND_MW; @@ -1360,8 +1540,9 @@ void ToggleBand(byte nowBand) { break; case BAND_SW: if (bandFM != FM_BAND_NONE) { - if (bandFM == FM_BAND_FM) band = BAND_FM; else band = BAND_OIRT; - } else { + if (bandFM == FM_BAND_FM) band = BAND_FM; + else band = BAND_OIRT; + } else { // FM be disabled if (bandAM == AM_BAND_LW_SW || bandAM == AM_BAND_ALL) { band = BAND_LW; } else if (bandAM == AM_BAND_MW_SW) { @@ -1371,6 +1552,7 @@ void ToggleBand(byte nowBand) { } } break; +#endif case BAND_OIRT: if (bandFM == FM_BAND_ALL || bandFM == FM_BAND_FM) { band = BAND_FM; @@ -1472,10 +1654,13 @@ void StoreFrequency() { EEPROM.writeUInt(EE_UINT16_FREQUENCY_LW, frequency_LW); EEPROM.writeUInt(EE_UINT16_FREQUENCY_MW, frequency_MW); EEPROM.writeUInt(EE_UINT16_FREQUENCY_SW, frequency_SW); +#ifdef HAS_AIR_BAND + EEPROM.writeUInt(EE_UINT16_FREQUENCY_AIR, frequency_AIR); +#endif EEPROM.commit(); } -void LimitAMFrequency() { +void LimitAMFrequency() {//todo air switch (band) { case BAND_LW: frequency_AM = frequency_LW; @@ -1853,10 +2038,21 @@ void SelectBand() { case BAND_LW: freqold = frequency_LW; frequency_AM = frequency_LW; break; case BAND_MW: freqold = frequency_MW; frequency_AM = frequency_MW; break; case BAND_SW: freqold = frequency_SW; frequency_AM = frequency_SW; break; +#ifdef HAS_AIR_BAND + case BAND_AIR: freqold = frequency_AIR; frequency_AM = frequency_AIR;break; +#endif } LimitAMFrequency(); if (!externaltune) CheckBandForbiddenAM(); +#ifdef HAS_AIR_BAND + if (band == BAND_AIR) { + radio.SetFreqAIR(10700); + } else { + radio.SetFreqAM(frequency_AM); + } +#else radio.SetFreqAM(frequency_AM); +#endif radio.setAMAttenuation(amgain); radio.setAMCoChannel(amcodect, amcodectcount); doBW(); @@ -1876,6 +2072,9 @@ void SelectBand() { tftPrint(0, "iMS", 265, 59, GreyoutColor, BackgroundColor, 16); tft.drawRoundRect(286, 56, 32, 20, 5, GreyoutColor); tftPrint(0, "EQ", 303, 59, GreyoutColor, BackgroundColor, 16); + // todo + // if (band == AM_BAND_AIR) tftPrint(-1, "MHz", 258, 76, ActiveColor, ActiveColorSmooth, 28); + // else tftPrint(-1, "KHz", 258, 76, ActiveColor, ActiveColorSmooth, 28); } } else { if (tunemode == TUNE_MI_BAND) tunemode = TUNE_MAN; @@ -2111,7 +2310,7 @@ void Round5K(unsigned int freqAM) { } } -void RoundStep() { +void RoundStep() {//todo air if (band == BAND_FM) { unsigned int freq = frequency; switch (fmdefaultstepsize) { @@ -2166,7 +2365,7 @@ void ButtonPress() { EEPROM.writeByte(memorypos + EE_PRESETS_BAND_START, band); EEPROM.writeByte(memorypos + EE_PRESET_BW_START, BWset); EEPROM.writeByte(memorypos + EE_PRESET_MS_START, StereoToggle); - if (band == BAND_FM) { + if (band == BAND_FM) {//todo air EEPROM.writeUInt((memorypos * 4) + EE_PRESETS_FREQUENCY_START, frequency); } else if (band == BAND_OIRT) { EEPROM.writeUInt((memorypos * 4) + EE_PRESETS_FREQUENCY_START, frequency_OIRT); @@ -2200,7 +2399,7 @@ void ButtonPress() { EEPROM.commit(); - if (band == BAND_FM) { + if (band == BAND_FM) {//todo air presets[memorypos].frequency = frequency; } else if (band == BAND_OIRT) { presets[memorypos].frequency = frequency_OIRT; @@ -2506,22 +2705,36 @@ void DoMemoryPosTune() { band = presets[memorypos].band; } - if (band == BAND_FM) { - frequency = presets[memorypos].frequency; - radio.SetFreq(frequency); - } else if (band == BAND_OIRT) { - frequency_OIRT = presets[memorypos].frequency; - radio.SetFreq(frequency_OIRT); - } else if (band == BAND_LW) { - frequency_LW = presets[memorypos].frequency; - radio.SetFreqAM(frequency_LW); - } else if (band == BAND_MW) { - frequency_MW = presets[memorypos].frequency; - radio.SetFreqAM(frequency_MW); - } else if (band == BAND_SW) { - frequency_SW = presets[memorypos].frequency; - radio.SetFreqAM(frequency_SW); + switch (band) { + case BAND_FM: + frequency = presets[memorypos].frequency; + radio.SetFreq(frequency); + break; + case BAND_OIRT: + frequency = presets[memorypos].frequency; + radio.SetFreq(frequency_OIRT); + break; + case BAND_LW: + frequency = presets[memorypos].frequency; + radio.SetFreq(frequency_LW); + break; + case BAND_MW: + frequency = presets[memorypos].frequency; + radio.SetFreq(frequency_MW); + break; + case BAND_SW: + frequency = presets[memorypos].frequency; + radio.SetFreq(frequency_SW); + break; +#ifdef HAS_AIR_BAND + case BAND_AIR: + frequency = presets[memorypos].frequency; + // radio.SetFreq(frequency_AIR); // todo + radio.SetFreqAM(10700); // todo + break; +#endif } + ShowFreq(0); if (band == BAND_FM || band == BAND_OIRT) { @@ -2593,6 +2806,9 @@ void ShowFreq(int mode) { case BAND_LW: frequency_AM = frequency_LW; break; case BAND_MW: frequency_AM = frequency_MW; break; case BAND_SW: frequency_AM = frequency_SW; break; +#ifdef HAS_AIR_BAND + case BAND_AIR: frequency_AM = frequency_AIR; break; // todo air +#endif } if (!screenmute) { @@ -2609,7 +2825,11 @@ void ShowFreq(int mode) { FrequencySprite.setTextDatum(TR_DATUM); FrequencySprite.setTextColor(FreqColor, FreqColorSmooth, false); - FrequencySprite.drawString(String(frequency_AM) + " ", 218, -6); + if (band == BAND_AIR) { + FrequencySprite.drawString(String(frequency_AM / 1000) + "." + String(frequency_AM % 1000) + " ", 218, -6); + } else { + FrequencySprite.drawString(String(frequency_AM) + " ", 218, -6); + } FrequencySprite.unloadFont(); FrequencySprite.setTextColor(PrimaryColor, PrimaryColorSmooth, false); FrequencySprite.setTextDatum(TL_DATUM); @@ -3071,7 +3291,7 @@ void doSquelch() { SquelchSprite.unloadFont(); } -void updateBW() { +void updateBW() {//todo air if (BWset == 0) { if (!screenmute && !advancedRDS && !afscreen) { tft.drawRoundRect(248, 35, 71, 20, 5, ActiveColor); @@ -3123,7 +3343,8 @@ void updateEQ() { } void updateCodetect() { - if (band > BAND_GAP) { + if ( + band > BAND_GAP && band != BAND_AIR) { if (WAM) { tftPrint(-1, "CO", 50, 61, PrimaryColor, PrimaryColorSmooth, 16); } else { @@ -3433,10 +3654,17 @@ void TuneUp() { } else if (frequency_AM < MWLowEdgeSet) { temp = FREQ_MW_STEP_9K; frequency_AM = (frequency_AM / FREQ_MW_STEP_9K) * FREQ_MW_STEP_9K; - } else { + } else if (frequency_AM < SWHighEdgeSet && frequency_AM > SWLowEdgeSet) { temp = FREQ_SW_STEP_5K; frequency_AM = (frequency_AM / FREQ_SW_STEP_5K) * FREQ_SW_STEP_5K; } +#ifdef HAS_AIR_BAND + else if (frequency_AM < AIRHighEdgeSet && frequency_AM > AIRLowEdgeSet) { + + if (airstepsize == 0) temp = FREQ_AIR_STEP_25K; + else temp = FREQ_AIR_STEP_8K33; + } +#endif } else { if (band == BAND_OIRT) { temp = FREQ_OIRT_STEP_30K; @@ -3501,6 +3729,17 @@ void TuneUp() { radio.SetFreqAM(frequency_AM); frequency_SW = frequency_AM; } +#ifdef HAS_AIR_BAND + else if (band == BAND_AIR) { + frequency_AM += temp; + if (frequency_AIR > AIRHighEdgeSet) { + frequency_AM = AIRLowEdgeSet; + if (edgebeep) EdgeBeeper(); + } + radio.SetFreqAM(frequency_AM); + frequency_AIR = frequency_AM; + } +#endif radio.clearRDS(fullsearchrds); if (RDSSPYUSB) Serial.print("G:\r\nRESET-------\r\n\r\n"); if (RDSSPYTCP) RemoteClient.print("G:\r\nRESET-------\r\n\r\n"); @@ -3759,6 +3998,9 @@ void DefaultSettings(byte userhardwaremodel) { if (userhardwaremodel == BASE_ILI9341) EEPROM.writeUInt(EE_UINT16_FREQUENCY_LW, 180); else EEPROM.writeUInt(EE_UINT16_FREQUENCY_LW, 164); if (userhardwaremodel == BASE_ILI9341) EEPROM.writeUInt(EE_UINT16_FREQUENCY_MW, 540); else EEPROM.writeUInt(EE_UINT16_FREQUENCY_MW, 639); if (userhardwaremodel == BASE_ILI9341) EEPROM.writeUInt(EE_UINT16_FREQUENCY_SW, 1800); else EEPROM.writeUInt(EE_UINT16_FREQUENCY_SW, 5000); +#ifdef HAS_AIR_BAND + EEPROM.writeUInt(EE_UINT16_FREQUENCY_AIR, 135350); +#endif EEPROM.writeString(EE_STRING_XDRGTK_KEY, "password"); if (userhardwaremodel == BASE_ILI9341) EEPROM.writeByte(EE_BYTE_USESQUELCH, 1); else EEPROM.writeByte(EE_BYTE_USESQUELCH, 0); EEPROM.writeByte(EE_BYTE_SHOWMODULATION, 1); @@ -3790,6 +4032,9 @@ void DefaultSettings(byte userhardwaremodel) { EEPROM.writeByte(EE_BYTE_FASTPS, 1); EEPROM.writeByte(EE_BYTE_TOT, 0); EEPROM.writeByte(EE_BYTE_MWREGION, 0); +#ifdef HAS_AIR_BAND + EEPROM.writeByte(EE_BYTE_AIRSTEPSIZE, 0); +#endif EEPROM.writeByte(EE_BYTE_SPISPEED, 0); EEPROM.writeByte(EE_BYTE_AMSCANSENS, 4); EEPROM.writeByte(EE_BYTE_FMSCANSENS, 4); @@ -4016,6 +4261,9 @@ void endMenu() { EEPROM.writeByte(EE_BYTE_FASTPS, radio.rds.fastps); EEPROM.writeByte(EE_BYTE_TOT, tot); EEPROM.writeByte(EE_BYTE_MWREGION, mwstepsize); +#ifdef HAS_AIR_BAND + EEPROM.writeByte(EE_BYTE_AIRSTEPSIZE, airstepsize); +#endif EEPROM.writeByte(EE_BYTE_SPISPEED, spispeed); EEPROM.writeByte(EE_BYTE_AMSCANSENS, amscansens); EEPROM.writeByte(EE_BYTE_FMSCANSENS, fmscansens); diff --git a/src/TEF6686.cpp b/src/TEF6686.cpp index 1327463..2a084dd 100644 --- a/src/TEF6686.cpp +++ b/src/TEF6686.cpp @@ -135,16 +135,16 @@ void TEF6686::init(byte TEF) { if (xtalADC < XTAL_0V_ADC + XTAL_ADC_TOL) { Tuner_Init(tuner_init_tab9216); - log_v("XTAL : 9.216M"); + log_d("TEF668X XTAL : 9.216M"); } else if (xtalADC > XTAL_1V_ADC - XTAL_ADC_TOL && xtalADC < XTAL_1V_ADC + XTAL_ADC_TOL) { Tuner_Init(tuner_init_tab12000); - log_v("XTAL : 12M"); + log_d("TEF668X XTAL : 12M"); } else if (xtalADC > XTAL_2V_ADC - XTAL_ADC_TOL && xtalADC < XTAL_2V_ADC + XTAL_ADC_TOL) { Tuner_Init(tuner_init_tab55000); - log_v("XTAL : 55M"); + log_d("TEF668X XTAL : 55M"); } else { Tuner_Init(tuner_init_tab4000); - log_v("XTAL : 4M"); + log_d("TEF668X XTAL : 4M"); } power(1); Tuner_Init(tuner_init_tab); @@ -178,6 +178,10 @@ void TEF6686::SetFreqAM(uint16_t frequency) { devTEF_Radio_Tune_AM (frequency); } +void TEF6686::SetFreqAIR(uint16_t frequency) { + devTEF_Radio_Tune_AM (10700); +} + void TEF6686::setOffset(int8_t offset) { devTEF_Radio_Set_LevelOffset(offset * 10); } diff --git a/src/TEF6686.h b/src/TEF6686.h index ec33c13..2d461ef 100644 --- a/src/TEF6686.h +++ b/src/TEF6686.h @@ -660,6 +660,7 @@ class TEF6686 { void readRDS(byte showrdserrors); void SetFreq(uint16_t frequency); void SetFreqAM(uint16_t frequency); + void SetFreqAIR(uint16_t frequency); bool getProcessing(uint16_t &highcut, uint16_t &stereo, uint16_t &sthiblend, uint8_t &stband_1, uint8_t &stband_2, uint8_t &stband_3, uint8_t &stband_4); bool getStatus(int16_t &level, uint16_t &USN, uint16_t &WAM, int16_t &offset, uint16_t &bandwidth, uint16_t &modulation, int8_t &snr); bool getStatusAM(int16_t &level, uint16_t &noise, uint16_t &cochannel, int16_t &offset, uint16_t &bandwidth, uint16_t &modulation, int8_t &snr); diff --git a/src/config.h b/src/config.h new file mode 100644 index 0000000..53da484 --- /dev/null +++ b/src/config.h @@ -0,0 +1,9 @@ +#ifndef CONFIG_H +#define CONFIG_H + +#include + +// #define HAS_AIR_BAND // uncomment to enable Air Band(Make sure you have Air Band extend board) +#define CHINA_PORTABLE // uncomment for China Portable build (Simplified Chinese) + +#endif \ No newline at end of file diff --git a/src/constants.h b/src/constants.h index 43c9266..cfd6202 100644 --- a/src/constants.h +++ b/src/constants.h @@ -1,3 +1,5 @@ +#include "config.h" + #define ON 1 #define OFF 0 #define REVERSE false @@ -33,6 +35,10 @@ #define FREQ_MW_STEP_9K 9 #define FREQ_MW_STEP_10K 10 #define FREQ_SW_STEP_5K 5 +#ifdef HAS_AIR_BAND +#define FREQ_AIR_STEP_25K 25 +#define FREQ_AIR_STEP_8K33 8.33 +#endif #define FREQ_OIRT_STEP_30K 3 #define FREQ_FM_STEP_50K 5 #define FREQ_FM_STEP_100K 10 @@ -48,6 +54,10 @@ #define FREQ_SW_LOW_EDGE_MAX (FREQ_SW_160M_START) #define FREQ_SW_HIGH_EDGE_MIN (FREQ_SW_11M_END) #define FREQ_SW_HIGH_EDGE_MAX (FREQ_SW_END) +#ifdef HAS_AIR_BAND +#define FREQ_AIR_LOW_EDGE_MIN 108000 +#define FREQ_AIR_HIGH_EDGE_MIN 137000 +#endif #define FREQ_FM_START 65000 #define FREQ_FM_END 108000 #define FREQ_FM_OIRT_START 6500 // use values of 1/10 * kHz @@ -196,9 +206,13 @@ // EEPROM index defines #define EE_PRESETS_CNT 99 // When set > 99 change the complete EEPROM adressing! -#define EE_CHECKBYTE_VALUE 7 // 0 ~ 255,add new entry, change for new value +#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 2219 // Total occupied eeprom bytes +#else #define EE_TOTAL_CNT 2214 // Total occupied eeprom bytes +#endif #define EE_PRESETS_BAND_START 0 // 99 * 1 byte #define EE_PRESET_BW_START 99 // 99 * 1 byte @@ -296,6 +310,10 @@ #define EE_BYTE_SCANMEM 2211 #define EE_BYTE_SCANCANCEL 2212 #define EE_BYTE_SCANMUTE 2213 +#ifdef HAS_AIR_BAND +#define EE_BYTE_AIRSTEPSIZE 2114 +#define EE_UINT16_FREQUENCY_AIR 2215 +#endif // End of EEPROM index defines static const char* const unitString[] = {"dBμV", "dBf", "dBm"}; @@ -319,15 +337,28 @@ enum SCAN_CANCEL { // 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 + BAND_OIRT = 0, BAND_FM, BAND_GAP, BAND_LW, BAND_MW, BAND_SW, BAND_AIR }; +#ifndef HAS_AIR_BAND // Toggle: LW -> MW -> SW enum RADIO_AM_BAND_SELECTION { AM_BAND_ALL = 0, AM_BAND_LW_MW, AM_BAND_LW_SW, AM_BAND_MW_SW, AM_BAND_LW, AM_BAND_MW, AM_BAND_SW, AM_BAND_NONE, AM_BAND_CNT }; +#else +// Toggle: LW -> MW -> SW -> AIR +enum RADIO_AM_BAND_SELECTION { + AM_BAND_ALL = 0, + AM_BAND_LW_MW_SW, AM_BAND_LW_MW_AIR, AM_BAND_LW_SW_AIR, AM_BAND_MW_SW_AIR, + AM_BAND_LW_MW, AM_BAND_LW_SW, AM_BAND_LW_AIR, + AM_BAND_MW_SW, AM_BAND_MW_AIR, + AM_BAND_SW_AIR, + AM_BAND_LW, AM_BAND_MW, AM_BAND_SW, AM_BAND_AIR, AM_BAND_NONE, + AM_BAND_CNT +}; +#endif /* end of HAS_AIR_BAND */ // Toggle: OIRT -> FM enum RADIO_FM_BAND_SELECTION { diff --git a/src/gui.cpp b/src/gui.cpp index 52a82cb..d2ed284 100644 --- a/src/gui.cpp +++ b/src/gui.cpp @@ -1,6 +1,7 @@ #include "gui.h" #include "language.h" #include "constants.h" +#include "config.h" #include #include #include @@ -1193,7 +1194,27 @@ void ShowOneLine(byte position, byte item, bool selected) { FullLineSprite.setTextDatum(TR_DATUM); FullLineSprite.setTextColor(PrimaryColor, PrimaryColorSmooth, false); - +#ifdef HAS_AIR_BAND + switch (bandAM) { + case AM_BAND_ALL: FullLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][103] + String(",") + myLanguage[language][104] + String(",") + myLanguage[language][223], 298, 3); break; + case AM_BAND_LW_MW_SW: FullLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][103] + String(",") + myLanguage[language][104], 298, 3); break; + case AM_BAND_LW_MW_AIR: FullLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][103] + String(",") + myLanguage[language][223], 298, 3); break; + case AM_BAND_LW_SW_AIR: FullLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][104] + String(",") + myLanguage[language][223], 298, 3); break; + case AM_BAND_MW_SW_AIR: FullLineSprite.drawString(myLanguage[language][103] + String(",") + myLanguage[language][104] + String(",") + myLanguage[language][223], 298, 3); break; + case AM_BAND_LW_MW: FullLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][103], 298, 3); break; + case AM_BAND_LW_SW: FullLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][104], 298, 3); break; + case AM_BAND_LW_AIR: FullLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][223], 298, 3); break; + case AM_BAND_MW_SW: FullLineSprite.drawString(myLanguage[language][103] + String(",") + myLanguage[language][104], 298, 3); break; + case AM_BAND_MW_AIR: FullLineSprite.drawString(myLanguage[language][103] + String(",") + myLanguage[language][223], 298, 3); break; + case AM_BAND_SW_AIR: FullLineSprite.drawString(myLanguage[language][104] + String(",") + myLanguage[language][223], 298, 3); break; + case AM_BAND_LW: FullLineSprite.drawString(myLanguage[language][102], 298, 3); break; + case AM_BAND_MW: FullLineSprite.drawString(myLanguage[language][103], 298, 3); break; + case AM_BAND_SW: FullLineSprite.drawString(myLanguage[language][104], 298, 3); break; + case AM_BAND_AIR: FullLineSprite.drawString(myLanguage[language][223], 298, 3); break; + case AM_BAND_NONE: FullLineSprite.drawString(myLanguage[language][83], 298, 3); break; + } + break; +#else switch (bandAM) { case AM_BAND_ALL: FullLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][103] + String(",") + myLanguage[language][104], 298, 3); break; case AM_BAND_LW_MW: FullLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][103], 298, 3); break; @@ -1204,7 +1225,8 @@ void ShowOneLine(byte position, byte item, bool selected) { case AM_BAND_SW: FullLineSprite.drawString(myLanguage[language][104], 298, 3); break; case AM_BAND_NONE: FullLineSprite.drawString(myLanguage[language][83], 298, 3); break; } - break; + break; +#endif case DISPLAYSETTINGS: FullLineSprite.setTextDatum(TL_DATUM); @@ -1618,10 +1640,22 @@ void BuildDisplay() { case BAND_LW: tftPrint(-1, myLanguage[language][102], 70, 32, bandColor, PrimaryColorSmooth, 16); break; case BAND_MW: tftPrint(-1, myLanguage[language][103], 70, 32, bandColor, PrimaryColorSmooth, 16); break; case BAND_SW: tftPrint(-1, myLanguage[language][104], 70, 32, bandColor, PrimaryColorSmooth, 16); break; +#ifdef HAS_AIR_BAND + case BAND_AIR: tftPrint(-1, myLanguage[language][223], 70, 32, bandColor, PrimaryColorSmooth, 16); break; +#endif case BAND_FM: tftPrint(-1, myLanguage[language][105], 70, 32, bandColor, PrimaryColorSmooth, 16); break; case BAND_OIRT: tftPrint(-1, myLanguage[language][106], 70, 32, bandColor, PrimaryColorSmooth, 16); break; } - if (band < BAND_GAP) tftPrint(-1, "MHz", 258, 76, ActiveColor, ActiveColorSmooth, 28); else tftPrint(-1, "kHz", 258, 76, ActiveColor, ActiveColorSmooth, 28); + if (band < BAND_GAP) tftPrint(-1, "MHz", 258, 76, ActiveColor, ActiveColorSmooth, 28); + else { +#ifdef HAS_AIR_BAND + if (band == AM_BAND_AIR) + tftPrint(-1, "MHz", 258, 76, ActiveColor, ActiveColorSmooth, 28); + else tftPrint(-1, "KHz", 258, 76, ActiveColor, ActiveColorSmooth, 28); +#else + tftPrint(-1, "KHz", 258, 76, ActiveColor, ActiveColorSmooth, 28); +#endif + } RDSstatusold = false; Stereostatusold = false; @@ -1785,7 +1819,26 @@ void MenuUp() { case ITEM8: bandAM++; if (bandAM > AM_BAND_CNT - 1) bandAM = AM_BAND_ALL; - +#ifdef HAS_AIR_BAND + switch (bandAM) { + case AM_BAND_ALL: OneBigLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][103] + String(",") + myLanguage[language][104]+ String(",") + myLanguage[language][223], 135, 0); break; + case AM_BAND_LW_MW_SW: OneBigLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][103] + String(",") + myLanguage[language][104], 135, 0); break; + case AM_BAND_LW_MW_AIR: OneBigLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][103] + String(",") + myLanguage[language][223], 135, 0); break; + case AM_BAND_LW_SW_AIR: OneBigLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][104] + String(",") + myLanguage[language][223], 135, 0); break; + case AM_BAND_MW_SW_AIR: OneBigLineSprite.drawString(myLanguage[language][103] + String(",") + myLanguage[language][104] + String(",") + myLanguage[language][223], 135, 0); break; + case AM_BAND_LW_MW: OneBigLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][103], 135, 0); break; + case AM_BAND_LW_SW: OneBigLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][104], 135, 0); break; + case AM_BAND_LW_AIR: OneBigLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][223], 135, 0); break; + case AM_BAND_MW_SW: OneBigLineSprite.drawString(myLanguage[language][103] + String(",") + myLanguage[language][104], 135, 0); break; + case AM_BAND_MW_AIR: OneBigLineSprite.drawString(myLanguage[language][103] + String(",") + myLanguage[language][223], 135, 0); break; + case AM_BAND_SW_AIR: OneBigLineSprite.drawString(myLanguage[language][104] + String(",") + myLanguage[language][223], 135, 0); break; + case AM_BAND_LW: OneBigLineSprite.drawString(myLanguage[language][102], 135, 0); break; + case AM_BAND_MW: OneBigLineSprite.drawString(myLanguage[language][103], 135, 0); break; + case AM_BAND_SW: OneBigLineSprite.drawString(myLanguage[language][104], 135, 0); break; + case AM_BAND_AIR: OneBigLineSprite.drawString(myLanguage[language][223], 135, 0); break; + case AM_BAND_NONE: OneBigLineSprite.drawString(myLanguage[language][83], 135, 0); break; + } +#else switch (bandAM) { case AM_BAND_ALL: OneBigLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][103] + String(",") + myLanguage[language][104], 135, 0); break; case AM_BAND_LW_MW: OneBigLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][103], 135, 0); break; @@ -1796,7 +1849,7 @@ void MenuUp() { case AM_BAND_SW: OneBigLineSprite.drawString(myLanguage[language][104], 135, 0); break; case AM_BAND_NONE: OneBigLineSprite.drawString(myLanguage[language][83], 135, 0); break; } - +#endif OneBigLineSprite.pushSprite(24, 118); break; @@ -2589,6 +2642,26 @@ void MenuDown() { bandAM--; if (bandAM > AM_BAND_CNT) bandAM = AM_BAND_NONE; +#ifdef HAS_AIR_BAND + switch (bandAM) { + case AM_BAND_ALL: OneBigLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][103] + String(",") + myLanguage[language][104]+ String(",") + myLanguage[language][223], 135, 0); break; + case AM_BAND_LW_MW_SW: OneBigLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][103] + String(",") + myLanguage[language][104], 135, 0); break; + case AM_BAND_LW_MW_AIR: OneBigLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][103] + String(",") + myLanguage[language][223], 135, 0); break; + case AM_BAND_LW_SW_AIR: OneBigLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][104] + String(",") + myLanguage[language][223], 135, 0); break; + case AM_BAND_MW_SW_AIR: OneBigLineSprite.drawString(myLanguage[language][103] + String(",") + myLanguage[language][104] + String(",") + myLanguage[language][223], 135, 0); break; + case AM_BAND_LW_MW: OneBigLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][103], 135, 0); break; + case AM_BAND_LW_SW: OneBigLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][104], 135, 0); break; + case AM_BAND_LW_AIR: OneBigLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][223], 135, 0); break; + case AM_BAND_MW_SW: OneBigLineSprite.drawString(myLanguage[language][103] + String(",") + myLanguage[language][104], 135, 0); break; + case AM_BAND_MW_AIR: OneBigLineSprite.drawString(myLanguage[language][103] + String(",") + myLanguage[language][223], 135, 0); break; + case AM_BAND_SW_AIR: OneBigLineSprite.drawString(myLanguage[language][104] + String(",") + myLanguage[language][223], 135, 0); break; + case AM_BAND_LW: OneBigLineSprite.drawString(myLanguage[language][102], 135, 0); break; + case AM_BAND_MW: OneBigLineSprite.drawString(myLanguage[language][103], 135, 0); break; + case AM_BAND_SW: OneBigLineSprite.drawString(myLanguage[language][104], 135, 0); break; + case AM_BAND_AIR: OneBigLineSprite.drawString(myLanguage[language][223], 135, 0); break; + case AM_BAND_NONE: OneBigLineSprite.drawString(myLanguage[language][83], 135, 0); break; + } +#else switch (bandAM) { case AM_BAND_ALL: OneBigLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][103] + String(",") + myLanguage[language][104], 135, 0); break; case AM_BAND_LW_MW: OneBigLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][103], 135, 0); break; @@ -2599,6 +2672,8 @@ void MenuDown() { case AM_BAND_SW: OneBigLineSprite.drawString(myLanguage[language][104], 135, 0); break; case AM_BAND_NONE: OneBigLineSprite.drawString(myLanguage[language][83], 135, 0); break; } +#endif + OneBigLineSprite.pushSprite(24, 118); break; @@ -3101,6 +3176,7 @@ void MenuDown() { OneBigLineSprite.drawString((showSWMIBand ? myLanguage[language][42] : myLanguage[language][30]), 135, 0); OneBigLineSprite.pushSprite(24, 118); + break; case ITEM5: @@ -3455,6 +3531,26 @@ void DoMenu() { case ITEM8: Infoboxprint(myLanguage[language][101]); +#ifdef HAS_AIR_BAND + switch (bandAM) { + case AM_BAND_ALL: OneBigLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][103] + String(",") + myLanguage[language][104]+ String(",") + myLanguage[language][223], 135, 0); break; + case AM_BAND_LW_MW_SW: OneBigLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][103] + String(",") + myLanguage[language][104], 135, 0); break; + case AM_BAND_LW_MW_AIR: OneBigLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][103] + String(",") + myLanguage[language][223], 135, 0); break; + case AM_BAND_LW_SW_AIR: OneBigLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][104] + String(",") + myLanguage[language][223], 135, 0); break; + case AM_BAND_MW_SW_AIR: OneBigLineSprite.drawString(myLanguage[language][103] + String(",") + myLanguage[language][104] + String(",") + myLanguage[language][223], 135, 0); break; + case AM_BAND_LW_MW: OneBigLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][103], 135, 0); break; + case AM_BAND_LW_SW: OneBigLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][104], 135, 0); break; + case AM_BAND_LW_AIR: OneBigLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][223], 135, 0); break; + case AM_BAND_MW_SW: OneBigLineSprite.drawString(myLanguage[language][103] + String(",") + myLanguage[language][104], 135, 0); break; + case AM_BAND_MW_AIR: OneBigLineSprite.drawString(myLanguage[language][103] + String(",") + myLanguage[language][223], 135, 0); break; + case AM_BAND_SW_AIR: OneBigLineSprite.drawString(myLanguage[language][104] + String(",") + myLanguage[language][223], 135, 0); break; + case AM_BAND_LW: OneBigLineSprite.drawString(myLanguage[language][102], 135, 0); break; + case AM_BAND_MW: OneBigLineSprite.drawString(myLanguage[language][103], 135, 0); break; + case AM_BAND_SW: OneBigLineSprite.drawString(myLanguage[language][104], 135, 0); break; + case AM_BAND_AIR: OneBigLineSprite.drawString(myLanguage[language][223], 135, 0); break; + case AM_BAND_NONE: OneBigLineSprite.drawString(myLanguage[language][83], 135, 0); break; + } +#else switch (bandAM) { case AM_BAND_ALL: OneBigLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][103] + String(",") + myLanguage[language][104], 135, 0); break; case AM_BAND_LW_MW: OneBigLineSprite.drawString(myLanguage[language][102] + String(",") + myLanguage[language][103], 135, 0); break; @@ -3465,6 +3561,8 @@ void DoMenu() { case AM_BAND_SW: OneBigLineSprite.drawString(myLanguage[language][104], 135, 0); break; case AM_BAND_NONE: OneBigLineSprite.drawString(myLanguage[language][83], 135, 0); break; } +#endif + OneBigLineSprite.pushSprite(24, 118); break; diff --git a/src/language.h b/src/language.h index 125dc9d..7ad66fc 100644 --- a/src/language.h +++ b/src/language.h @@ -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][223] PROGMEM = { +static const char* const myLanguage[18][224] PROGMEM = { { "English", // English "Rotary direction changed", // 1 "Please release button", // 2 @@ -228,7 +228,8 @@ static const char* const myLanguage[18][223] PROGMEM = { "Auto cancel scan", // 219 "Correct PI", // 220 "Signal", // 221 - "Mute audio\nwhile scanning" // 222 + "Mute audio\nwhile scanning", // 222 + "AIR" // 223 }, { "Nederlands", // Dutch @@ -453,7 +454,8 @@ static const char* const myLanguage[18][223] PROGMEM = { "Auto afbreken", // 219 "Correcte PI", // 220 "Signaal", // 221 - "Geen geluid\ntijdens scannen" // 222 + "Geen geluid\ntijdens scannen", // 222 + "AIR" // 223 }, { "Polski", // Polish @@ -678,7 +680,8 @@ static const char* const myLanguage[18][223] PROGMEM = { "Automatyczne\nanulowanie skanowania", // 219 "Poprawne PI", // 220 "Sygnał", // 221 - "Wycisz dźwięk\npodczas skanowania" // 222 + "Wycisz dźwięk\npodczas skanowania", // 222 + "AIR" // 223 }, { "Hrvatski", // Croatian @@ -903,7 +906,8 @@ static const char* const myLanguage[18][223] PROGMEM = { "Auto cancel scan", // 219 "Correct PI", // 220 "Signal", // 221 - "Mute audio\nwhile scanning" // 222 + "Mute audio\nwhile scanning", // 222 + "AIR" // 223 }, { "Ελληνικά", // Greek @@ -1128,7 +1132,8 @@ static const char* const myLanguage[18][223] PROGMEM = { "Αυτόματη ακύρωση\nανίχνευσης", // 219 "Σωστό PI", // 220 "Σήμα", // 221 - "Σίγαση ήχου\nκατά την ανίχνευση" // 222 + "Σίγαση ήχου\nκατά την ανίχνευση", // 222 + "AIR" // 223 }, { "Română", // Romanian @@ -1353,7 +1358,8 @@ static const char* const myLanguage[18][223] PROGMEM = { "Auto cancel scan", // 219 "Correct PI", // 220 "Signal", // 221 - "Mute audio\nwhile scanning" // 222 + "Mute audio\nwhile scanning", // 222 + "AIR" // 223 }, { "Deutsch", // German @@ -1578,7 +1584,8 @@ static const char* const myLanguage[18][223] PROGMEM = { "Automatisches Scan-Ende", // 219 "Korrekter PI-Code", // 220 "Signal", // 221 - "Stumm beim Scannen" // 222 + "Stumm beim Scannen", // 222 + "AIR" // 223 }, { "Český", // Czech @@ -1803,7 +1810,8 @@ static const char* const myLanguage[18][223] PROGMEM = { "Auto cancel scan", // 219 "Correct PI", // 220 "Signal", // 221 - "Mute audio\nwhile scanning" // 222 + "Mute audio\nwhile scanning", // 222 + "AIR" // 223 }, { "Slovenský", // Slovak @@ -2028,7 +2036,8 @@ static const char* const myLanguage[18][223] PROGMEM = { "Auto cancel scan", // 219 "Correct PI", // 220 "Signal", // 221 - "Mute audio\nwhile scanning" // 222 + "Mute audio\nwhile scanning", // 222 + "AIR" // 223 }, { "Français", // French @@ -2253,7 +2262,8 @@ static const char* const myLanguage[18][223] PROGMEM = { "Annuler automatiquement", // 219 "PI Correct", // 220 "Signal", // 221 - "Audio muet lors\nde la numérisation" // 222 + "Audio muet lors\nde la numérisation", // 222 + "AIR" // 223 }, { "Български", // Bulgarian @@ -2478,7 +2488,8 @@ static const char* const myLanguage[18][223] PROGMEM = { "Auto cancel scan", // 219 "Correct PI", // 220 "Signal", // 221 - "Mute audio\nwhile scanning" // 222 + "Mute audio\nwhile scanning", // 222 + "AIR" // 223 }, { "Русский", // Russian @@ -2703,7 +2714,8 @@ static const char* const myLanguage[18][223] PROGMEM = { "Автоматическая отмена \nсканирования", // 219 "При корректном PI", // 220 "При наличии сигнала", // 221 - "Отключать аудио\nпри сканировании" // 222 + "Отключать аудио\nпри сканировании", // 222 + "AIR" // 223 }, { "Українська", // Ukranian @@ -2928,7 +2940,8 @@ static const char* const myLanguage[18][223] PROGMEM = { "Auto cancel scan", // 219 "Correct PI", // 220 "Signal", // 221 - "Mute audio\nwhile scanning" // 222 + "Mute audio\nwhile scanning", // 222 + "AIR" // 223 }, { "Italiano", // Italian @@ -3153,7 +3166,8 @@ static const char* const myLanguage[18][223] PROGMEM = { "Fine scansione automatica", // 219 "PI corretto", // 220 "Signale", // 221 - "Audio silenziato\ndurante scansione" // 222 + "Audio silenziato\ndurante scansione", // 222 + "AIR" // 223 }, { "Simplified Chinese", // Simplified Chinese @@ -3378,7 +3392,8 @@ static const char* const myLanguage[18][223] PROGMEM = { "扫频停台条件", // 219 "节目识别码正确", // 220 "信号超阈值", // 221 - "扫描时静音" // 222 + "扫描时静音", // 222 + "AIR" // 223 }, { "Norsk", // Norwegian @@ -3603,7 +3618,8 @@ static const char* const myLanguage[18][223] PROGMEM = { "Avbryt skanning automatisk", // 219 "korrekt PI", // 220 "Signal", // 221 - "Demp lyden\nmens du skanner" // 222 + "Demp lyden\nmens du skanner", // 222 + "AIR" // 223 }, { "Español", // Spanish @@ -3828,7 +3844,8 @@ static const char* const myLanguage[18][223] PROGMEM = { "Cancelar automáticamente\nla búsqueda", // 219 "PI correcto", // 220 "Señal", // 221 - "Audio mudo\nmientras busca" // 222 + "Audio mudo\nmientras busca", // 222 + "AIR" // 223 }, { "Português", // Portuguese @@ -4053,7 +4070,8 @@ static const char* const myLanguage[18][223] PROGMEM = { "Cancelar automatic.\na pesquisa", // 219 "PI correto", // 220 "Sinal", // 221 - "Mudo áudio\nenquanto procura" // 222 + "Mudo áudio\nenquanto procura", // 222 + "AIR" // 223 } }; #endif