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
|
//AF decoder
|
||||||
if (rdsblock == 0) { // Only when in GROUP 0A
|
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;
|
afmethodB = true;
|
||||||
|
af_updatecounter++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (((rds.rdsC >> 8) > 0 && (rds.rdsC >> 8) > 224) && ((rds.rdsC >> 8) > 0 && (rds.rdsC >> 8) < 250)) afinit = true;
|
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 ((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 (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 (buffer1 == currentfreq && buffer0 > buffer1) {
|
||||||
if (buffer0 == currentfreq && buffer0 > buffer1) for (int x = 0; x < af_counter; x++) if (af[x].frequency == buffer1) af[x].regional = true;
|
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;
|
bool isValuePresent = false;
|
||||||
for (int i = 0; i < 50; i++) {
|
for (int i = 0; i < 50; i++) {
|
||||||
@@ -558,6 +586,7 @@ void TEF6686::readRDS(byte showrdserrors)
|
|||||||
if (!isValuePresent) {
|
if (!isValuePresent) {
|
||||||
af[af_counter].frequency = buffer0;
|
af[af_counter].frequency = buffer0;
|
||||||
if (af_counter < 50) af_counter++;
|
if (af_counter < 50) af_counter++;
|
||||||
|
af_updatecounter++;
|
||||||
}
|
}
|
||||||
|
|
||||||
isValuePresent = false;
|
isValuePresent = false;
|
||||||
@@ -571,6 +600,7 @@ void TEF6686::readRDS(byte showrdserrors)
|
|||||||
if (!isValuePresent) {
|
if (!isValuePresent) {
|
||||||
af[af_counter].frequency = buffer1;
|
af[af_counter].frequency = buffer1;
|
||||||
if (af_counter < 50) af_counter++;
|
if (af_counter < 50) af_counter++;
|
||||||
|
af_updatecounter++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (rds.sortaf) {
|
if (rds.sortaf) {
|
||||||
@@ -945,6 +975,7 @@ void TEF6686::clearRDS (bool fullsearchrds)
|
|||||||
af[i].afvalid = true;
|
af[i].afvalid = true;
|
||||||
af[i].checked = false;
|
af[i].checked = false;
|
||||||
af[i].regional = false;
|
af[i].regional = false;
|
||||||
|
af[i].mixed = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < 20; i++) {
|
for (i = 0; i < 20; i++) {
|
||||||
@@ -997,6 +1028,7 @@ void TEF6686::clearRDS (bool fullsearchrds)
|
|||||||
rds.hasDynamicPTY = false;
|
rds.hasDynamicPTY = false;
|
||||||
rds.hasStereo = false;
|
rds.hasStereo = false;
|
||||||
af_counter = 0;
|
af_counter = 0;
|
||||||
|
af_updatecounter = 0;
|
||||||
eon_counter = 0;
|
eon_counter = 0;
|
||||||
afreset = true;
|
afreset = true;
|
||||||
rds.MS = 0;
|
rds.MS = 0;
|
||||||
@@ -1011,7 +1043,6 @@ void TEF6686::clearRDS (bool fullsearchrds)
|
|||||||
afinit = false;
|
afinit = false;
|
||||||
errorfreepi = false;
|
errorfreepi = false;
|
||||||
afmethodB = false;
|
afmethodB = false;
|
||||||
afmethodcounter = 0;
|
|
||||||
packet0 = false;
|
packet0 = false;
|
||||||
packet1 = false;
|
packet1 = false;
|
||||||
packet2 = 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
|
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[] {
|
static const char* const PTY_EU[] {
|
||||||
"None",
|
"None",
|
||||||
"News",
|
"News",
|
||||||
@@ -181,6 +140,7 @@ typedef struct _af_ {
|
|||||||
bool afvalid;
|
bool afvalid;
|
||||||
bool checked;
|
bool checked;
|
||||||
bool regional;
|
bool regional;
|
||||||
|
bool mixed;
|
||||||
} af_;
|
} af_;
|
||||||
|
|
||||||
typedef struct _eon_ {
|
typedef struct _eon_ {
|
||||||
@@ -258,6 +218,7 @@ class TEF6686 {
|
|||||||
uint8_t rtplusblock;
|
uint8_t rtplusblock;
|
||||||
bool mute;
|
bool mute;
|
||||||
bool afmethodB;
|
bool afmethodB;
|
||||||
|
byte af_updatecounter;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void RDScharConverter(const char* input, wchar_t* output, size_t size, bool under);
|
void RDScharConverter(const char* input, wchar_t* output, size_t size, bool under);
|
||||||
@@ -296,11 +257,9 @@ class TEF6686 {
|
|||||||
bool rdsBerrorThreshold;
|
bool rdsBerrorThreshold;
|
||||||
bool rdsCerrorThreshold;
|
bool rdsCerrorThreshold;
|
||||||
bool rdsDerrorThreshold;
|
bool rdsDerrorThreshold;
|
||||||
byte afmethodcounter;
|
|
||||||
bool packet0;
|
bool packet0;
|
||||||
bool packet1;
|
bool packet1;
|
||||||
bool packet2;
|
bool packet2;
|
||||||
bool packet3;
|
bool packet3;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -189,6 +189,47 @@
|
|||||||
|
|
||||||
static const char* const unitString[] = {"dBμV", "dBf", "dBm"};
|
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 = {
|
static const uint8_t TEFLogo[] PROGMEM = {
|
||||||
0xff, 0xff, 0xf8, 0x7f, 0xfe, 0x07, 0xff, 0xe0, 0xff, 0xff, 0xf8, 0xff, 0xff, 0x1f, 0xff, 0xe0,
|
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,
|
0xff, 0xff, 0xf9, 0xff, 0xff, 0x1f, 0xff, 0xe0, 0xff, 0xff, 0xfb, 0xff, 0xfe, 0x3f, 0xff, 0xe0,
|
||||||
|
|||||||
19
src/rds.cpp
19
src/rds.cpp
@@ -208,10 +208,10 @@ void ShowAdvancedRDS() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (afmethodBold != radio.afmethodB || rdsreset) {
|
if (afmethodBold != radio.afmethodB || rdsreset) {
|
||||||
if (!screenmute) {
|
if (!screenmute) {
|
||||||
if (radio.afmethodB) tftPrint(-1, "-R", 60, 51, PrimaryColor, PrimaryColorSmooth, 16); else tftPrint(-1, "-R", 60, 51, GreyoutColor, BackgroundColor, 16);
|
if (radio.afmethodB) tftPrint(-1, "-R", 60, 51, PrimaryColor, PrimaryColorSmooth, 16); else tftPrint(-1, "-R", 60, 51, GreyoutColor, BackgroundColor, 16);
|
||||||
}
|
}
|
||||||
afmethodBold = radio.afmethodB;
|
afmethodBold = radio.afmethodB;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (MSold != radio.rds.MS) {
|
if (MSold != radio.rds.MS) {
|
||||||
@@ -825,16 +825,16 @@ void ShowAFEON() {
|
|||||||
afpagenr = 0;
|
afpagenr = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (af_counterold != radio.af_counter || radio.afmethodB != afmethodBold) {
|
if (af_counterold != radio.af_updatecounter) {
|
||||||
tft.fillRect(2, 48, 166, 150, BackgroundColor);
|
tft.fillRect(2, 48, 166, 150, BackgroundColor);
|
||||||
for (byte i = 0; i < radio.af_counter; i++) {
|
for (byte i = 0; i < radio.af_counter; i++) {
|
||||||
byte x = i - (afpagenr == 2 ? 30 : 0);
|
byte x = i - (afpagenr == 2 ? 30 : 0);
|
||||||
if (radio.af[i].checked) {
|
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) {
|
} 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 {
|
} 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;
|
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 (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);
|
if (afpage && !screenmute) tftPrint(1, String(afpagenr) + "/2", 315, 222, SecondaryColor, SecondaryColorSmooth, 16);
|
||||||
}
|
}
|
||||||
af_counterold = radio.af_counter;
|
af_counterold = radio.af_updatecounter;
|
||||||
afmethodBold = radio.afmethodB;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (radio.rds.hasEON) {
|
if (radio.rds.hasEON) {
|
||||||
|
|||||||
Reference in New Issue
Block a user