Added RBDS support with stationcall and underscore in PS
This commit is contained in:
+106
-15
@@ -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
@@ -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
@@ -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
@@ -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"
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user