You've already forked TEF6686_ESP32
Added RBDS support with stationcall and underscore in PS
This commit is contained in:
@@ -1,42 +1,5 @@
|
||||
#include "TEF6686.h"
|
||||
|
||||
const char* const PTY[]
|
||||
{
|
||||
"None",
|
||||
"News",
|
||||
"Current Affairs",
|
||||
"Information",
|
||||
"Sport",
|
||||
"Education",
|
||||
"Drama",
|
||||
"Cultures",
|
||||
"Science",
|
||||
"Varied Speech",
|
||||
"Pop Music",
|
||||
"Rock Music",
|
||||
"Easy Listening",
|
||||
"Light Classics",
|
||||
"Serious Classics",
|
||||
"Other Music",
|
||||
"Weather",
|
||||
"Finance",
|
||||
"Children's Progs",
|
||||
"Social Affair",
|
||||
"Religion",
|
||||
"Phone In",
|
||||
"Travel & Touring",
|
||||
"Leisure & Hobby",
|
||||
"Jazz Music",
|
||||
"Country Music",
|
||||
"National Music",
|
||||
"Oldies Music",
|
||||
"Folk Music",
|
||||
"Documentary",
|
||||
"Alarm Test",
|
||||
"Alarm!!!",
|
||||
" "
|
||||
};
|
||||
|
||||
void TEF6686::init(byte TEF) {
|
||||
uint8_t bootstatus;
|
||||
Tuner_I2C_Init();
|
||||
@@ -280,12 +243,41 @@ bool TEF6686::readRDS(bool showrdserrors)
|
||||
{
|
||||
//PI
|
||||
if (rds.stationID == 0) rds.stationID = rds.rdsA;
|
||||
char Hex[16] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
|
||||
rds.picode[0] = Hex[(rds.rdsA & 0xF000U) >> 12];
|
||||
rds.picode[1] = Hex[(rds.rdsA & 0x0F00U) >> 8];
|
||||
rds.picode[2] = Hex[(rds.rdsA & 0x00F0U) >> 4];
|
||||
rds.picode[3] = Hex[(rds.rdsA & 0x000FU)];
|
||||
rds.picode[4] = '\0';
|
||||
if (rds.region == 0) {
|
||||
char Hex[16] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
|
||||
rds.picode[0] = Hex[(rds.rdsA & 0xF000U) >> 12];
|
||||
rds.picode[1] = Hex[(rds.rdsA & 0x0F00U) >> 8];
|
||||
rds.picode[2] = Hex[(rds.rdsA & 0x00F0U) >> 4];
|
||||
rds.picode[3] = Hex[(rds.rdsA & 0x000FU)];
|
||||
rds.picode[4] = '\0';
|
||||
}
|
||||
if (rds.region == 1) {
|
||||
if (rds.stationID > 4096) {
|
||||
if (rds.stationID > 21671 &&(rds.stationID & 0xF00U) >> 8 == 0) rds.stationID = ((uint16_t)uint8_t(0xA0 + ((rds.stationID & 0xF000U) >> 12)) << 8) + lowByte(rds.stationID); // C0DE -> ACDE
|
||||
if (rds.stationID > 21671 && lowByte(rds.stationID) == 0) rds.stationID = 0xAF00 + uint8_t(highByte(rds.stationID)); // CD00 -> AFCD
|
||||
if (rds.stationID < 39247) {
|
||||
if (rds.stationID > 21671) {
|
||||
rds.picode[0] = 'W';
|
||||
rds.stationID -= 21672;
|
||||
} else {
|
||||
rds.picode[0] = 'K';
|
||||
rds.stationID -= 4096;
|
||||
}
|
||||
rds.picode[1] = char(rds.stationID / 676 + 65);
|
||||
rds.picode[2] = char((rds.stationID - 676 * int(rds.stationID / 676)) / 26 + 65);
|
||||
rds.picode[3] = char(((rds.stationID - 676 * int(rds.stationID / 676)) % 26) + 65);
|
||||
rds.picode[4] = '\0';
|
||||
} else {
|
||||
rds.stationID -= 4835;
|
||||
rds.picode[0] = 'K';
|
||||
rds.picode[1] = char(rds.stationID / 676 + 65);
|
||||
rds.picode[2] = char((rds.stationID - 676 * int(rds.stationID / 676)) / 26 + 65);
|
||||
rds.picode[3] = char(((rds.stationID - 676 * int(rds.stationID / 676)) % 26) + 65);
|
||||
rds.picode[4] = '\0';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
rds_group = (rds.rdsB >> 11);
|
||||
if (rds.correctPI == false && rds.correct == true) rds.correctPI = true;
|
||||
switch (rds_group) {
|
||||
@@ -313,7 +305,8 @@ bool TEF6686::readRDS(bool showrdserrors)
|
||||
//PTY
|
||||
rds.stationTypeCode = (rds.rdsB >> 5) & 0x1F;
|
||||
rds.hasPTY = true;
|
||||
strcpy(rds.stationType, PTY[rds.stationTypeCode]);
|
||||
if (rds.region == 0) strcpy(rds.stationType, PTY_EU[rds.stationTypeCode]);
|
||||
if (rds.region == 1) strcpy(rds.stationType, PTY_USA[rds.stationTypeCode]);
|
||||
|
||||
//TP-TA-EON-MS
|
||||
if ((bitRead(rds.rdsB, 4)) == 1 && ((bitRead(rds.rdsB, 10)) == 0)) rds.hasEON = true; else rds.hasEON = false;
|
||||
|
||||
@@ -11,7 +11,80 @@ 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
|
||||
};
|
||||
|
||||
const char* const PTY_EU[] {
|
||||
"None",
|
||||
"News",
|
||||
"Current Affairs",
|
||||
"Information",
|
||||
"Sport",
|
||||
"Education",
|
||||
"Drama",
|
||||
"Cultures",
|
||||
"Science",
|
||||
"Varied Speech",
|
||||
"Pop Music",
|
||||
"Rock Music",
|
||||
"Easy Listening",
|
||||
"Light Classics",
|
||||
"Serious Classics",
|
||||
"Other Music",
|
||||
"Weather",
|
||||
"Finance",
|
||||
"Children's Progs",
|
||||
"Social Affair",
|
||||
"Religion",
|
||||
"Phone In",
|
||||
"Travel & Touring",
|
||||
"Leisure & Hobby",
|
||||
"Jazz Music",
|
||||
"Country Music",
|
||||
"National Music",
|
||||
"Oldies Music",
|
||||
"Folk Music",
|
||||
"Documentary",
|
||||
"Alarm Test",
|
||||
"Alarm!!!",
|
||||
" "
|
||||
};
|
||||
|
||||
const char* const PTY_USA[] {
|
||||
"None",
|
||||
"News",
|
||||
"Information",
|
||||
"Sports",
|
||||
"Talk",
|
||||
"Rock",
|
||||
"Classic Rock",
|
||||
"Adult Hits",
|
||||
"Soft Rock",
|
||||
"Top 40",
|
||||
"Country",
|
||||
"Oldies",
|
||||
"Soft",
|
||||
"Nostalgia",
|
||||
"Jazz",
|
||||
"Classical",
|
||||
"Rhythm and Blues ",
|
||||
"Soft R & B",
|
||||
"Foreign_Language",
|
||||
"Religious Music",
|
||||
"Religious Talk",
|
||||
"Personality",
|
||||
"Public",
|
||||
"College",
|
||||
"Hablar Espanol",
|
||||
"Musica Espanol",
|
||||
"Hip Hop",
|
||||
" ",
|
||||
" ",
|
||||
"Weather",
|
||||
"Emergency Test",
|
||||
"ALERT! ALERT!",
|
||||
" "
|
||||
};
|
||||
|
||||
typedef struct _rds_ {
|
||||
byte region;
|
||||
byte stationTypeCode;
|
||||
char stationName[9];
|
||||
char stationText[65];
|
||||
@@ -94,9 +167,9 @@ class TEF6686 {
|
||||
void setStereoLevel(uint8_t start);
|
||||
void setUnMute();
|
||||
void setVolume(int8_t volume);
|
||||
uint8_t af_counter;
|
||||
bool mute;
|
||||
void tone(uint16_t time, int16_t amplitude, uint16_t frequency);
|
||||
uint8_t af_counter;
|
||||
bool mute;
|
||||
|
||||
private:
|
||||
uint8_t ascii_converter (uint8_t src);
|
||||
|
||||
224
src/language.h
224
src/language.h
@@ -1,6 +1,6 @@
|
||||
// [number of languages][number of texts][max. length of text]
|
||||
|
||||
const char myLanguage[6][46][100] = {
|
||||
const char myLanguage[6][50][100] = {
|
||||
{ "English", // English
|
||||
"Rotary direction changed",
|
||||
"Please release button",
|
||||
@@ -46,7 +46,11 @@ const char myLanguage[6][46][100] = {
|
||||
"On",
|
||||
"Softmute FM",
|
||||
"Softmute AM",
|
||||
"Beep at band edge"
|
||||
"Beep at band edge",
|
||||
"Region",
|
||||
"Europe",
|
||||
"USA",
|
||||
"Show underscore in PS"
|
||||
},
|
||||
|
||||
{ "Nederlands", // Dutch
|
||||
@@ -94,106 +98,118 @@ const char myLanguage[6][46][100] = {
|
||||
"Aan",
|
||||
"Softmute FM",
|
||||
"Softmute AM",
|
||||
"Piep op bandeinde"
|
||||
"Piep op bandeinde",
|
||||
"Regio",
|
||||
"Europa",
|
||||
"USA",
|
||||
"Toon underscore in PS"
|
||||
},
|
||||
|
||||
{ "Polski", // Polish
|
||||
"Kierunek obrotu zmieniony",
|
||||
"Zwolnij przycisk",
|
||||
"Obrocono ekran",
|
||||
"Kalibracja analogowego miernika",
|
||||
"Zwolnij przycisk gdy gotowe",
|
||||
"wybrano enkoder optyczny",
|
||||
"wybrano standardowy enkoder",
|
||||
"Odbiornik FM/AM",
|
||||
"Tuner: !Brak!",
|
||||
"Glosnosc:",
|
||||
"Konwerter:",
|
||||
"Dolna granica pasma:",
|
||||
"Gorna granica pasma:",
|
||||
"Odchylenie poziomu RF:",
|
||||
"Prog Stereo:",
|
||||
"Krawedz dolnoprzep..:",
|
||||
"Prog dolnoprzepust.:",
|
||||
"Prog niskiego sygnalu:",
|
||||
"Kontrast:",
|
||||
"Ustaw glosnosc",
|
||||
"Ustaw odchylenie konwertera",
|
||||
"Ustaw dolna granice pasma",
|
||||
"Ustaw gorna granice pasma",
|
||||
"Ustaw odchylenie sygnalu",
|
||||
"Ustaw prog separacji Stereo",
|
||||
"Czest. gran. filtra dolnoprzep.",
|
||||
"Ustaw prog dolnoprzep.",
|
||||
"Ustaw dolna granice sygnalu",
|
||||
"Ustaw jasnosc wyswietlacza",
|
||||
"Wyl.",
|
||||
"Ekran jest wyciszony!",
|
||||
"Aby wyl. wyciszenie odznacz RF+",
|
||||
"WYL.",
|
||||
"SKANOWANIE...",
|
||||
"Nie wykryto tunera",
|
||||
"Ustawiono wersje tunera: v",
|
||||
"Prosze uruchomic pon. tuner",
|
||||
"Pokaz bledy RDS",
|
||||
"Jezyk",
|
||||
"Wybierz swoj jezyk",
|
||||
"WCISNIJ MODE ABY ZAMKNAC I ZAPISAC",
|
||||
"Wlacz.",
|
||||
"Lagodne wycisz. FM",
|
||||
"Lagodne wycisz. AM",
|
||||
"Beep na krawedzi pasma"
|
||||
"Kierunek obrotu zmieniony",
|
||||
"Zwolnij przycisk",
|
||||
"Obrocono ekran",
|
||||
"Kalibracja analogowego miernika",
|
||||
"Zwolnij przycisk gdy gotowe",
|
||||
"wybrano enkoder optyczny",
|
||||
"wybrano standardowy enkoder",
|
||||
"Odbiornik FM/AM",
|
||||
"Tuner: !Brak!",
|
||||
"Glosnosc:",
|
||||
"Konwerter:",
|
||||
"Dolna granica pasma:",
|
||||
"Gorna granica pasma:",
|
||||
"Odchylenie poziomu RF:",
|
||||
"Prog Stereo:",
|
||||
"Krawedz dolnoprzep..:",
|
||||
"Prog dolnoprzepust.:",
|
||||
"Prog niskiego sygnalu:",
|
||||
"Kontrast:",
|
||||
"Ustaw glosnosc",
|
||||
"Ustaw odchylenie konwertera",
|
||||
"Ustaw dolna granice pasma",
|
||||
"Ustaw gorna granice pasma",
|
||||
"Ustaw odchylenie sygnalu",
|
||||
"Ustaw prog separacji Stereo",
|
||||
"Czest. gran. filtra dolnoprzep.",
|
||||
"Ustaw prog dolnoprzep.",
|
||||
"Ustaw dolna granice sygnalu",
|
||||
"Ustaw jasnosc wyswietlacza",
|
||||
"Wyl.",
|
||||
"Ekran jest wyciszony!",
|
||||
"Aby wyl. wyciszenie odznacz RF+",
|
||||
"WYL.",
|
||||
"SKANOWANIE...",
|
||||
"Nie wykryto tunera",
|
||||
"Ustawiono wersje tunera: v",
|
||||
"Prosze uruchomic pon. tuner",
|
||||
"Pokaz bledy RDS",
|
||||
"Jezyk",
|
||||
"Wybierz swoj jezyk",
|
||||
"WCISNIJ MODE ABY ZAMKNAC I ZAPISAC",
|
||||
"Wlacz.",
|
||||
"Lagodne wycisz. FM",
|
||||
"Lagodne wycisz. AM",
|
||||
"Beep na krawedzi pasma",
|
||||
"Region",
|
||||
"Europe",
|
||||
"USA",
|
||||
"Show underscore in PS"
|
||||
},
|
||||
|
||||
{"Hrvatski", // Croatian
|
||||
"Smjer enkodera promij.",
|
||||
"Otpustite gumb",
|
||||
"Zaslon je okrenut",
|
||||
"Kalibracija analog. mjerača",
|
||||
"Otpustite gumb",
|
||||
"Optički enkoder postav.",
|
||||
"Standardni enkoder postav.",
|
||||
"FM/AM prijemnik",
|
||||
"Prijemnik: !Nije pronađen!",
|
||||
"Pomak glasnoće:",
|
||||
"Pomak konvertera:",
|
||||
"Donja granica opsega:",
|
||||
"Gornja granica opsega:",
|
||||
"Pomak RF razine:",
|
||||
"Razina stereo signala:",
|
||||
"Granična frekvencija:",
|
||||
"Razina granične frekv.:",
|
||||
"Donja granica za signal:",
|
||||
"Svjetlina:",
|
||||
"Pomak glasnoće",
|
||||
"Pomak konvertera",
|
||||
"Donja granica frekv. opsega",
|
||||
"Gornja granica frekv. opsega",
|
||||
"Pomak signala",
|
||||
"Razina stereo signala",
|
||||
"Granična frekvencija",
|
||||
"Razina granične frekv.",
|
||||
"Donja granica za signal",
|
||||
"Svjetlina zaslona",
|
||||
"Isključeno",
|
||||
"Zaslon je isključen!",
|
||||
"Da biste uključili zaslon, poništite kvadratić RF+",
|
||||
"ISK.",
|
||||
"SKENIRANJE...",
|
||||
"Prijemnik nije pronađen",
|
||||
"Postavljena verzija prijemnika: v",
|
||||
"Molim, ponovno pokrenite prijemnik",
|
||||
"Prikaži RDS pogreške",
|
||||
"Jezik",
|
||||
"Odaberite jezik",
|
||||
"PRITISNITE MODE ZA IZLAZ I SPREMANJE",
|
||||
"Uključeno",
|
||||
"Softmute FM",
|
||||
"Softmute AM",
|
||||
"Beep na rubu frekv. opsega"
|
||||
},
|
||||
{"Hrvatski", // Croatian
|
||||
"Smjer enkodera promij.",
|
||||
"Otpustite gumb",
|
||||
"Zaslon je okrenut",
|
||||
"Kalibracija analog. mjerača",
|
||||
"Otpustite gumb",
|
||||
"Optički enkoder postav.",
|
||||
"Standardni enkoder postav.",
|
||||
"FM/AM prijemnik",
|
||||
"Prijemnik: !Nije pronađen!",
|
||||
"Pomak glasnoće:",
|
||||
"Pomak konvertera:",
|
||||
"Donja granica opsega:",
|
||||
"Gornja granica opsega:",
|
||||
"Pomak RF razine:",
|
||||
"Razina stereo signala:",
|
||||
"Granična frekvencija:",
|
||||
"Razina granične frekv.:",
|
||||
"Donja granica za signal:",
|
||||
"Svjetlina:",
|
||||
"Pomak glasnoće",
|
||||
"Pomak konvertera",
|
||||
"Donja granica frekv. opsega",
|
||||
"Gornja granica frekv. opsega",
|
||||
"Pomak signala",
|
||||
"Razina stereo signala",
|
||||
"Granična frekvencija",
|
||||
"Razina granične frekv.",
|
||||
"Donja granica za signal",
|
||||
"Svjetlina zaslona",
|
||||
"Isključeno",
|
||||
"Zaslon je isključen!",
|
||||
"Da biste uključili zaslon, poništite kvadratić RF+",
|
||||
"ISK.",
|
||||
"SKENIRANJE...",
|
||||
"Prijemnik nije pronađen",
|
||||
"Postavljena verzija prijemnika: v",
|
||||
"Molim, ponovno pokrenite prijemnik",
|
||||
"Prikaži RDS pogreške",
|
||||
"Jezik",
|
||||
"Odaberite jezik",
|
||||
"PRITISNITE MODE ZA IZLAZ I SPREMANJE",
|
||||
"Uključeno",
|
||||
"Softmute FM",
|
||||
"Softmute AM",
|
||||
"Beep na rubu frekv. opsega",
|
||||
"Region",
|
||||
"Europe",
|
||||
"USA",
|
||||
"Show underscore in PS"
|
||||
},
|
||||
|
||||
{"Ελληνικά", // Greek
|
||||
{"Ελληνικά", // Greek
|
||||
"Η διεύθυνση του ρότορα άλλαξε",
|
||||
"Παρακαλώ ελευθερώστε το πλήκτρο",
|
||||
"Η οθόνη αναποδογύρισε",
|
||||
@@ -238,10 +254,14 @@ const char myLanguage[6][46][100] = {
|
||||
"Ενεργό",
|
||||
"Softmute FM",
|
||||
"Softmute AM",
|
||||
"Ηχητικό σήμα στο όριο μπάντας"
|
||||
},
|
||||
"Ηχητικό σήμα στο όριο μπάντας",
|
||||
"Region",
|
||||
"Europe",
|
||||
"USA",
|
||||
"Show underscore in PS"
|
||||
},
|
||||
|
||||
{ "Romana", // Roman
|
||||
{ "Romana", // Roman
|
||||
"Sens rotire schimbat",
|
||||
"Eliberati butonul",
|
||||
"Ecran inversat",
|
||||
@@ -286,6 +306,10 @@ const char myLanguage[6][46][100] = {
|
||||
"Pornit",
|
||||
"FM fara sonor",
|
||||
"A fara sonorM",
|
||||
"Sunet la marginea Benzii"
|
||||
"Sunet la marginea Benzii",
|
||||
"Region",
|
||||
"Europe",
|
||||
"USA",
|
||||
"Show underscore in PS"
|
||||
}
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user