Merge pull request #110 from ohmytime/New_OIRT

This commit is contained in:
Sjef Verhoeven PE5PVB
2023-07-23 09:46:21 +02:00
committed by GitHub
4 changed files with 560 additions and 157 deletions
+415 -134
View File
@@ -101,6 +101,9 @@ byte afpagenr;
byte amnb;
byte audiomode;
byte band;
byte bandAM;
byte bandFM;
byte bandforbidden;
byte battery;
byte batteryold;
byte BWset;
@@ -241,6 +244,7 @@ unsigned int change;
unsigned int ConverterSet;
unsigned int freq_scan;
unsigned int frequency;
unsigned int frequency_OIRT;
unsigned int frequency_AM;
unsigned int frequency_LW;
unsigned int frequency_MIBand_11M; // Surive before tuner restart
@@ -308,12 +312,15 @@ void setup() {
if (EEPROM.readByte(EE_BYTE_CHECKBYTE) != EE_CHECKBYTE_VALUE) DefaultSettings();
frequency = EEPROM.readUInt(EE_UINT16_FREQUENCY_FM);
frequency_OIRT = EEPROM.readUInt(EE_UINT16_FREQUENCY_OIRT);
VolSet = EEPROM.readInt(EE_BYTE_VOLSET);
ConverterSet = EEPROM.readUInt(EE_UINT16_CONVERTERSET);
LowEdgeSet = EEPROM.readUInt(EE_UINT16_FMLOWEDGESET);
HighEdgeSet = EEPROM.readUInt(EE_UINT16_FMHIGHEDGESET);
ContrastSet = EEPROM.readByte(EE_BYTE_CONTRASTSET);
StereoLevel = EEPROM.readByte(EE_BYTE_STEREOLEVEL);
bandFM = EEPROM.readByte(EE_BYTE_BANDFM);
bandAM = EEPROM.readByte(EE_BYTE_BANDAM);
HighCutLevel = EEPROM.readByte(EE_BYTE_HIGHCUTLEVEL);
HighCutOffset = EEPROM.readByte(EE_BYTE_HIGHCUTOFFSET);
LevelOffset = EEPROM.readByte(EE_BYTE_LEVELOFFSET);
@@ -352,8 +359,8 @@ void setup() {
fmnb = EEPROM.readByte(EE_BYTE_FM_NB);
audiomode = EEPROM.readByte(EE_BYTE_AUDIOMODE);
specialstepOIRT = EEPROM.readByte(EE_BYTE_OIRT);
LowEdgeOIRTSet = EEPROM.readUInt(EE_UINT16_LOWEDGEOIRTSET);
HighEdgeOIRTSet = EEPROM.readUInt(EE_UINT16_HIGHEDGEOIRTSET);
// LowEdgeOIRTSet = EEPROM.readUInt(EE_UINT16_LOWEDGEOIRTSET);
// HighEdgeOIRTSet = EEPROM.readUInt(EE_UINT16_HIGHEDGEOIRTSET);
colorinvert = EEPROM.readByte(EE_BYTE_COLORINVERT);
poweroptions = EEPROM.readByte(EE_BYTE_POWEROPTIONS);
CurrentTheme = EEPROM.readByte(EE_BYTE_CURRENTTHEME);
@@ -370,6 +377,11 @@ void setup() {
MWHighEdgeSet = region == 0 ? FREQ_MW_HIGH_EDGE_MAX_9K : FREQ_MW_HIGH_EDGE_MAX_10K; // later will read from flash
SWLowEdgeSet = FREQ_SW_LOW_EDGE_MIN;
SWHighEdgeSet = FREQ_SW_HIGH_EDGE_MAX;
if (LowEdgeOIRTSet < FREQ_FM_OIRT_START || LowEdgeOIRTSet > FREQ_FM_OIRT_END) LowEdgeOIRTSet = FREQ_FM_OIRT_START;
if (HighEdgeOIRTSet < FREQ_FM_OIRT_START || HighEdgeOIRTSet > FREQ_FM_OIRT_END) HighEdgeOIRTSet = FREQ_FM_OIRT_END;
LowEdgeOIRTSet = LowEdgeOIRTSet;
HighEdgeOIRTSet = FREQ_FM_OIRT_END;
for (int i = 0; i < EE_PRESETS_CNT; i++) memoryband[i] = EEPROM.readByte(i + EE_PRESETS_BAND_START);
for (int i = 0; i < EE_PRESETS_CNT; i++) memory[i] = EEPROM.readUInt((i * 4) + EE_PRESETS_START);
@@ -393,16 +405,13 @@ void setup() {
break;
case BAND_SW: frequency_SW = frequency_AM; break;
case BAND_FM:
if (specialstepOIRT) {
if (frequency >= (FREQ_FM_OIRT_START) && frequency <= (FREQ_FM_OIRT_END)) {
if (frequency % 3 != 0) {
Round30K(frequency);
}
}
} else {
if (frequency % 10 != 0) {
if (fmdefaultstepsize == 1) Round100K(frequency); else Round50K(frequency);
}
if (frequency % 10 != 0) {
if (fmdefaultstepsize == 1) Round100K(frequency); else Round50K(frequency);
}
break;
case BAND_OIRT:
if (frequency % FREQ_OIRT_STEP_30K != 0) {
Round30K(frequency_OIRT);
}
break;
default: break;
@@ -641,7 +650,7 @@ void loop() {
if (seek == true) Seek(direction);
if ((SStatus / 10 > LowLevelSet) && LowLevelInit == false && menu == false && band == BAND_FM) {
if ((SStatus / 10 > LowLevelSet) && LowLevelInit == false && menu == false && band < BAND_GAP) {
if (screenmute == false && !advancedRDS && !afscreen) {
if (showmodulation) {
tftPrint(-1, "10", 27, 144, ActiveColor, ActiveColorSmooth, FONT16);
@@ -668,7 +677,7 @@ void loop() {
LowLevelInit = true;
}
if ((SStatus / 10 <= LowLevelSet) && band == BAND_FM) {
if ((SStatus / 10 <= LowLevelSet) && band < BAND_GAP) {
if (LowLevelInit == true && menu == false) {
if (screenmute == false && !afscreen && !advancedRDS) {
for (byte segments = 0; segments < 94; segments++) {
@@ -700,7 +709,7 @@ void loop() {
if (millis() >= lowsignaltimer + 300) {
lowsignaltimer = millis();
if (band == BAND_FM) radio.getStatus(SStatus, USN, WAM, OStatus, BW, MStatus, SNR); else radio.getStatusAM(SStatus, USN, WAM, OStatus, BW, MStatus, SNR);
if (band < BAND_GAP) radio.getStatus(SStatus, USN, WAM, OStatus, BW, MStatus, SNR); else radio.getStatusAM(SStatus, USN, WAM, OStatus, BW, MStatus, SNR);
if (screenmute == true) readRds();
if (menu == false) {
doSquelch();
@@ -709,7 +718,7 @@ void loop() {
}
} else {
if (band == BAND_FM) radio.getStatus(SStatus, USN, WAM, OStatus, BW, MStatus, SNR); else radio.getStatusAM(SStatus, USN, WAM, OStatus, BW, MStatus, SNR);
if (band < BAND_GAP) radio.getStatus(SStatus, USN, WAM, OStatus, BW, MStatus, SNR); else radio.getStatusAM(SStatus, USN, WAM, OStatus, BW, MStatus, SNR);
if (menu == false) {
doSquelch();
readRds();
@@ -719,7 +728,7 @@ void loop() {
}
if (menu == true && menuopen == true && menupage == 1 && menuoption == 110) {
if (band == BAND_FM) radio.getStatus(SStatus, USN, WAM, OStatus, BW, MStatus, SNR); else radio.getStatusAM(SStatus, USN, WAM, OStatus, BW, MStatus, SNR);
if (band < BAND_GAP) radio.getStatus(SStatus, USN, WAM, OStatus, BW, MStatus, SNR); else radio.getStatusAM(SStatus, USN, WAM, OStatus, BW, MStatus, SNR);
if (millis() >= lowsignaltimer + 500 || change2 == true) {
lowsignaltimer = millis();
change2 = false;
@@ -760,6 +769,7 @@ void loop() {
detachInterrupt(digitalPinToInterrupt(ROTARY_PIN_A));
detachInterrupt(digitalPinToInterrupt(ROTARY_PIN_B));
EEPROM.writeUInt(EE_UINT16_FREQUENCY_FM, frequency);
EEPROM.writeUInt(EE_UINT16_FREQUENCY_OIRT, frequency_OIRT);
EEPROM.writeUInt(EE_UINT16_FREQUENCY_AM, frequency_AM);
EEPROM.writeByte(EE_BYTE_BAND, band);
EEPROM.writeUInt(EE_UINT16_FREQUENCY_LW, frequency_LW);
@@ -789,9 +799,9 @@ void loop() {
}
void GetData() {
if (band == BAND_FM) ShowStereoStatus();
if (band < BAND_GAP) ShowStereoStatus();
if (screenmute == false) {
if (band == BAND_FM) {
if (band < BAND_GAP) {
if (advancedRDS && !afscreen) ShowAdvancedRDS();
if (afscreen) ShowAFEON();
if (!afscreen)
@@ -912,6 +922,257 @@ void ScreensaverInterrupt()
screensaver_IRQ = ON;
}
void CheckBandForbiddenFM () {
switch (band) {
case BAND_FM:
if (bandFM == FM_BAND_OIRT) bandforbidden = 1;
else bandforbidden = 0;
break;
case BAND_OIRT:
if (bandFM == FM_BAND_FM) bandforbidden = 1;
else bandforbidden = 0;
break;
}
}
void doBandSelectionFM() {
if (band > BAND_GAP) return;
switch (bandFM) {
case FM_BAND_ALL:
break;
case FM_BAND_OIRT:
if (band == BAND_FM) {
band = BAND_OIRT;
if (frequency_OIRT > FREQ_FM_OIRT_END) {
frequency_OIRT = FREQ_FM_OIRT_START;
if (edgebeep) EdgeBeeper();
}
else if (frequency_OIRT < FREQ_FM_OIRT_START) {
frequency_OIRT = FREQ_FM_OIRT_END;
if (edgebeep) EdgeBeeper();
}
SelectBand();
}
break;
case FM_BAND_FM:
if (band == BAND_OIRT) {
band = BAND_FM;
if (frequency > HighEdgeSet * 10) {
frequency = LowEdgeSet * 10;
if (edgebeep) EdgeBeeper();
} else if (frequency < LowEdgeSet * 10) {
frequency = HighEdgeSet * 10;
if (edgebeep) EdgeBeeper();
}
SelectBand();
}
break;
}
}
void ShowBandSelectionFM(bool notglanceview, bool normaldisplay) {
uint16_t bandFMx, bandFMy;
int color, colorSmooth;
if (notglanceview) {
bandFMx = 155;
bandFMy = 118;
} else {
bandFMx = 305;
bandFMy = 196;
}
if (normaldisplay) {
color = PrimaryColor;
colorSmooth = PrimaryColorSmooth;
} else {
color = BackgroundColor;
colorSmooth = BackgroundColor;
}
switch (bandFM) {
case FM_BAND_ALL:
if (notglanceview) tftPrint(0, myLanguage[language][105] + String(",") + myLanguage[language][106], bandFMx, bandFMy, color, colorSmooth, FONT28);
else tftPrint(1, myLanguage[language][105] + String(",") + myLanguage[language][106], bandFMx, bandFMy, color, colorSmooth, FONT16);
break;
case FM_BAND_OIRT:
if (notglanceview) tftPrint(0, myLanguage[language][106], bandFMx, bandFMy, color, colorSmooth, FONT28);
else tftPrint(1, myLanguage[language][106], bandFMx, bandFMy, color, colorSmooth, FONT16);
break;
case FM_BAND_FM:
if (notglanceview) tftPrint(0, myLanguage[language][105], bandFMx, bandFMy, color, colorSmooth, FONT28);
else tftPrint(1, myLanguage[language][105], bandFMx, bandFMy, color, colorSmooth, FONT16);
break;
}
}
void CheckBandForbiddenAM () {
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;
}
}
void doBandSelectionAM() {
if (band < BAND_GAP) return;
switch (bandAM) {
case AM_BAND_ALL:
break;
case AM_BAND_LW_MW:
if (band == BAND_SW) {
band = BAND_LW;
SelectBand();
}
break;
case AM_BAND_LW_SW:
if (band == BAND_MW) {
band = BAND_LW;
SelectBand();
}
break;
case AM_BAND_MW_SW:
if (band == BAND_LW) {
band = BAND_MW;
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;
}
}
void ShowBandSelectionAM(bool notglanceview, bool normaldisplay) {
uint16_t bandAMx, bandAMy;
int color, colorSmooth;
if (notglanceview) {
bandAMx = 155;
bandAMy = 118;
} else {
bandAMx = 305;
bandAMy = 216;
}
if (normaldisplay) {
color = PrimaryColor;
colorSmooth = PrimaryColorSmooth;
} else {
color = BackgroundColor;
colorSmooth = BackgroundColor;
}
switch (bandAM) {
case AM_BAND_ALL:
if (notglanceview) tftPrint(0, myLanguage[language][102] + String(",") + myLanguage[language][103] + String(",") + myLanguage[language][104], bandAMx, bandAMy, color, colorSmooth, FONT28);
else tftPrint(1, myLanguage[language][102] + String(",") + myLanguage[language][103] + String(",") + myLanguage[language][104], bandAMx, bandAMy, color, colorSmooth, FONT16);
break;
case AM_BAND_LW_MW:
if (notglanceview) tftPrint(0, myLanguage[language][102] + String(",") + myLanguage[language][103], bandAMx, bandAMy, color, colorSmooth, FONT28);
else tftPrint(1, myLanguage[language][102] + String(",") + myLanguage[language][103], bandAMx, bandAMy, color, colorSmooth, FONT16);
break;
case AM_BAND_LW_SW:
if (notglanceview) tftPrint(0, myLanguage[language][102] + String(",") + myLanguage[language][104], bandAMx, bandAMy, color, colorSmooth, FONT28);
else tftPrint(1, myLanguage[language][102] + String(",") + myLanguage[language][104], bandAMx, bandAMy, color, colorSmooth, FONT16);
break;
case AM_BAND_MW_SW:
if (notglanceview) tftPrint(0, myLanguage[language][103] + String(",") + myLanguage[language][104], bandAMx, bandAMy, color, colorSmooth, FONT28);
else tftPrint(1, myLanguage[language][103] + String(",") + myLanguage[language][104], bandAMx, bandAMy, color, colorSmooth, FONT16);
break;
case AM_BAND_LW:
if (notglanceview) tftPrint(0, myLanguage[language][102], bandAMx, bandAMy, color, colorSmooth, FONT28);
else tftPrint(1, myLanguage[language][102], bandAMx, bandAMy, color, colorSmooth, FONT16);
break;
case AM_BAND_MW:
if (notglanceview) tftPrint(0, myLanguage[language][103], bandAMx, bandAMy, color, colorSmooth, FONT28);
else tftPrint(1, myLanguage[language][103], bandAMx, bandAMy, color, colorSmooth, FONT16);
break;
case AM_BAND_SW:
if (notglanceview) tftPrint(0, myLanguage[language][104], bandAMx, bandAMy, color, colorSmooth, FONT28);
else tftPrint(1, myLanguage[language][104], bandAMx, bandAMy, color, colorSmooth, FONT16);
break;
}
}
void ToggleBand(byte nowBand) {
switch (nowBand) {
case BAND_LW:
if (bandAM == AM_BAND_LW_MW || bandAM == AM_BAND_ALL) band = BAND_MW;
else if (bandAM == AM_BAND_LW_SW) band = BAND_SW;
else if (bandAM == AM_BAND_LW) {
if (bandFM == FM_BAND_FM) band = BAND_FM;
else band = BAND_OIRT;
}
break;
case BAND_MW:
if (bandAM == AM_BAND_MW_SW || bandAM == AM_BAND_ALL) band = BAND_SW;
else if (bandAM == AM_BAND_LW_MW || bandAM == AM_BAND_MW) {
if (bandFM == FM_BAND_FM) band = BAND_FM;
else band = BAND_OIRT;
}
break;
case BAND_SW:
if (bandFM == FM_BAND_FM) band = BAND_FM;
else band = BAND_OIRT;
break;
case BAND_OIRT:
if (bandFM == FM_BAND_ALL) band = BAND_FM;
else if (bandFM == FM_BAND_OIRT) {
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;
}
else if (bandAM == AM_BAND_MW_SW || bandAM == AM_BAND_MW) band = BAND_MW;
else if (bandAM == AM_BAND_SW) band = BAND_SW;
} else if (bandFM == FM_BAND_FM) {
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;
}
else if (bandAM == AM_BAND_MW_SW || bandAM == AM_BAND_MW) band = BAND_MW;
else if (bandAM == AM_BAND_SW) band = BAND_SW;
}
break;
case BAND_FM:
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;
}
else if (bandAM == AM_BAND_MW_SW || bandAM == AM_BAND_MW) band = BAND_MW;
else if (bandAM == AM_BAND_SW) band = BAND_SW;
break;
}
}
void BANDBUTTONPress() {
if (!power) {
if (screensavertriggered) WakeToSleep(REVERSE);
@@ -935,13 +1196,7 @@ void BANDBUTTONPress() {
ScreensaverTimerReopen();
} else {
if (tunemode != TUNE_MEM) {
if (band == BAND_FM) {
band = BAND_LW;
if (stepsize > 3) stepsize = 3;
}
else if (band == BAND_LW) band = BAND_MW;
else if (band == BAND_MW) band = BAND_SW;
else if (band == BAND_SW) band = BAND_FM;
ToggleBand(band);
StoreFrequency();
SelectBand();
}
@@ -953,7 +1208,7 @@ void BANDBUTTONPress() {
return;
}
if (band == BAND_FM) {
if (band < BAND_GAP) {
if (advancedRDS && !seek) BuildAFScreen(); else BuildAdvancedRDS();
} else {
WakeToSleep(true);
@@ -968,6 +1223,7 @@ void BANDBUTTONPress() {
void StoreFrequency() {
EEPROM.writeUInt(EE_UINT16_FREQUENCY_FM, frequency);
EEPROM.writeUInt(EE_UINT16_FREQUENCY_OIRT, frequency_OIRT);
EEPROM.writeUInt(EE_UINT16_FREQUENCY_AM, frequency_AM);
EEPROM.writeByte(EE_BYTE_BAND, band);
EEPROM.writeUInt(EE_UINT16_FREQUENCY_LW, frequency_LW);
@@ -1067,6 +1323,7 @@ void DivdeSWMIBand() {
}
SWMIBandPos = SW_MI_BAND_GAP;
}
}
void ToggleSWMIBand(bool frequencyup) {
@@ -1343,7 +1600,7 @@ void ToggleSWMIBand(bool frequencyup) {
}
void SelectBand() {
if (band != BAND_FM) {
if (band > BAND_GAP) {
seek = false;
if (tunemode == TUNE_AUTO) tunemode = TUNE_MAN;
if (tunemode == TUNE_MI_BAND && band != BAND_SW) tunemode = TUNE_MAN;
@@ -1351,6 +1608,7 @@ void SelectBand() {
BWset = 2;
freqold = frequency_AM;
LimitAMFrequency();
CheckBandForbiddenAM();
radio.SetFreqAM(frequency_AM);
doBW();
radio.getStatusAM(SStatus, USN, WAM, OStatus, BW, MStatus, SNR);
@@ -1372,8 +1630,10 @@ void SelectBand() {
if (tunemode == TUNE_MI_BAND) tunemode = TUNE_MAN;
radio.power(0);
delay(50);
radio.SetFreq(frequency);
if (band == BAND_FM) radio.SetFreq(frequency);
else if (band == BAND_OIRT) radio.SetFreq(frequency_OIRT);
freqold = frequency_AM;
CheckBandForbiddenFM();
doBW();
radio.getStatus(SStatus, USN, WAM, OStatus, BW, MStatus, SNR);
if (screenmute == false) radio.clearRDS(fullsearchrds); BuildDisplay();
@@ -1468,20 +1728,9 @@ void ModeButtonPress() {
BWOld = 0;
radio.clearRDS(fullsearchrds);
RDSstatus = false;
if (specialstepOIRT) {
if (frequency >= (FREQ_FM_OIRT_START) && frequency <= (FREQ_FM_OIRT_END)) {
if (frequency % 3 != 0) {
Round30K(frequency);
EEPROM.writeUInt(EE_UINT16_FREQUENCY_FM, frequency);
}
} else {
if (fmdefaultstepsize == 1) Round100K(frequency); else Round50K(frequency);
}
} else {
if (frequency % 10 != 0) {
if (fmdefaultstepsize == 1) Round100K(frequency); else Round50K(frequency);
EEPROM.writeUInt(EE_UINT16_FREQUENCY_FM, frequency);
}
if (frequency % 10 != 0) {
if (fmdefaultstepsize == 1) Round100K(frequency); else Round50K(frequency);
EEPROM.writeUInt(EE_UINT16_FREQUENCY_FM, frequency);
}
radio.clearRDS(fullsearchrds);
BuildDisplay();
@@ -1496,6 +1745,8 @@ void ModeButtonPress() {
EEPROM.writeUInt(EE_UINT16_FMHIGHEDGESET, HighEdgeSet);
EEPROM.writeByte(EE_BYTE_CONTRASTSET, ContrastSet);
EEPROM.writeByte(EE_BYTE_STEREOLEVEL, StereoLevel);
EEPROM.writeByte(EE_BYTE_BANDFM, bandFM);
EEPROM.writeByte(EE_BYTE_BANDAM, bandAM);
EEPROM.writeByte(EE_BYTE_HIGHCUTLEVEL, HighCutLevel);
EEPROM.writeByte(EE_BYTE_HIGHCUTOFFSET, HighCutOffset);
EEPROM.writeInt(EE_BYTE_LEVELOFFSET, LevelOffset);
@@ -1536,6 +1787,8 @@ void ModeButtonPress() {
if (USBmode) Serial.begin(19200); else Serial.begin(115200);
ScreensaverTimerSet(screensaverOptions[screensaverset]);
if (screensaverset) ScreensaverTimerRestart();
doBandSelectionFM();
doBandSelectionAM();
}
}
while (digitalRead(MODEBUTTON) == LOW) delay(50);
@@ -1546,22 +1799,22 @@ void ShowStepSize() {
if (!advancedRDS) {
tft.fillRect(224, 38, 15, 4, GreyoutColor);
tft.fillRect(193, 38, 15, 4, GreyoutColor);
if (band == BAND_FM) tft.fillRect(148, 38, 15, 4, GreyoutColor); else tft.fillRect(162, 38, 15, 4, GreyoutColor);
if (band == BAND_FM) tft.fillRect(116, 38, 15, 4, GreyoutColor); else tft.fillRect(128, 38, 15, 4, GreyoutColor);
if (band < BAND_GAP) tft.fillRect(148, 38, 15, 4, GreyoutColor); else tft.fillRect(162, 38, 15, 4, GreyoutColor);
if (band < BAND_GAP) tft.fillRect(116, 38, 15, 4, GreyoutColor); else tft.fillRect(128, 38, 15, 4, GreyoutColor);
if (stepsize == 1) tft.fillRect(224, 38, 15, 4, InsignificantColor);
if (stepsize == 2) tft.fillRect(193, 38, 15, 4, InsignificantColor);
if (stepsize == 3) {
if (band == BAND_FM) tft.fillRect(148, 38, 15, 4, InsignificantColor); else tft.fillRect(162, 38, 15, 4, InsignificantColor);
if (band < BAND_GAP) tft.fillRect(148, 38, 15, 4, InsignificantColor); else tft.fillRect(162, 38, 15, 4, InsignificantColor);
}
if (stepsize == 4) {
if (band == BAND_FM) tft.fillRect(116, 38, 15, 4, InsignificantColor); else tft.fillRect(128, 38, 15, 4, InsignificantColor);
if (band < BAND_GAP) tft.fillRect(116, 38, 15, 4, InsignificantColor); else tft.fillRect(128, 38, 15, 4, InsignificantColor);
}
}
}
void FindhighStopOIRT() {
if (HighEdgeSet >= (FREQ_FM_OIRT_START / 10) && HighEdgeSet <= (FREQ_FM_OIRT_END / 10)) {
HighEdgeOIRTSet = (HighEdgeSet * 10 - (HighEdgeSet * 10) % 3);
HighEdgeOIRTSet = (HighEdgeSet * 10 - (HighEdgeSet * 10) % FREQ_OIRT_STEP_30K);
} else {
HighEdgeOIRTSet = 0;
}
@@ -1569,15 +1822,15 @@ void FindhighStopOIRT() {
void FindlowStopOIRT() {
if (LowEdgeSet >= (FREQ_FM_OIRT_START / 10) && LowEdgeSet <= (FREQ_FM_OIRT_END / 10)) {
LowEdgeOIRTSet = (LowEdgeSet * 10 - (LowEdgeSet * 10) % 3);
LowEdgeOIRTSet = (LowEdgeSet * 10 - (LowEdgeSet * 10) % FREQ_OIRT_STEP_30K);
} else {
LowEdgeOIRTSet = 0;
}
}
void Round30K(unsigned int freq) {
if (freq % 3 < 3) {
frequency = (freq - freq % 3);
if (freq % FREQ_OIRT_STEP_30K < FREQ_OIRT_STEP_30K) {
frequency_OIRT = (freq - freq % FREQ_OIRT_STEP_30K);
}
}
@@ -1616,16 +1869,11 @@ void Round5K(unsigned int freqAM) {
void RoundStep() {
if (band == BAND_FM) {
unsigned int freq = frequency;
if (specialstepOIRT) {
if (frequency >= FREQ_FM_OIRT_START && frequency <= FREQ_FM_OIRT_END) {
Round30K(freq);
} else {
if (fmdefaultstepsize == 1) Round100K(freq); else Round50K(freq);
}
} else {
if (fmdefaultstepsize == 1) Round100K(freq); else Round50K(freq);
}
if (fmdefaultstepsize == 1) Round100K(freq); else Round50K(freq);
radio.SetFreq(frequency);
} else if (band == BAND_OIRT) {
Round30K(frequency_OIRT);
radio.SetFreq(frequency_OIRT);
} else {
if (band == BAND_MW) {
unsigned int freq = frequency_AM / (region == 0 ? FREQ_MW_STEP_9K : FREQ_MW_STEP_10K);
@@ -1639,7 +1887,9 @@ void RoundStep() {
while (digitalRead(ROTARY_BUTTON) == LOW) delay(50);
if (band == BAND_FM) EEPROM.writeUInt(EE_UINT16_FREQUENCY_FM, frequency); else EEPROM.writeUInt(EE_UINT16_FREQUENCY_AM, frequency_AM);
if (band == BAND_FM) EEPROM.writeUInt(EE_UINT16_FREQUENCY_FM, frequency);
else if (band == BAND_OIRT) EEPROM.writeUInt(EE_UINT16_FREQUENCY_OIRT, frequency_OIRT);
else EEPROM.writeUInt(EE_UINT16_FREQUENCY_AM, frequency_AM);
EEPROM.commit();
}
@@ -1668,7 +1918,7 @@ void ButtonPress() {
if (counter - counterold < 1000) {
if (tunemode == TUNE_MAN) {
stepsize++;
if (band == BAND_SW || band == BAND_FM) {
if (band == BAND_SW || band < BAND_GAP) {
if (stepsize > 4) stepsize = 0;
}
else {
@@ -1983,6 +2233,14 @@ void ButtonPress() {
tftPrint(0, myLanguage[language][99], 155, 78, ActiveColor, ActiveColorSmooth, FONT28);
if (af) tftPrint(0, myLanguage[language][42], 155, 118, PrimaryColor, PrimaryColorSmooth, FONT28); else tftPrint(0, myLanguage[language][30], 155, 118, PrimaryColor, PrimaryColorSmooth, FONT28);
break;
case 190:
tftPrint(0, myLanguage[language][100], 155, 78, ActiveColor, ActiveColorSmooth, FONT28);
ShowBandSelectionFM(true, true);
break;
case 210:
tftPrint(0, myLanguage[language][101], 155, 78, ActiveColor, ActiveColorSmooth, FONT28);
ShowBandSelectionAM(true, true);
break;
}
break;
}
@@ -2376,6 +2634,21 @@ void KeyUp() {
if (af) af = false; else af = true;
if (af) tftPrint(0, myLanguage[language][42], 155, 118, PrimaryColor, PrimaryColorSmooth, FONT28); else tftPrint(0, myLanguage[language][30], 155, 118, PrimaryColor, PrimaryColorSmooth, FONT28);
break;
case 190:
ShowBandSelectionFM(true, REVERSE);
bandFM++;
if (bandFM > FM_BAND_CNT - 1) bandFM = FM_BAND_ALL;
ShowBandSelectionFM(true, true);
break;
case 210:
ShowBandSelectionAM(true, REVERSE);
bandAM++;
if (bandAM > AM_BAND_CNT - 1) bandAM = AM_BAND_ALL;
ShowBandSelectionAM(true, true);
break;
}
break;
}
@@ -2467,10 +2740,6 @@ void KeyDown() {
tftPrint(1, String(LowEdgeSet / 10 + ConverterSet, DEC) + "." + String(LowEdgeSet % 10 + ConverterSet, DEC), 155, 118, BackgroundColor, BackgroundColor, FONT28);
LowEdgeSet -= 10;
if (LowEdgeSet < 650) LowEdgeSet = 1079;
if (specialstepOIRT) {
FindlowStopOIRT();
FindhighStopOIRT();
}
tftPrint(1, String(LowEdgeSet / 10 + ConverterSet, DEC) + "." + String(LowEdgeSet % 10 + ConverterSet, DEC), 155, 118, PrimaryColor, PrimaryColorSmooth, FONT28);
break;
@@ -2478,10 +2747,6 @@ void KeyDown() {
tftPrint(1, String(HighEdgeSet / 10 + ConverterSet, DEC) + "." + String(HighEdgeSet % 10 + ConverterSet, DEC), 155, 118, BackgroundColor, BackgroundColor, FONT28);
HighEdgeSet -= 10;
if (HighEdgeSet < 660) HighEdgeSet = 1080;
if (specialstepOIRT) {
FindlowStopOIRT();
FindhighStopOIRT();
}
tftPrint(1, String(HighEdgeSet / 10 + ConverterSet, DEC) + "." + String(HighEdgeSet % 10 + ConverterSet, DEC), 155, 118, PrimaryColor, PrimaryColorSmooth, FONT28); break;
case 110:
@@ -2760,6 +3025,21 @@ void KeyDown() {
if (af) af = false; else af = true;
if (af) tftPrint(0, myLanguage[language][42], 155, 118, PrimaryColor, PrimaryColorSmooth, FONT28); else tftPrint(0, myLanguage[language][30], 155, 118, PrimaryColor, PrimaryColorSmooth, FONT28);
break;
case 190:
ShowBandSelectionFM(true, REVERSE);
bandFM--;
if (bandFM > FM_BAND_CNT) bandFM = FM_BAND_FM;
ShowBandSelectionFM(true, true);
break;
case 210:
ShowBandSelectionAM(true, REVERSE);
bandAM--;
if (bandAM > AM_BAND_CNT) bandAM = AM_BAND_SW;
ShowBandSelectionAM(true, true);
break;
}
break;
}
@@ -2797,7 +3077,7 @@ void DoMemoryPosTune() {
void readRds() {
radio.readRDS(showrdserrors);
if (band == BAND_FM) {
if (band < BAND_GAP) {
RDSstatus = radio.rds.hasRDS;
ShowRDSLogo(RDSstatus);
if (!afscreen) {
@@ -3487,6 +3767,8 @@ void BuildMenu() {
tftPrint(-1, myLanguage[language][97], 14, 136, ActiveColor, ActiveColorSmooth, FONT16);
tftPrint(-1, myLanguage[language][98], 14, 156, ActiveColor, ActiveColorSmooth, FONT16);
tftPrint(-1, myLanguage[language][99], 14, 176, ActiveColor, ActiveColorSmooth, FONT16);
tftPrint(-1, myLanguage[language][100], 14, 196, ActiveColor, ActiveColorSmooth, FONT16);
tftPrint(-1, myLanguage[language][101], 14, 216, ActiveColor, ActiveColorSmooth, FONT16);
tftPrint(1, "KHz", 305, 96, ActiveColor, ActiveColorSmooth, FONT16);
tftPrint(1, "dB", 305, 136, ActiveColor, ActiveColorSmooth, FONT16);
@@ -3506,6 +3788,8 @@ void BuildMenu() {
if (AMLevelOffset > 0) tftPrint(1, "+" + String(AMLevelOffset, DEC), 265, 136, PrimaryColor, PrimaryColorSmooth, FONT16); else tftPrint(1, String(AMLevelOffset, DEC), 265, 136, PrimaryColor, PrimaryColorSmooth, FONT16);
if (af) tftPrint(1, myLanguage[language][42], 305, 176, PrimaryColor, PrimaryColorSmooth, FONT16); else tftPrint(1, myLanguage[language][30], 305, 176, PrimaryColor, PrimaryColorSmooth, FONT16);
tftPrint(1, unitString[unit], 305, 156, PrimaryColor, PrimaryColorSmooth, FONT16);
ShowBandSelectionFM(false, true);
ShowBandSelectionAM(false, true);
break;
}
analogWrite(SMETERPIN, 0);
@@ -3763,6 +4047,7 @@ void BuildAdvancedRDS() {
void BuildDisplay() {
afscreen = false;
advancedRDS = false;
int bandColor;
if (theme == 0) {
tft.invertDisplay(colorinvert);
tft.fillScreen(BackgroundColor);
@@ -3830,7 +4115,7 @@ void BuildDisplay() {
tftPrint(-1, "kHz", 222, 4, ActiveColor, ActiveColorSmooth, FONT28);
tftPrint(-1, unitString[unit], 282, 145, ActiveColor, ActiveColorSmooth, FONT16);
if (band == BAND_FM) tftPrint(-1, "MHz", 258, 76, ActiveColor, ActiveColorSmooth, FONT28); else tftPrint(-1, "kHz", 258, 76, ActiveColor, ActiveColorSmooth, FONT28);
if (band < BAND_GAP) tftPrint(-1, "MHz", 258, 76, ActiveColor, ActiveColorSmooth, FONT28); else tftPrint(-1, "kHz", 258, 76, ActiveColor, ActiveColorSmooth, FONT28);
tft.drawRoundRect(249, 56, 30, 20, 5, GreyoutColor);
tft.drawRoundRect(287, 56, 30, 20, 5, GreyoutColor);
@@ -3844,11 +4129,13 @@ void BuildDisplay() {
tft.drawCircle(86, 15, 9, SecondaryColor);
}
if (bandforbidden) bandColor = GreyoutColor; else bandColor = SecondaryColor;
switch (band) {
case BAND_LW: tftPrint(-1, "LW", 50, 32, SecondaryColor, SecondaryColorSmooth, FONT16); break;
case BAND_MW: tftPrint(-1, "MW", 50, 32, SecondaryColor, SecondaryColorSmooth, FONT16); break;
case BAND_SW: tftPrint(-1, "SW", 50, 32, SecondaryColor, SecondaryColorSmooth, FONT16); break;
case BAND_FM: tftPrint(-1, "FM", 50, 32, SecondaryColor, SecondaryColorSmooth, FONT16); break;
case BAND_LW: tftPrint(-1, myLanguage[language][102], 50, 32, bandColor, SecondaryColorSmooth, FONT16); break;
case BAND_MW: tftPrint(-1, myLanguage[language][103], 50, 32, bandColor, SecondaryColorSmooth, FONT16); break;
case BAND_SW: tftPrint(-1, myLanguage[language][104], 50, 32, bandColor, SecondaryColorSmooth, FONT16); break;
case BAND_FM: tftPrint(-1, myLanguage[language][105], 50, 32, bandColor, SecondaryColorSmooth, FONT16); break;
case BAND_OIRT: tftPrint(-1, myLanguage[language][106], 50, 32, bandColor, SecondaryColorSmooth, FONT16); break;
}
}
RDSstatusold = false;
@@ -3879,7 +4166,7 @@ void ShowFreq(int mode) {
tft.unloadFont();
if (screenmute == false) {
if (setupmode == false) {
if (band != BAND_FM) { // Fix Me :take care of 9K/10K Step
if (band != BAND_FM && band != BAND_OIRT) { // Fix Me :take care of 9K/10K Step
if (freqold < 2000 && frequency_AM >= 2000 && stepsize == 0) if (frequency_AM != 27000 && freqold != 144) radio.SetFreqAM(2000);
if (freqold >= 2000 && frequency_AM < 2000 && stepsize == 0) if (frequency_AM != 144 && freqold != 27000) radio.SetFreqAM(1998);
}
@@ -3888,7 +4175,7 @@ void ShowFreq(int mode) {
if (screenmute == false) {
detachInterrupt(digitalPinToInterrupt(ROTARY_PIN_A));
detachInterrupt(digitalPinToInterrupt(ROTARY_PIN_B));
if (band != BAND_FM ) {
if (band > BAND_GAP ) {
unsigned int freq = frequency_AM;
String count = String(freq, DEC);
if ((setupmode == false && count.length() != freqoldcount) || mode != 0) {
@@ -3906,7 +4193,10 @@ void ShowFreq(int mode) {
}
} else {
unsigned int freq = frequency + ConverterSet * 100;
unsigned int freq;
if (band == BAND_FM) freq = frequency + ConverterSet * 100;
else if (band == BAND_OIRT) freq = frequency_OIRT + ConverterSet * 100;
if (advancedRDS) {
for (int i = 0; i < 33; i++) tft.fillCircle((6 * i) + 10, 133, 2, GreyoutColor);
tftReplace(1, String(freqold / 100) + "." + (freqold % 100 < 10 ? "0" : "") + String(freqold % 100) + " MHz", String(freq / 100) + "." + (freq % 100 < 10 ? "0" : "") + String(freq % 100) + " MHz", 310, 35, PrimaryColor, PrimaryColorSmooth, FONT16);
@@ -3923,7 +4213,7 @@ void ShowFreq(int mode) {
if (freqoldcount >= 4) tft.setCursor (44, 45);
tft.setTextFont(7);
tft.print(freqold / 100);
if (band == BAND_FM) {
if (band < BAND_GAP) {
tft.print(".");
if (freqold % 100 < 10) tft.print("0");
tft.print(freqold % 100);
@@ -3969,7 +4259,8 @@ void ShowFreq(int mode) {
if (wifi) {
Udp.beginPacket(remoteip, 9030);
Udp.print("from=TEF tuner;freq=");
if (band != BAND_FM) Udp.print(String(frequency_AM) + "000;ClearRDS=1"); else Udp.print(String(frequency) + "0000;ClearRDS=1");
if (band > BAND_GAP) Udp.print(String(frequency_AM) + "000;ClearRDS=1");
else Udp.print(String(band == BAND_FM ? frequency: frequency_OIRT) + "0000;ClearRDS=1");
Udp.endPacket();
}
}
@@ -4026,7 +4317,7 @@ void ShowSignalLevel() {
if (SStatusold / 10 != SStatusprint / 10) tftReplace(1, String(SStatusold / 10), String(SStatusprint / 10), 288, 105, PrimaryColor, PrimaryColorSmooth, FONT48);
tftReplace(1, "." + String(abs(SStatusold % 10)), "." + String(abs(SStatusprint % 10)), 310, 105, PrimaryColor, PrimaryColorSmooth, FONT28);
if (band == BAND_FM) segments = (SStatus + 200) / 10; else segments = (SStatus + 200) / 10;
if (band < BAND_GAP) segments = (SStatus + 200) / 10; else segments = (SStatus + 200) / 10;
tft.fillRect(16, 105, 2 * constrain(segments, 0, 54), 6, InsignificantColor);
tft.fillRect(16 + 2 * 54, 105, 2 * (constrain(segments, 54, 94) - 54), 6, SignificantColor);
@@ -4055,7 +4346,7 @@ void ShowRDSLogo(bool RDSstatus) {
void ShowStereoStatus() {
if (StereoToggle == true) {
if (band == BAND_FM) Stereostatus = radio.getStereoStatus(); else Stereostatus = 0;
if (band < BAND_GAP) Stereostatus = radio.getStereoStatus(); else Stereostatus = 0;
if (Stereostatus != Stereostatusold) {
if (Stereostatus == true && screenmute == false) {
tft.drawSmoothCircle(81, 15, 10, SignificantColor, SignificantColorSmooth);
@@ -4083,7 +4374,7 @@ void ShowOffset() {
return;
}
if (band == BAND_FM) {
if (band < BAND_GAP) {
if (OStatus < -500) {
tft.fillTriangle(6, 8, 6, 22, 14, 14, GreyoutColor);
tft.fillTriangle(18, 8, 18, 22, 26, 14, GreyoutColor);
@@ -4334,7 +4625,7 @@ void updateBW() {
}
void updateiMS() {
if (band == BAND_FM) {
if (band < BAND_GAP) {
if (iMSset == 0) {
if (screenmute == false) {
tft.drawRoundRect(248, 56, 32, 20, 5, ActiveColor);
@@ -4352,7 +4643,7 @@ void updateiMS() {
}
void updateEQ() {
if (band == BAND_FM) {
if (band < BAND_GAP) {
if (EQset == 0) {
if (screenmute == false) {
tft.drawRoundRect(286, 56, 32, 20, 5, ActiveColor);
@@ -4397,7 +4688,7 @@ void updateSWMIBand() {
}
void doBW() {
if (band == BAND_FM) {
if (band < BAND_GAP) {
if (BWset > 16) BWset = 0;
switch (BWset) {
@@ -4493,7 +4784,7 @@ void doBW() {
void doTuneMode() {
switch (tunemode) {
case TUNE_MAN:
if (band == BAND_FM) {
if (band < BAND_GAP) {
tunemode = TUNE_AUTO;
if (stepsize != 0) {
stepsize = 0;
@@ -4512,7 +4803,7 @@ void doTuneMode() {
break;
case TUNE_MEM:
tunemode = TUNE_MAN;
if (!bandforbidden) tunemode = TUNE_MAN;
break;
}
ShowTuneMode();
@@ -4789,7 +5080,6 @@ void Communication() {
}
}
void DataPrint(String string) {
if (XDRGTKUSB) Serial.print(string);
if (XDRGTKTCP) RemoteClient.print(string);
@@ -5070,7 +5360,7 @@ void XDRGTKRoutine() {
for (freq_scan = scanner_start; freq_scan <= scanner_end; freq_scan += scanner_step) {
DataPrint(String(freq_scan * 10, DEC));
DataPrint(" = ");
if (band == BAND_FM) radio.getStatus(SStatus, USN, WAM, OStatus, BW, MStatus, SNR); else radio.getStatusAM(SStatus, USN, WAM, OStatus, BW, MStatus, SNR);
if (band < BAND_GAP) radio.getStatus(SStatus, USN, WAM, OStatus, BW, MStatus, SNR); else radio.getStatusAM(SStatus, USN, WAM, OStatus, BW, MStatus, SNR);
DataPrint(String((radio.CheckSignal(freq_scan) / 10) + 10, DEC));
DataPrint(", ");
}
@@ -5156,7 +5446,7 @@ void XDRGTKRoutine() {
XDRGTKdata = false;
}
if (band != BAND_FM) {
if (band > BAND_GAP) {
DataPrint("Sm");
} else {
if (StereoToggle == false) {
@@ -5175,7 +5465,7 @@ void TuneUp() {
aftimer = millis();
unsigned int temp = 0;
if (stepsize == 0) {
if (band != BAND_FM) {
if (band > BAND_GAP) {
if (frequency_AM < MWHighEdgeSet) {
if (region == 0) {
temp = FREQ_MW_STEP_9K;
@@ -5189,12 +5479,8 @@ void TuneUp() {
frequency_AM = (frequency_AM / FREQ_SW_STEP_5K) * FREQ_SW_STEP_5K;
}
} else {
if (frequency >= (FREQ_FM_OIRT_START) && frequency <= (FREQ_FM_OIRT_END - FREQ_FM_STEP_30K)) {
if (specialstepOIRT) {
temp = FREQ_FM_STEP_30K;
} else {
if (fmdefaultstepsize == 1) temp = FREQ_FM_STEP_100K; else temp = FREQ_FM_STEP_50K;
}
if (band == BAND_OIRT) {
temp = FREQ_OIRT_STEP_30K;
} else {
if (fmdefaultstepsize == 1) temp = FREQ_FM_STEP_100K; else temp = FREQ_FM_STEP_50K;
}
@@ -5207,21 +5493,19 @@ void TuneUp() {
if (band == BAND_FM) {
frequency += temp;
if (specialstepOIRT) {
if (frequency >= (HighEdgeOIRTSet == 0 ? ((HighEdgeSet * 10) + 1) : (HighEdgeOIRTSet + 1))) {
frequency = (LowEdgeOIRTSet == 0 ? (LowEdgeSet * 10) : LowEdgeOIRTSet);
if (edgebeep) EdgeBeeper();
}
} else {
if (frequency >= (HighEdgeSet * 10) + 1) {
frequency = LowEdgeSet * 10;
if (edgebeep) EdgeBeeper();
}
if (frequency >= (HighEdgeSet * 10) + 1) {
frequency = LowEdgeSet * 10;
if (edgebeep) EdgeBeeper();
}
radio.SetFreq(frequency);
}
if (band == BAND_LW) {
} else if (band == BAND_OIRT) {
frequency_OIRT += temp;
if (frequency_OIRT > HighEdgeOIRTSet) {
frequency_OIRT = LowEdgeOIRTSet;
if (edgebeep) EdgeBeeper();
}
radio.SetFreq(frequency_OIRT);
} else if (band == BAND_LW) {
frequency_AM += temp;
if (frequency_AM > LWHighEdgeSet) {
frequency_AM = LWLowEdgeSet;
@@ -5256,7 +5540,7 @@ void TuneDown() {
aftimer = millis();
unsigned int temp = 0;
if (stepsize == 0) {
if (band != BAND_FM) {
if (band > BAND_GAP) {
if (frequency_AM <= MWHighEdgeSet) {
if (frequency_AM == 2000) { // Fix Me :take care of 9K/10K Step
frequency_AM = 1998;
@@ -5270,12 +5554,8 @@ void TuneDown() {
frequency_AM = (frequency_AM / temp) * temp;
}
} else {
if (frequency >= (FREQ_FM_OIRT_START + FREQ_FM_STEP_30K) && frequency <= (FREQ_FM_OIRT_END)) {
if (specialstepOIRT) {
temp = FREQ_FM_STEP_30K;
} else {
if (fmdefaultstepsize == 1) temp = FREQ_FM_STEP_100K; else temp = FREQ_FM_STEP_50K;
}
if (band == BAND_OIRT) {
temp = FREQ_OIRT_STEP_30K;
} else {
if (fmdefaultstepsize == 1) temp = FREQ_FM_STEP_100K; else temp = FREQ_FM_STEP_50K;
}
@@ -5288,21 +5568,19 @@ void TuneDown() {
if (band == BAND_FM) {
frequency -= temp;
if (specialstepOIRT) {
if (frequency < (LowEdgeOIRTSet == 0 ? (LowEdgeSet * 10) : LowEdgeOIRTSet) ) {
frequency = (HighEdgeOIRTSet == 0 ? (HighEdgeSet * 10) : HighEdgeOIRTSet);
if (edgebeep) EdgeBeeper();
}
} else {
if (frequency < LowEdgeSet * 10) {
frequency = HighEdgeSet * 10;
if (edgebeep) EdgeBeeper();
}
if (frequency < LowEdgeSet * 10) {
frequency = HighEdgeSet * 10;
if (edgebeep) EdgeBeeper();
}
radio.SetFreq(frequency);
}
if (band == BAND_LW) {
} else if (band == BAND_OIRT) {
frequency_OIRT -= temp;
if (frequency_OIRT < LowEdgeOIRTSet) {
frequency_OIRT = HighEdgeOIRTSet;
if (edgebeep) EdgeBeeper();
}
radio.SetFreq(frequency_OIRT);
} else if (band == BAND_LW) {
frequency_AM -= temp;
if (frequency_AM < LWLowEdgeSet) {
frequency_AM = LWHighEdgeSet;
@@ -5345,7 +5623,7 @@ void EdgeBeeper() {
}
void Seek(bool mode) {
if (band == BAND_FM) {
if (band < BAND_GAP) {
radio.setMute();
if (screenmute == false) tft.drawBitmap(110, 5, Speaker, 26, 22, PrimaryColor);
if (mode == false) TuneDown(); else TuneUp();
@@ -5597,12 +5875,15 @@ void passwordcrypt() {
void DefaultSettings() {
EEPROM.writeByte(EE_BYTE_CHECKBYTE, EE_CHECKBYTE_VALUE);
EEPROM.writeUInt(EE_UINT16_FREQUENCY_FM, 10000);
EEPROM.writeUInt(EE_UINT16_FREQUENCY_OIRT, FREQ_FM_OIRT_START);
EEPROM.writeInt(EE_BYTE_VOLSET, 0);
EEPROM.writeUInt(EE_UINT16_CONVERTERSET, 0);
EEPROM.writeUInt(EE_UINT16_FMLOWEDGESET, 875);
EEPROM.writeUInt(EE_UINT16_FMHIGHEDGESET, 1080);
EEPROM.writeByte(EE_BYTE_CONTRASTSET, 50);
EEPROM.writeByte(EE_BYTE_STEREOLEVEL, 0);
EEPROM.writeByte(EE_BYTE_BANDFM, FM_BAND_ALL);
EEPROM.writeByte(EE_BYTE_BANDAM, AM_BAND_ALL);
EEPROM.writeByte(EE_BYTE_HIGHCUTLEVEL, 70);
EEPROM.writeByte(EE_BYTE_HIGHCUTOFFSET, 0);
EEPROM.writeInt(EE_BYTE_LEVELOFFSET, 0);
@@ -5620,7 +5901,7 @@ void DefaultSettings() {
EEPROM.writeByte(EE_BYTE_OPTENC, 0);
EEPROM.writeByte(EE_BYTE_IMSSET, 1);
EEPROM.writeByte(EE_BYTE_EQSET, 1);
EEPROM.writeByte(EE_BYTE_BAND, 0);
EEPROM.writeByte(EE_BYTE_BAND, BAND_FM);
EEPROM.writeInt(EE_BYTE_LOWLEVELSET, -10);
EEPROM.writeByte(EE_BYTE_MEMORYPOS, 0);
EEPROM.writeByte(EE_BYTE_REGION, 0);
+15 -1
View File
@@ -11,8 +11,22 @@ enum RDS_GROUPS {
RDS_GROUP_12A, RDS_GROUP_12B, RDS_GROUP_13A, RDS_GROUP_13B, RDS_GROUP_14A, RDS_GROUP_14B, RDS_GROUP_15A, RDS_GROUP_15B
};
// FM band: before BAND_GAP; AM band: after BAND_GAP
enum RADIO_BAND {
BAND_FM, BAND_LW, BAND_MW, BAND_SW
BAND_OIRT = 0, BAND_FM, BAND_GAP, BAND_LW, BAND_MW, BAND_SW
};
// 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_CNT
};
// Toggle: OIRT -> FM
enum RADIO_FM_BAND_SELECTION {
FM_BAND_ALL = 0, FM_BAND_OIRT, FM_BAND_FM,
FM_BAND_CNT
};
enum RADIO_TUNE_MODE {
+9 -6
View File
@@ -23,7 +23,7 @@
#define FREQ_MW_STEP_9K 9
#define FREQ_MW_STEP_10K 10
#define FREQ_SW_STEP_5K 5
#define FREQ_FM_STEP_30K 3
#define FREQ_OIRT_STEP_30K 3
#define FREQ_FM_STEP_50K 5
#define FREQ_FM_STEP_100K 10
@@ -39,8 +39,8 @@
#define FREQ_SW_HIGH_EDGE_MAX (FREQ_SW_END)
#define FREQ_FM_START 65000
#define FREQ_FM_END 108000
#define FREQ_FM_OIRT_START 6575 // use values of 1/10 * kHz
#define FREQ_FM_OIRT_END 7400 // use values of 1/10 * kHz
#define FREQ_FM_OIRT_START 6402 // use values of 1/10 * kHz
#define FREQ_FM_OIRT_END 7398 // use values of 1/10 * kHz
// according to https://www.short-wave.info/index.php?feature=frequencies
#define FREQ_SW_START 1800
@@ -95,12 +95,14 @@
// EEPROM index defines
#define EE_PRESETS_CNT 30
#define EE_CHECKBYTE_VALUE 36 // 0 ~ 255,add new entry, change for new value
#define EE_CHECKBYTE_VALUE 32 // 0 ~ 255,add new entry, change for new value
#define EE_TOTAL_CNT 269
#define EE_TOTAL_CNT 273
#define EE_UINT16_FREQUENCY_FM 0
#define EE_BYTE_VOLSET 4
#define EE_BYTE_STEREO 5
#define EE_BYTE_BANDFM 6
#define EE_BYTE_BANDAM 7
#define EE_UINT16_CONVERTERSET 8
#define EE_UINT16_FMLOWEDGESET 12
#define EE_UINT16_FMHIGHEDGESET 16
@@ -158,7 +160,8 @@
#define EE_BYTE_SCREENSAVERSET 262
#define EE_INT16_AMLEVELOFFSET 263
#define EE_BYTE_UNIT 267
#define EE_BYTE_AF 268
#define EE_BYTE_AF 268
#define EE_UINT16_FREQUENCY_OIRT 269
// End of EEPROM index defines
static const char* const unitString[] = {"dBμV", "dBf", "dBm"};
+121 -16
View File
@@ -1,6 +1,6 @@
// [number of languages][number of texts][max. length of text]
static const char* const myLanguage[15][100] = {
static const char* const myLanguage[15][107] = {
{ "English", // English
"Rotary direction changed", // 1
"Please release button", // 2
@@ -100,7 +100,14 @@ static const char* const myLanguage[15][100] = {
"50% brightness", // 96
"AM RF Level offset:", // 97
"Signalmeter unit:", // 98
"Use AF:" // 99
"Use AF:", // 99
"Select FM Band:", // 100
"Select AM Band:", // 101
"LW", // 102
"MW", // 103
"SW", // 104
"FM", // 105
"OIRT" // 106
},
{ "Nederlands", // Dutch
@@ -202,7 +209,14 @@ static const char* const myLanguage[15][100] = {
"50% helderheid", // 96
"AM RF Level afwijking:", // 97
"Signaalmeter eenheid:", // 98
"Gebruik AF:" // 99
"Gebruik AF:", // 99
"Select FM Band:", // 100
"Select AM Band:", // 101
"LW", // 102
"MW", // 103
"SW", // 104
"FM", // 105
"OIRT" // 106
},
{ "Polski", // Polish
@@ -304,7 +318,14 @@ static const char* const myLanguage[15][100] = {
"50% jasnosci", // 96
"Odchylenie poziomu RF AM:", // 97
"Jednostka sygnalu:", // 98
"Uzywaj AF:" // 99
"Uzywaj AF:", // 99
"Select FM Band:", // 100
"Select AM Band:", // 101
"LW", // 102
"MW", // 103
"SW", // 104
"FM", // 105
"OIRT" // 106
},
{ "Hrvatski", // Croatian
@@ -406,7 +427,14 @@ static const char* const myLanguage[15][100] = {
"50% svjetlina", // 96
"AM pomak RF razine:", // 97
"Jedinica mjerača signala:", // 98
"Use AF:" // 99
"Use AF:", // 99
"Select FM Band:", // 100
"Select AM Band:", // 101
"LW", // 102
"MW", // 103
"SW", // 104
"FM", // 105
"OIRT" // 106
},
{ "Ελληνικά", // Greek
@@ -508,7 +536,14 @@ static const char* const myLanguage[15][100] = {
"50% φωτεινότητα", // 96
"AM Ολίσθηση επιπέδου RF:", // 97
"Μονάδα μέτρησης σήματος:", // 98
"Χρήση AF:" // 99
"Χρήση AF:", // 99
"Select FM Band:", // 100
"Select AM Band:", // 101
"LW", // 102
"MW", // 103
"SW", // 104
"FM", // 105
"OIRT" // 106
},
{ "Romana", // Romanian
@@ -610,7 +645,14 @@ static const char* const myLanguage[15][100] = {
"50% brightness", // 96
"AM RF Level offset:", // 97
"Signalmeter unit:", // 98
"Use AF:" // 99
"Use AF:", // 99
"Select FM Band:", // 100
"Select AM Band:", // 101
"LW", // 102
"MW", // 103
"SW", // 104
"FM", // 105
"OIRT" // 106
},
{ "Deutsch", // German
@@ -712,7 +754,14 @@ static const char* const myLanguage[15][100] = {
"50% Helligkeit", // 96
"AM RF Level offset:", // 97
"Signalmeter unit:", // 98
"Use AF:" // 99
"Use AF:", // 99
"Select FM Band:", // 100
"Select AM Band:", // 101
"LW", // 102
"MW", // 103
"SW", // 104
"FM", // 105
"OIRT" // 106
},
{ "Czech", // Czech
@@ -814,7 +863,14 @@ static const char* const myLanguage[15][100] = {
"50% brightness", // 96
"AM RF Level offset:", // 97
"Signalmeter unit:", // 98
"Use AF:" // 99
"Use AF:", // 99
"Select FM Band:", // 100
"Select AM Band:", // 101
"LW", // 102
"MW", // 103
"SW", // 104
"FM", // 105
"OIRT" // 106
},
{ "Slovak", // Slovak
@@ -916,7 +972,14 @@ static const char* const myLanguage[15][100] = {
"50% brightness", // 96
"AM RF Level offset:", // 97
"Signalmeter unit:", // 98
"Use AF:" // 99
"Use AF:", // 99
"Select FM Band:", // 100
"Select AM Band:", // 101
"LW", // 102
"MW", // 103
"SW", // 104
"FM", // 105
"OIRT" // 106
},
{ "Français", // French
@@ -1018,7 +1081,14 @@ static const char* const myLanguage[15][100] = {
"50% brightness", // 96
"AM RF Level offset:", // 97
"Signalmeter unit:", // 98
"Use AF:" // 99
"Use AF:", // 99
"Select FM Band:", // 100
"Select AM Band:", // 101
"LW", // 102
"MW", // 103
"SW", // 104
"FM", // 105
"OIRT" // 106
},
{ "Български", // Bulgarian
@@ -1120,7 +1190,14 @@ static const char* const myLanguage[15][100] = {
"50% brightness", // 96
"AM RF Level offset:", // 97
"Signalmeter unit:", // 98
"Use AF:" // 99
"Use AF:", // 99
"Select FM Band:", // 100
"Select AM Band:", // 101
"LW", // 102
"MW", // 103
"SW", // 104
"FM", // 105
"OIRT" // 106
},
{ "Русский", // Russian
@@ -1222,7 +1299,14 @@ static const char* const myLanguage[15][100] = {
"50% яркости", // 96
"Смещение уровня AM RF:", // 97
"Измеритель сигнала:", // 98
"Режим AF:" // 99
"Режим AF:", // 99
"Select FM Band:", // 100
"Select AM Band:", // 101
"LW", // 102
"MW", // 103
"SW", // 104
"FM", // 105
"OIRT" // 106
},
{ "Українська", // Ukranian
@@ -1324,7 +1408,14 @@ static const char* const myLanguage[15][100] = {
"50% яскравості", // 96
"Зміщення рівня AM RF:", // 97
"Вимірник сигналу:", // 98
"Режим AF:" // 99
"Режим AF:", // 99
"Select FM Band:", // 100
"Select AM Band:", // 101
"LW", // 102
"MW", // 103
"SW", // 104
"FM", // 105
"OIRT" // 106
},
{ "Italiano", // Italian
@@ -1426,7 +1517,14 @@ static const char* const myLanguage[15][100] = {
"50 % di luminosità", // 96
"Offset livello RF AM: ", // 97
"Unità S - meter: ", // 98
"Use AF:" // 99
"Use AF:", // 99
"Select FM Band:", // 100
"Select AM Band:", // 101
"LW", // 102
"MW", // 103
"SW", // 104
"FM", // 105
"OIRT" // 106
},
{ "Simplified Chinese", // Simplified Chinese
@@ -1528,7 +1626,14 @@ static const char* const myLanguage[15][100] = {
"屏幕50% 亮度", // 96
"AM 高频信号偏移:", // 97
"信号单位:", // 98
"Use AF:" // 99
"使用 AF:", // 99
"选择FM波段:", // 100
"选择FM波段:", // 101
"LW", // 102
"MW", // 103
"SW", // 104
"FM", // 105
"OIRT" // 106
}
};