Added RBDS support with stationcall and underscore in PS

This commit is contained in:
Sjef Verhoeven PE5PVB
2023-06-08 22:40:55 +02:00
parent c2506405fa
commit 05b232fcb4
4 changed files with 342 additions and 161 deletions
+106 -15
View File
@@ -57,14 +57,17 @@ bool Stereostatusold;
bool StereoToggle = true; bool StereoToggle = true;
bool store; bool store;
bool tuned; bool tuned;
bool underscore;
bool USBstatus;
bool XDRMute;
byte region;
byte regionold;
byte language; byte language;
byte tunemode; byte tunemode;
byte memorypos; byte memorypos;
byte memoryposold; byte memoryposold;
byte menupage = 1; byte menupage = 1;
byte menupagestotal = 2; byte menupagestotal = 2;
bool USBstatus;
bool XDRMute;
byte band; byte band;
byte BWset; byte BWset;
byte ContrastSet; byte ContrastSet;
@@ -154,8 +157,8 @@ TFT_eSprite sprite = TFT_eSprite(&tft);
void setup() { void setup() {
setupmode = true; setupmode = true;
EEPROM.begin(221); EEPROM.begin(221);
if (EEPROM.readByte(43) != 20) { if (EEPROM.readByte(43) != 21) {
EEPROM.writeByte(43, 20); EEPROM.writeByte(43, 21);
EEPROM.writeUInt(0, 10000); EEPROM.writeUInt(0, 10000);
EEPROM.writeInt(4, 0); EEPROM.writeInt(4, 0);
EEPROM.writeUInt(8, 0); EEPROM.writeUInt(8, 0);
@@ -181,8 +184,10 @@ void setup() {
EEPROM.writeByte(44, 1); EEPROM.writeByte(44, 1);
EEPROM.writeByte(45, 1); EEPROM.writeByte(45, 1);
EEPROM.writeByte(46, 0); EEPROM.writeByte(46, 0);
EEPROM.writeInt(47, 20);
EEPROM.writeByte(51, 0); EEPROM.writeByte(51, 0);
EEPROM.writeInt(55, 20); EEPROM.writeByte(52, 0);
EEPROM.writeByte(53, 0);
for (int i = 0; i < 30; i++) EEPROM.writeByte(i + 60, 0); for (int i = 0; i < 30; i++) EEPROM.writeByte(i + 60, 0);
for (int i = 0; i < 30; i++) EEPROM.writeUInt((i * 4) + 100, 8750); for (int i = 0; i < 30; i++) EEPROM.writeUInt((i * 4) + 100, 8750);
EEPROM.commit(); EEPROM.commit();
@@ -213,8 +218,10 @@ void setup() {
iMSset = EEPROM.readByte(44); iMSset = EEPROM.readByte(44);
EQset = EEPROM.readByte(45); EQset = EEPROM.readByte(45);
band = EEPROM.readByte(46); band = EEPROM.readByte(46);
LowLevelSet = EEPROM.readInt(47);
memorypos = EEPROM.readByte(51); memorypos = EEPROM.readByte(51);
LowLevelSet = EEPROM.readInt(55); region = EEPROM.readByte(52);
underscore = EEPROM.readByte(53);
for (int i = 0; i < 30; i++) memoryband[i] = EEPROM.readByte(i + 60); for (int i = 0; i < 30; i++) memoryband[i] = EEPROM.readByte(i + 60);
for (int i = 0; i < 30; i++) memory[i] = EEPROM.readUInt((i * 4) + 100); for (int i = 0; i < 30; i++) memory[i] = EEPROM.readUInt((i * 4) + 100);
@@ -368,6 +375,8 @@ void setup() {
radio.setMute(); radio.setMute();
radio.setSoftmuteFM(softmutefm); radio.setSoftmuteFM(softmutefm);
radio.setSoftmuteAM(softmuteam); radio.setSoftmuteAM(softmuteam);
if (region == 1) radio.setDeemphasis(2);
radio.rds.region = region;
LowLevelInit = true; LowLevelInit = true;
if (ConverterSet >= 200) { if (ConverterSet >= 200) {
@@ -403,7 +412,8 @@ void loop() {
tft.drawString("120", 164, 146, GFXFF); tft.drawString("120", 164, 146, GFXFF);
tft.drawString("%", 196, 146, GFXFF); tft.drawString("%", 196, 146, GFXFF);
tft.drawString("M", 6, 132, GFXFF); tft.drawString("M", 6, 132, GFXFF);
tft.drawString("PI:", 216, 191, GFXFF); if (region == 0) tft.drawString("PI:", 216, 191, GFXFF);
if (region == 1) tft.drawString("ID:", 216, 191, GFXFF);
tft.drawString("PS:", 6, 191, GFXFF); tft.drawString("PS:", 6, 191, GFXFF);
tft.drawString("PTY:", 6, 164, GFXFF); tft.drawString("PTY:", 6, 164, GFXFF);
tft.drawLine(20, 150, 200, 150, TFT_DARKGREY); tft.drawLine(20, 150, 200, 150, TFT_DARKGREY);
@@ -437,7 +447,8 @@ void loop() {
tft.drawString("120", 164, 146, GFXFF); tft.drawString("120", 164, 146, GFXFF);
tft.drawString("%", 196, 146, GFXFF); tft.drawString("%", 196, 146, GFXFF);
tft.drawString("M", 6, 132, GFXFF); tft.drawString("M", 6, 132, GFXFF);
tft.drawString("PI:", 216, 191, GFXFF); if (region == 0) tft.drawString("PI:", 216, 191, GFXFF);
if (region == 1) tft.drawString("ID:", 216, 191, GFXFF);
tft.drawString("PS:", 6, 191, GFXFF); tft.drawString("PS:", 6, 191, GFXFF);
tft.drawString("PTY:", 6, 164, GFXFF); tft.drawString("PTY:", 6, 164, GFXFF);
tft.drawLine(20, 150, 200, 150, TFT_GREYOUT); tft.drawLine(20, 150, 200, 150, TFT_GREYOUT);
@@ -590,7 +601,8 @@ void SelectBand() {
radio.getStatusAM(SStatus, USN, WAM, OStatus, BW, MStatus); radio.getStatusAM(SStatus, USN, WAM, OStatus, BW, MStatus);
if (screenmute == false) BuildDisplay(); if (screenmute == false) BuildDisplay();
tft.setFreeFont(FONT7); tft.setFreeFont(FONT7);
tft.drawString("PI:", 216, 191, GFXFF); if (region == 0) tft.drawString("PI:", 216, 191, GFXFF);
if (region == 1) tft.drawString("ID:", 216, 191, GFXFF);
tft.drawString("PS:", 6, 191, GFXFF); tft.drawString("PS:", 6, 191, GFXFF);
tft.drawString("PTY:", 6, 164, GFXFF); tft.drawString("PTY:", 6, 164, GFXFF);
tft.drawBitmap(110, 5, RDSLogo, 67, 22, TFT_GREYOUT); tft.drawBitmap(110, 5, RDSLogo, 67, 22, TFT_GREYOUT);
@@ -712,7 +724,9 @@ void ModeButtonPress() {
EEPROM.writeByte(30, softmutefm); EEPROM.writeByte(30, softmutefm);
EEPROM.writeByte(35, language); EEPROM.writeByte(35, language);
EEPROM.writeByte(36, showrdserrors); EEPROM.writeByte(36, showrdserrors);
EEPROM.writeInt(55, LowLevelSet); EEPROM.writeInt(47, LowLevelSet);
EEPROM.writeByte(52, region);
EEPROM.writeByte(53, underscore);
EEPROM.commit(); EEPROM.commit();
} }
while (digitalRead(MODEBUTTON) == LOW) delay(50); while (digitalRead(MODEBUTTON) == LOW) delay(50);
@@ -960,6 +974,21 @@ void ButtonPress() {
tft.setTextColor(TFT_YELLOW); tft.setTextColor(TFT_YELLOW);
if (edgebeep) tft.drawCentreString(myLanguage[language][42], 155, 110, GFXFF); else tft.drawCentreString(myLanguage[language][30], 155, 110, GFXFF); if (edgebeep) tft.drawCentreString(myLanguage[language][42], 155, 110, GFXFF); else tft.drawCentreString(myLanguage[language][30], 155, 110, GFXFF);
break; break;
case 130:
tft.setTextColor(TFT_WHITE);
tft.drawCentreString(myLanguage[language][46], 155, 70, GFXFF);
tft.setTextColor(TFT_YELLOW);
if (region == 0) tft.drawCentreString(myLanguage[language][47], 155, 110, GFXFF);
if (region == 1) tft.drawCentreString(myLanguage[language][48], 155, 110, GFXFF);
break;
case 150:
tft.setTextColor(TFT_WHITE);
tft.drawCentreString(myLanguage[language][49], 155, 70, GFXFF);
tft.setTextColor(TFT_YELLOW);
if (underscore) tft.drawCentreString(myLanguage[language][42], 155, 110, GFXFF); else tft.drawCentreString(myLanguage[language][30], 155, 110, GFXFF);
break;
} }
} }
} else { } else {
@@ -1171,6 +1200,28 @@ void KeyUp() {
tft.setTextColor(TFT_YELLOW); tft.setTextColor(TFT_YELLOW);
if (edgebeep) tft.drawCentreString(myLanguage[language][42], 155, 110, GFXFF); else tft.drawCentreString(myLanguage[language][30], 155, 110, GFXFF); if (edgebeep) tft.drawCentreString(myLanguage[language][42], 155, 110, GFXFF); else tft.drawCentreString(myLanguage[language][30], 155, 110, GFXFF);
break; break;
case 130:
tft.setTextColor(TFT_BLACK);
if (region == 0) region = 1; else region = 0;
if (regionold == 0) tft.drawCentreString(myLanguage[language][47], 155, 110, GFXFF);
if (regionold == 1) tft.drawCentreString(myLanguage[language][48], 155, 110, GFXFF);
if (edgebeep) edgebeep = false; else edgebeep = true;
tft.setTextColor(TFT_YELLOW);
if (region == 0) tft.drawCentreString(myLanguage[language][47], 155, 110, GFXFF);
if (region == 1) tft.drawCentreString(myLanguage[language][48], 155, 110, GFXFF);
regionold = region;
if (region == 0) radio.setDeemphasis(1);
if (region == 1) radio.setDeemphasis(2);
radio.rds.region = region;
break;
case 150:
tft.setTextColor(TFT_BLACK);
if (underscore) tft.drawCentreString(myLanguage[language][42], 155, 110, GFXFF); else tft.drawCentreString(myLanguage[language][30], 155, 110, GFXFF);
if (underscore) underscore = false; else underscore = true;
tft.setTextColor(TFT_YELLOW);
if (underscore) tft.drawCentreString(myLanguage[language][42], 155, 110, GFXFF); else tft.drawCentreString(myLanguage[language][30], 155, 110, GFXFF);
} }
} }
} }
@@ -1380,6 +1431,28 @@ void KeyDown() {
tft.setTextColor(TFT_YELLOW); tft.setTextColor(TFT_YELLOW);
if (edgebeep) tft.drawCentreString(myLanguage[language][42], 155, 110, GFXFF); else tft.drawCentreString(myLanguage[language][30], 155, 110, GFXFF); if (edgebeep) tft.drawCentreString(myLanguage[language][42], 155, 110, GFXFF); else tft.drawCentreString(myLanguage[language][30], 155, 110, GFXFF);
break; break;
case 130:
tft.setTextColor(TFT_BLACK);
if (region == 0) region = 1; else region = 0;
if (regionold == 0) tft.drawCentreString(myLanguage[language][47], 155, 110, GFXFF);
if (regionold == 1) tft.drawCentreString(myLanguage[language][48], 155, 110, GFXFF);
if (edgebeep) edgebeep = false; else edgebeep = true;
tft.setTextColor(TFT_YELLOW);
if (region == 0) tft.drawCentreString(myLanguage[language][47], 155, 110, GFXFF);
if (region == 1) tft.drawCentreString(myLanguage[language][48], 155, 110, GFXFF);
regionold = region;
if (region == 0) radio.setDeemphasis(1);
if (region == 1) radio.setDeemphasis(2);
radio.rds.region = region;
break;
case 150:
tft.setTextColor(TFT_BLACK);
if (underscore) tft.drawCentreString(myLanguage[language][42], 155, 110, GFXFF); else tft.drawCentreString(myLanguage[language][30], 155, 110, GFXFF);
if (underscore) underscore = false; else underscore = true;
tft.setTextColor(TFT_YELLOW);
if (underscore) tft.drawCentreString(myLanguage[language][42], 155, 110, GFXFF); else tft.drawCentreString(myLanguage[language][30], 155, 110, GFXFF);
} }
} }
} }
@@ -1494,8 +1567,20 @@ void showPS() {
tft.setTextColor(TFT_BLACK); tft.setTextColor(TFT_BLACK);
tft.drawString(PSold, 38, 182, GFXFF); tft.drawString(PSold, 38, 182, GFXFF);
tft.setTextColor(TFT_YELLOW); tft.setTextColor(TFT_YELLOW);
tft.drawString(radio.rds.stationName, 38, 182, GFXFF); if (underscore) {
PSold = radio.rds.stationName; char PS_[9];
strcpy (PS_, radio.rds.stationName);
for (int i = 0; i < 8; i++)
{
if (PS_[i] < 0x10) PS_[i] = '0';
if (PS_[i] == 0x20) PS_[i] = '_';
}
tft.drawString(PS_, 38, 182, GFXFF);
PSold = PS_;
} else {
tft.drawString(radio.rds.stationName, 38, 182, GFXFF);
PSold = radio.rds.stationName;
}
strcpy(programServicePrevious, radio.rds.stationName); strcpy(programServicePrevious, radio.rds.stationName);
} }
} }
@@ -1596,12 +1681,17 @@ void BuildMenu() {
tft.drawString(myLanguage[language][43], 14, 70, GFXFF); tft.drawString(myLanguage[language][43], 14, 70, GFXFF);
tft.drawString(myLanguage[language][44], 14, 90, GFXFF); tft.drawString(myLanguage[language][44], 14, 90, GFXFF);
tft.drawString(myLanguage[language][45], 14, 110, GFXFF); tft.drawString(myLanguage[language][45], 14, 110, GFXFF);
tft.drawString(myLanguage[language][46], 14, 130, GFXFF);
tft.drawString(myLanguage[language][49], 14, 150, GFXFF);
tft.setTextColor(TFT_YELLOW); tft.setTextColor(TFT_YELLOW);
tft.drawRightString(myLanguage[language][0], 305, 30, GFXFF); tft.drawRightString(myLanguage[language][0], 305, 30, GFXFF);
if (showrdserrors) tft.drawRightString(myLanguage[language][42], 305, 50, GFXFF); else tft.drawRightString(myLanguage[language][30], 305, 50, GFXFF); if (showrdserrors) tft.drawRightString(myLanguage[language][42], 305, 50, GFXFF); else tft.drawRightString(myLanguage[language][30], 305, 50, GFXFF);
if (softmutefm) tft.drawRightString(myLanguage[language][42], 305, 70, GFXFF); else tft.drawRightString(myLanguage[language][30], 305, 70, GFXFF); if (softmutefm) tft.drawRightString(myLanguage[language][42], 305, 70, GFXFF); else tft.drawRightString(myLanguage[language][30], 305, 70, GFXFF);
if (softmuteam) tft.drawRightString(myLanguage[language][42], 305, 90, GFXFF); else tft.drawRightString(myLanguage[language][30], 305, 90, GFXFF); if (softmuteam) tft.drawRightString(myLanguage[language][42], 305, 90, GFXFF); else tft.drawRightString(myLanguage[language][30], 305, 90, GFXFF);
if (edgebeep) tft.drawRightString(myLanguage[language][42], 305, 110, GFXFF); else tft.drawRightString(myLanguage[language][30], 305, 110, GFXFF); if (edgebeep) tft.drawRightString(myLanguage[language][42], 305, 110, GFXFF); else tft.drawRightString(myLanguage[language][30], 305, 110, GFXFF);
if (region == 0) tft.drawRightString(myLanguage[language][47], 305, 130, GFXFF);
if (region == 1) tft.drawRightString(myLanguage[language][48], 305, 130, GFXFF);
if (underscore) tft.drawRightString(myLanguage[language][42], 305, 150, GFXFF); else tft.drawRightString(myLanguage[language][30], 305, 150, GFXFF);
break; break;
} }
analogWrite(SMETERPIN, 0); analogWrite(SMETERPIN, 0);
@@ -1656,7 +1746,8 @@ void BuildDisplay() {
tft.drawString("dB", 300, 167, GFXFF); tft.drawString("dB", 300, 167, GFXFF);
tft.drawString("S", 6, 100, GFXFF); tft.drawString("S", 6, 100, GFXFF);
tft.drawString("M", 6, 132, GFXFF); tft.drawString("M", 6, 132, GFXFF);
tft.drawString("PI:", 216, 191, GFXFF); if (region == 0) tft.drawString("PI:", 216, 191, GFXFF);
if (region == 1) tft.drawString("ID:", 216, 191, GFXFF);
tft.drawString("PS:", 6, 191, GFXFF); tft.drawString("PS:", 6, 191, GFXFF);
tft.drawString("PTY:", 6, 164, GFXFF); tft.drawString("PTY:", 6, 164, GFXFF);
tft.drawString("%", 196, 146, GFXFF); tft.drawString("%", 196, 146, GFXFF);
@@ -2421,12 +2512,12 @@ void XDRGTKRoutine() {
LevelOffset = atol(buff + 1); LevelOffset = atol(buff + 1);
if (LevelOffset == 0) { if (LevelOffset == 0) {
MuteScreen(0); MuteScreen(0);
LowLevelSet = EEPROM.readInt(55); LowLevelSet = EEPROM.readInt(47);
Serial.print("G00\n"); Serial.print("G00\n");
} }
if (LevelOffset == 10) { if (LevelOffset == 10) {
MuteScreen(1); MuteScreen(1);
LowLevelSet = EEPROM.readInt(55); LowLevelSet = EEPROM.readInt(47);
Serial.print("G10\n"); Serial.print("G10\n");
} }
if (LevelOffset == 1) { if (LevelOffset == 1) {
+37 -44
View File
@@ -1,42 +1,5 @@
#include "TEF6686.h" #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) { void TEF6686::init(byte TEF) {
uint8_t bootstatus; uint8_t bootstatus;
Tuner_I2C_Init(); Tuner_I2C_Init();
@@ -280,12 +243,41 @@ bool TEF6686::readRDS(bool showrdserrors)
{ {
//PI //PI
if (rds.stationID == 0) rds.stationID = rds.rdsA; 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'}; if (rds.region == 0) {
rds.picode[0] = Hex[(rds.rdsA & 0xF000U) >> 12]; char Hex[16] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
rds.picode[1] = Hex[(rds.rdsA & 0x0F00U) >> 8]; rds.picode[0] = Hex[(rds.rdsA & 0xF000U) >> 12];
rds.picode[2] = Hex[(rds.rdsA & 0x00F0U) >> 4]; rds.picode[1] = Hex[(rds.rdsA & 0x0F00U) >> 8];
rds.picode[3] = Hex[(rds.rdsA & 0x000FU)]; rds.picode[2] = Hex[(rds.rdsA & 0x00F0U) >> 4];
rds.picode[4] = '\0'; 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); rds_group = (rds.rdsB >> 11);
if (rds.correctPI == false && rds.correct == true) rds.correctPI = true; if (rds.correctPI == false && rds.correct == true) rds.correctPI = true;
switch (rds_group) { switch (rds_group) {
@@ -313,7 +305,8 @@ bool TEF6686::readRDS(bool showrdserrors)
//PTY //PTY
rds.stationTypeCode = (rds.rdsB >> 5) & 0x1F; rds.stationTypeCode = (rds.rdsB >> 5) & 0x1F;
rds.hasPTY = true; 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 //TP-TA-EON-MS
if ((bitRead(rds.rdsB, 4)) == 1 && ((bitRead(rds.rdsB, 10)) == 0)) rds.hasEON = true; else rds.hasEON = false; if ((bitRead(rds.rdsB, 4)) == 1 && ((bitRead(rds.rdsB, 10)) == 0)) rds.hasEON = true; else rds.hasEON = false;
+75 -2
View File
@@ -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 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_ { typedef struct _rds_ {
byte region;
byte stationTypeCode; byte stationTypeCode;
char stationName[9]; char stationName[9];
char stationText[65]; char stationText[65];
@@ -94,9 +167,9 @@ class TEF6686 {
void setStereoLevel(uint8_t start); void setStereoLevel(uint8_t start);
void setUnMute(); void setUnMute();
void setVolume(int8_t volume); void setVolume(int8_t volume);
uint8_t af_counter;
bool mute;
void tone(uint16_t time, int16_t amplitude, uint16_t frequency); void tone(uint16_t time, int16_t amplitude, uint16_t frequency);
uint8_t af_counter;
bool mute;
private: private:
uint8_t ascii_converter (uint8_t src); uint8_t ascii_converter (uint8_t src);
+124 -100
View File
@@ -1,6 +1,6 @@
// [number of languages][number of texts][max. length of text] // [number of languages][number of texts][max. length of text]
const char myLanguage[6][46][100] = { const char myLanguage[6][50][100] = {
{ "English", // English { "English", // English
"Rotary direction changed", "Rotary direction changed",
"Please release button", "Please release button",
@@ -46,7 +46,11 @@ const char myLanguage[6][46][100] = {
"On", "On",
"Softmute FM", "Softmute FM",
"Softmute AM", "Softmute AM",
"Beep at band edge" "Beep at band edge",
"Region",
"Europe",
"USA",
"Show underscore in PS"
}, },
{ "Nederlands", // Dutch { "Nederlands", // Dutch
@@ -94,106 +98,118 @@ const char myLanguage[6][46][100] = {
"Aan", "Aan",
"Softmute FM", "Softmute FM",
"Softmute AM", "Softmute AM",
"Piep op bandeinde" "Piep op bandeinde",
"Regio",
"Europa",
"USA",
"Toon underscore in PS"
}, },
{ "Polski", // Polish { "Polski", // Polish
"Kierunek obrotu zmieniony", "Kierunek obrotu zmieniony",
"Zwolnij przycisk", "Zwolnij przycisk",
"Obrocono ekran", "Obrocono ekran",
"Kalibracja analogowego miernika", "Kalibracja analogowego miernika",
"Zwolnij przycisk gdy gotowe", "Zwolnij przycisk gdy gotowe",
"wybrano enkoder optyczny", "wybrano enkoder optyczny",
"wybrano standardowy enkoder", "wybrano standardowy enkoder",
"Odbiornik FM/AM", "Odbiornik FM/AM",
"Tuner: !Brak!", "Tuner: !Brak!",
"Glosnosc:", "Glosnosc:",
"Konwerter:", "Konwerter:",
"Dolna granica pasma:", "Dolna granica pasma:",
"Gorna granica pasma:", "Gorna granica pasma:",
"Odchylenie poziomu RF:", "Odchylenie poziomu RF:",
"Prog Stereo:", "Prog Stereo:",
"Krawedz dolnoprzep..:", "Krawedz dolnoprzep..:",
"Prog dolnoprzepust.:", "Prog dolnoprzepust.:",
"Prog niskiego sygnalu:", "Prog niskiego sygnalu:",
"Kontrast:", "Kontrast:",
"Ustaw glosnosc", "Ustaw glosnosc",
"Ustaw odchylenie konwertera", "Ustaw odchylenie konwertera",
"Ustaw dolna granice pasma", "Ustaw dolna granice pasma",
"Ustaw gorna granice pasma", "Ustaw gorna granice pasma",
"Ustaw odchylenie sygnalu", "Ustaw odchylenie sygnalu",
"Ustaw prog separacji Stereo", "Ustaw prog separacji Stereo",
"Czest. gran. filtra dolnoprzep.", "Czest. gran. filtra dolnoprzep.",
"Ustaw prog dolnoprzep.", "Ustaw prog dolnoprzep.",
"Ustaw dolna granice sygnalu", "Ustaw dolna granice sygnalu",
"Ustaw jasnosc wyswietlacza", "Ustaw jasnosc wyswietlacza",
"Wyl.", "Wyl.",
"Ekran jest wyciszony!", "Ekran jest wyciszony!",
"Aby wyl. wyciszenie odznacz RF+", "Aby wyl. wyciszenie odznacz RF+",
"WYL.", "WYL.",
"SKANOWANIE...", "SKANOWANIE...",
"Nie wykryto tunera", "Nie wykryto tunera",
"Ustawiono wersje tunera: v", "Ustawiono wersje tunera: v",
"Prosze uruchomic pon. tuner", "Prosze uruchomic pon. tuner",
"Pokaz bledy RDS", "Pokaz bledy RDS",
"Jezyk", "Jezyk",
"Wybierz swoj jezyk", "Wybierz swoj jezyk",
"WCISNIJ MODE ABY ZAMKNAC I ZAPISAC", "WCISNIJ MODE ABY ZAMKNAC I ZAPISAC",
"Wlacz.", "Wlacz.",
"Lagodne wycisz. FM", "Lagodne wycisz. FM",
"Lagodne wycisz. AM", "Lagodne wycisz. AM",
"Beep na krawedzi pasma" "Beep na krawedzi pasma",
"Region",
"Europe",
"USA",
"Show underscore in PS"
}, },
{"Hrvatski", // Croatian {"Hrvatski", // Croatian
"Smjer enkodera promij.", "Smjer enkodera promij.",
"Otpustite gumb", "Otpustite gumb",
"Zaslon je okrenut", "Zaslon je okrenut",
"Kalibracija analog. mjerača", "Kalibracija analog. mjerača",
"Otpustite gumb", "Otpustite gumb",
"Optički enkoder postav.", "Optički enkoder postav.",
"Standardni enkoder postav.", "Standardni enkoder postav.",
"FM/AM prijemnik", "FM/AM prijemnik",
"Prijemnik: !Nije pronađen!", "Prijemnik: !Nije pronađen!",
"Pomak glasnoće:", "Pomak glasnoće:",
"Pomak konvertera:", "Pomak konvertera:",
"Donja granica opsega:", "Donja granica opsega:",
"Gornja granica opsega:", "Gornja granica opsega:",
"Pomak RF razine:", "Pomak RF razine:",
"Razina stereo signala:", "Razina stereo signala:",
"Granična frekvencija:", "Granična frekvencija:",
"Razina granične frekv.:", "Razina granične frekv.:",
"Donja granica za signal:", "Donja granica za signal:",
"Svjetlina:", "Svjetlina:",
"Pomak glasnoće", "Pomak glasnoće",
"Pomak konvertera", "Pomak konvertera",
"Donja granica frekv. opsega", "Donja granica frekv. opsega",
"Gornja granica frekv. opsega", "Gornja granica frekv. opsega",
"Pomak signala", "Pomak signala",
"Razina stereo signala", "Razina stereo signala",
"Granična frekvencija", "Granična frekvencija",
"Razina granične frekv.", "Razina granične frekv.",
"Donja granica za signal", "Donja granica za signal",
"Svjetlina zaslona", "Svjetlina zaslona",
"Isključeno", "Isključeno",
"Zaslon je isključen!", "Zaslon je isključen!",
"Da biste uključili zaslon, poništite kvadratić RF+", "Da biste uključili zaslon, poništite kvadratić RF+",
"ISK.", "ISK.",
"SKENIRANJE...", "SKENIRANJE...",
"Prijemnik nije pronađen", "Prijemnik nije pronađen",
"Postavljena verzija prijemnika: v", "Postavljena verzija prijemnika: v",
"Molim, ponovno pokrenite prijemnik", "Molim, ponovno pokrenite prijemnik",
"Prikaži RDS pogreške", "Prikaži RDS pogreške",
"Jezik", "Jezik",
"Odaberite jezik", "Odaberite jezik",
"PRITISNITE MODE ZA IZLAZ I SPREMANJE", "PRITISNITE MODE ZA IZLAZ I SPREMANJE",
"Uključeno", "Uključeno",
"Softmute FM", "Softmute FM",
"Softmute AM", "Softmute AM",
"Beep na rubu frekv. opsega" "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 FM",
"Softmute AM", "Softmute AM",
"Ηχητικό σήμα στο όριο μπάντας" "Ηχητικό σήμα στο όριο μπάντας",
}, "Region",
"Europe",
"USA",
"Show underscore in PS"
},
{ "Romana", // Roman { "Romana", // Roman
"Sens rotire schimbat", "Sens rotire schimbat",
"Eliberati butonul", "Eliberati butonul",
"Ecran inversat", "Ecran inversat",
@@ -286,6 +306,10 @@ const char myLanguage[6][46][100] = {
"Pornit", "Pornit",
"FM fara sonor", "FM fara sonor",
"A fara sonorM", "A fara sonorM",
"Sunet la marginea Benzii" "Sunet la marginea Benzii",
"Region",
"Europe",
"USA",
"Show underscore in PS"
} }
}; };