You've already forked TEF6686_ESP32
Added AF Mixed flag
This commit is contained in:
@@ -528,8 +528,9 @@ void TEF6686::readRDS(byte showrdserrors)
|
||||
//AF decoder
|
||||
if (rdsblock == 0) { // Only when in GROUP 0A
|
||||
|
||||
if ((rds.rdsC >> 8) > 224 && (rds.rdsC >> 8) < 250 && ((rds.rdsC & 0xFF) * 10 + 8750) == currentfreq) { // Check for AF method B
|
||||
if ((rds.rdsC >> 8) > 224 && (rds.rdsC >> 8) < 250 && ((rds.rdsC & 0xFF) * 10 + 8750) == currentfreq && !afmethodB) { // Check for AF method B
|
||||
afmethodB = true;
|
||||
af_updatecounter++;
|
||||
}
|
||||
|
||||
if (((rds.rdsC >> 8) > 0 && (rds.rdsC >> 8) > 224) && ((rds.rdsC >> 8) > 0 && (rds.rdsC >> 8) < 250)) afinit = true;
|
||||
@@ -542,10 +543,37 @@ void TEF6686::readRDS(byte showrdserrors)
|
||||
if ((rds.rdsC & 0xFF) > 0 && (rds.rdsC & 0xFF) < 205) buffer1 = (rds.rdsC & 0xFF) * 10 + 8750; else buffer1 = 0;
|
||||
if (buffer0 != 0 || buffer1 != 0) rds.hasAF = true;
|
||||
|
||||
if (buffer1 == currentfreq && buffer0 > buffer1) for (int x = 0; x < af_counter; x++) if (af[x].frequency == buffer0) af[x].regional = true;
|
||||
if (buffer0 == currentfreq && buffer0 > buffer1) for (int x = 0; x < af_counter; x++) if (af[x].frequency == buffer1) af[x].regional = true;
|
||||
if (buffer1 == currentfreq && buffer0 > buffer1) {
|
||||
for (int x = 0; x < af_counter; x++) {
|
||||
if (af[x].frequency == buffer0 && !af[x].regional) {
|
||||
af[x].regional = true;
|
||||
af_updatecounter++;
|
||||
}
|
||||
}
|
||||
} else if (buffer1 == currentfreq && buffer0 < buffer1) {
|
||||
for (int x = 0; x < af_counter; x++) {
|
||||
if (af[x].frequency == buffer0 && !af[x].mixed) {
|
||||
af[x].mixed = true;
|
||||
af_updatecounter++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (buffer0 == currentfreq || buffer1 == currentfreq) afmethodcounter++;
|
||||
if (buffer0 == currentfreq && buffer0 > buffer1) {
|
||||
for (int x = 0; x < af_counter; x++) {
|
||||
if (af[x].frequency == buffer1 && !af[x].regional) {
|
||||
af[x].regional = true;
|
||||
af_updatecounter++;
|
||||
}
|
||||
}
|
||||
} else if (buffer0 == currentfreq && buffer0 < buffer1) {
|
||||
for (int x = 0; x < af_counter; x++) {
|
||||
if (af[x].frequency == buffer0 && !af[x].mixed) {
|
||||
af[x].mixed = true;
|
||||
af_updatecounter++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool isValuePresent = false;
|
||||
for (int i = 0; i < 50; i++) {
|
||||
@@ -558,6 +586,7 @@ void TEF6686::readRDS(byte showrdserrors)
|
||||
if (!isValuePresent) {
|
||||
af[af_counter].frequency = buffer0;
|
||||
if (af_counter < 50) af_counter++;
|
||||
af_updatecounter++;
|
||||
}
|
||||
|
||||
isValuePresent = false;
|
||||
@@ -571,6 +600,7 @@ void TEF6686::readRDS(byte showrdserrors)
|
||||
if (!isValuePresent) {
|
||||
af[af_counter].frequency = buffer1;
|
||||
if (af_counter < 50) af_counter++;
|
||||
af_updatecounter++;
|
||||
}
|
||||
|
||||
if (rds.sortaf) {
|
||||
@@ -945,6 +975,7 @@ void TEF6686::clearRDS (bool fullsearchrds)
|
||||
af[i].afvalid = true;
|
||||
af[i].checked = false;
|
||||
af[i].regional = false;
|
||||
af[i].mixed = false;
|
||||
}
|
||||
|
||||
for (i = 0; i < 20; i++) {
|
||||
@@ -997,6 +1028,7 @@ void TEF6686::clearRDS (bool fullsearchrds)
|
||||
rds.hasDynamicPTY = false;
|
||||
rds.hasStereo = false;
|
||||
af_counter = 0;
|
||||
af_updatecounter = 0;
|
||||
eon_counter = 0;
|
||||
afreset = true;
|
||||
rds.MS = 0;
|
||||
@@ -1011,7 +1043,6 @@ void TEF6686::clearRDS (bool fullsearchrds)
|
||||
afinit = false;
|
||||
errorfreepi = false;
|
||||
afmethodB = false;
|
||||
afmethodcounter = 0;
|
||||
packet0 = false;
|
||||
packet1 = false;
|
||||
packet2 = false;
|
||||
|
||||
@@ -12,47 +12,6 @@ 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_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 {
|
||||
TUNE_MAN, TUNE_AUTO, TUNE_MEM, TUNE_MI_BAND
|
||||
};
|
||||
|
||||
enum RADIO_POWER_MODE {
|
||||
DEEP_SLEEP = 0, LCD_OFF, LCD_BRIGHTNESS_1_PERCENT, LCD_BRIGHTNESS_A_QUARTER, LCD_BRIGHTNESS_HALF, RADIO_POWER_MODE_CNT
|
||||
};
|
||||
|
||||
enum RADIO_HARDWARE_MODEL {
|
||||
BASE_ILI9341 = 0, PORTABLE_ILI9341, PORTABLE_TOUCH_ILI9341,
|
||||
RADIO_HARDWARE_CNT
|
||||
};
|
||||
|
||||
enum RADIO_BATTERY_SELECTION {
|
||||
BATTERY_NONE = 0, BATTERY_VALUE, BATTERY_PERCENT,
|
||||
RADIO_BATTERY_CNT
|
||||
};
|
||||
|
||||
enum RADIO_FM_DEEMPHASIS {
|
||||
DEEMPHASIS_NONE = 0, DEEMPHASIS_50, DEEMPHASIS_75,
|
||||
DEEMPHASIS_COUNT
|
||||
};
|
||||
|
||||
static const char* const PTY_EU[] {
|
||||
"None",
|
||||
"News",
|
||||
@@ -181,6 +140,7 @@ typedef struct _af_ {
|
||||
bool afvalid;
|
||||
bool checked;
|
||||
bool regional;
|
||||
bool mixed;
|
||||
} af_;
|
||||
|
||||
typedef struct _eon_ {
|
||||
@@ -258,6 +218,7 @@ class TEF6686 {
|
||||
uint8_t rtplusblock;
|
||||
bool mute;
|
||||
bool afmethodB;
|
||||
byte af_updatecounter;
|
||||
|
||||
private:
|
||||
void RDScharConverter(const char* input, wchar_t* output, size_t size, bool under);
|
||||
@@ -296,11 +257,9 @@ class TEF6686 {
|
||||
bool rdsBerrorThreshold;
|
||||
bool rdsCerrorThreshold;
|
||||
bool rdsDerrorThreshold;
|
||||
byte afmethodcounter;
|
||||
bool packet0;
|
||||
bool packet1;
|
||||
bool packet2;
|
||||
bool packet3;
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -189,6 +189,47 @@
|
||||
|
||||
static const char* const unitString[] = {"dBμV", "dBf", "dBm"};
|
||||
|
||||
// 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
|
||||
};
|
||||
|
||||
// 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 {
|
||||
TUNE_MAN, TUNE_AUTO, TUNE_MEM, TUNE_MI_BAND
|
||||
};
|
||||
|
||||
enum RADIO_POWER_MODE {
|
||||
DEEP_SLEEP = 0, LCD_OFF, LCD_BRIGHTNESS_1_PERCENT, LCD_BRIGHTNESS_A_QUARTER, LCD_BRIGHTNESS_HALF, RADIO_POWER_MODE_CNT
|
||||
};
|
||||
|
||||
enum RADIO_HARDWARE_MODEL {
|
||||
BASE_ILI9341 = 0, PORTABLE_ILI9341, PORTABLE_TOUCH_ILI9341,
|
||||
RADIO_HARDWARE_CNT
|
||||
};
|
||||
|
||||
enum RADIO_BATTERY_SELECTION {
|
||||
BATTERY_NONE = 0, BATTERY_VALUE, BATTERY_PERCENT,
|
||||
RADIO_BATTERY_CNT
|
||||
};
|
||||
|
||||
enum RADIO_FM_DEEMPHASIS {
|
||||
DEEMPHASIS_NONE = 0, DEEMPHASIS_50, DEEMPHASIS_75,
|
||||
DEEMPHASIS_COUNT
|
||||
};
|
||||
|
||||
static const uint8_t TEFLogo[] PROGMEM = {
|
||||
0xff, 0xff, 0xf8, 0x7f, 0xfe, 0x07, 0xff, 0xe0, 0xff, 0xff, 0xf8, 0xff, 0xff, 0x1f, 0xff, 0xe0,
|
||||
0xff, 0xff, 0xf9, 0xff, 0xff, 0x1f, 0xff, 0xe0, 0xff, 0xff, 0xfb, 0xff, 0xfe, 0x3f, 0xff, 0xe0,
|
||||
|
||||
21
src/rds.cpp
21
src/rds.cpp
@@ -208,12 +208,12 @@ void ShowAdvancedRDS() {
|
||||
}
|
||||
|
||||
if (afmethodBold != radio.afmethodB || rdsreset) {
|
||||
if (!screenmute) {
|
||||
if (radio.afmethodB) tftPrint(-1, "-R", 60, 51, PrimaryColor, PrimaryColorSmooth, 16); else tftPrint(-1, "-R", 60, 51, GreyoutColor, BackgroundColor, 16);
|
||||
}
|
||||
afmethodBold = radio.afmethodB;
|
||||
if (!screenmute) {
|
||||
if (radio.afmethodB) tftPrint(-1, "-R", 60, 51, PrimaryColor, PrimaryColorSmooth, 16); else tftPrint(-1, "-R", 60, 51, GreyoutColor, BackgroundColor, 16);
|
||||
}
|
||||
afmethodBold = radio.afmethodB;
|
||||
}
|
||||
|
||||
|
||||
if (MSold != radio.rds.MS) {
|
||||
if (!screenmute) {
|
||||
switch (radio.rds.MS) {
|
||||
@@ -825,16 +825,16 @@ void ShowAFEON() {
|
||||
afpagenr = 0;
|
||||
}
|
||||
|
||||
if (af_counterold != radio.af_counter || radio.afmethodB != afmethodBold) {
|
||||
if (af_counterold != radio.af_updatecounter) {
|
||||
tft.fillRect(2, 48, 166, 150, BackgroundColor);
|
||||
for (byte i = 0; i < radio.af_counter; i++) {
|
||||
byte x = i - (afpagenr == 2 ? 30 : 0);
|
||||
if (radio.af[i].checked) {
|
||||
if (!screenmute) tftPrint(1, (radio.af[i].regional && radio.afmethodB ? "R " : "") + String(radio.af[i].frequency / 100) + "." + String((radio.af[i].frequency % 100) / 10), 50 + (x > 9 ? 54 : 0) + (x > 19 ? 54 : 0), 48 + (15 * x) - (x > 9 ? 150 : 0) - (x > 19 ? 150 : 0), InsignificantColor, InsignificantColorSmooth, 16);
|
||||
if (!screenmute) tftPrint(1, ((radio.afmethodB && radio.af[i].regional && radio.af[i].mixed) ? "M " : (radio.afmethodB && radio.af[i].regional && !radio.af[i].mixed ? "R " : "")) + String(radio.af[i].frequency / 100) + "." + String((radio.af[i].frequency % 100) / 10), 50 + (x > 9 ? 54 : 0) + (x > 19 ? 54 : 0), 48 + (15 * x) - (x > 9 ? 150 : 0) - (x > 19 ? 150 : 0), InsignificantColor, InsignificantColorSmooth, 16);
|
||||
} else if (!radio.af[i].afvalid) {
|
||||
if (!screenmute) tftPrint(1, (radio.af[i].regional && radio.afmethodB ? "R " : "") + String(radio.af[i].frequency / 100) + "." + String((radio.af[i].frequency % 100) / 10), 50 + (x > 9 ? 54 : 0) + (x > 19 ? 54 : 0), 48 + (15 * x) - (x > 9 ? 150 : 0) - (x > 19 ? 150 : 0), SignificantColor, SignificantColorSmooth, 16);
|
||||
if (!screenmute) tftPrint(1, ((radio.afmethodB && radio.af[i].regional && radio.af[i].mixed) ? "M " : (radio.afmethodB && radio.af[i].regional && !radio.af[i].mixed ? "R " : "")) + String(radio.af[i].frequency / 100) + "." + String((radio.af[i].frequency % 100) / 10), 50 + (x > 9 ? 54 : 0) + (x > 19 ? 54 : 0), 48 + (15 * x) - (x > 9 ? 150 : 0) - (x > 19 ? 150 : 0), SignificantColor, SignificantColorSmooth, 16);
|
||||
} else {
|
||||
if (!screenmute) tftPrint(1, (radio.af[i].regional && radio.afmethodB ? "R " : "") + String(radio.af[i].frequency / 100) + "." + String((radio.af[i].frequency % 100) / 10), 50 + (x > 9 ? 54 : 0) + (x > 19 ? 54 : 0), 48 + (15 * x) - (x > 9 ? 150 : 0) - (x > 19 ? 150 : 0), PrimaryColor, PrimaryColorSmooth, 16);
|
||||
if (!screenmute) tftPrint(1, ((radio.afmethodB && radio.af[i].regional && radio.af[i].mixed) ? "M " : (radio.afmethodB && radio.af[i].regional && !radio.af[i].mixed ? "R " : "")) + String(radio.af[i].frequency / 100) + "." + String((radio.af[i].frequency % 100) / 10), 50 + (x > 9 ? 54 : 0) + (x > 19 ? 54 : 0), 48 + (15 * x) - (x > 9 ? 150 : 0) - (x > 19 ? 150 : 0), PrimaryColor, PrimaryColorSmooth, 16);
|
||||
}
|
||||
if (i == 29 + (afpagenr == 2 ? 30 : 0)) i = 254;
|
||||
}
|
||||
@@ -843,8 +843,7 @@ void ShowAFEON() {
|
||||
if (radio.af_counter > 20 + (afpagenr == 2 ? 30 : 0)) tft.drawLine(113, 54, 113, 191, SecondaryColor);
|
||||
if (afpage && !screenmute) tftPrint(1, String(afpagenr) + "/2", 315, 222, SecondaryColor, SecondaryColorSmooth, 16);
|
||||
}
|
||||
af_counterold = radio.af_counter;
|
||||
afmethodBold = radio.afmethodB;
|
||||
af_counterold = radio.af_updatecounter;
|
||||
}
|
||||
|
||||
if (radio.rds.hasEON) {
|
||||
|
||||
Reference in New Issue
Block a user