Added TA/TP/EON/MS indicator

Added RDS text fontset. But seems not to work ok.

Smaal bugfixes.
This commit is contained in:
Sjef Verhoeven PE5PVB
2023-06-11 20:04:02 +02:00
parent 5b13d408b4
commit 62e9b7a275
4 changed files with 6667 additions and 127 deletions
+9 -29
View File
@@ -288,8 +288,8 @@ bool TEF6686::readRDS(bool showrdserrors)
if ((offset == 0) && (ps_process == 0)) ps_process = 1;
if (ps_process == 1) {
ps_buffer[(offset * 2) + 0] = EBU_converter(rds.rdsD >> 8);
ps_buffer[(offset * 2) + 1] = EBU_converter(rds.rdsD & 0xFF);
ps_buffer[(offset * 2) + 0] = rds.rdsD >> 8;
ps_buffer[(offset * 2) + 1] = rds.rdsD & 0xFF;
ps_buffer[(offset * 2) + 2] = 0;
ps_process = strlen(ps_buffer) == 8 ? 2 : 1;
}
@@ -312,7 +312,7 @@ bool TEF6686::readRDS(bool showrdserrors)
if ((bitRead(rds.rdsB, 4)) == 1 && ((bitRead(rds.rdsB, 10)) == 0)) rds.hasEON = true; else rds.hasEON = false;
if ((bitRead(rds.rdsB, 4)) == 0 && ((bitRead(rds.rdsB, 10)) == 1)) rds.hasTP = true; else rds.hasTP = false;
rds.hasTA = (bitRead(rds.rdsB, 4)) && (bitRead(rds.rdsB, 10)) & 0x1F;
rds.MS = (bitRead(rds.rdsB, 3)) & 0x1F;
if (((bitRead(rds.rdsB, 3)) & 0x1F) == 1) rds.MS = 1; else rds.MS = 2;
//AF
uint8_t af_controlCode = rds.rdsC >> 8;
@@ -377,15 +377,15 @@ bool TEF6686::readRDS(bool showrdserrors)
if (rt_process == 1)
{
rds.stationTextOffset = offset;
rt_buffer[offset + 0] = EBU_converter(rds.rdsC >> 8);
rt_buffer[offset + 1] = EBU_converter(rds.rdsC & 0xff);
rt_buffer[offset + 2] = EBU_converter(rds.rdsD >> 8);
rt_buffer[offset + 3] = EBU_converter(rds.rdsD & 0xff);
rt_buffer[offset + 0] = rds.rdsC >> 8;
rt_buffer[offset + 1] = rds.rdsC & 0xff;
rt_buffer[offset + 2] = rds.rdsD >> 8;
rt_buffer[offset + 3] = rds.rdsD & 0xff;
if (offset > offsetold) offsetold = offset;
if (offset == offsetold) {
strcpy(stationTextBuffer, rt_buffer);
for (int i = 0; i < 64; i++) stationTextBuffer[i] = EBU_converter(stationTextBuffer[i]);
for (int i = 0; i < 64; i++) stationTextBuffer[i] = stationTextBuffer[i];
if (rt_timer < 64) {
strcpy(rds.stationText, stationTextBuffer);
rt_timer++;
@@ -512,26 +512,6 @@ bool TEF6686::readRDS(bool showrdserrors)
return rdsDataReady;
}
char TEF6686::EBU_converter (uint8_t src)
{
switch (src)
{
case 0x91: return 0x69; break; // ï
case 0x93: return 0x65; break; // ë
case 0x95: return 0x69; break; // ï
case 0x97: return 0x6f; break; // ö
case 0x99: return 0x75; break; // ü
case 0xd1: return 0x41; break; // Ï
case 0xd3: return 0x45; break; // Ë
case 0xd5: return 0x49; break; // Ï
case 0xd7: return 0x4f; break; // Ö
case 0xd9: return 0x55; break; // Ü
case 0x20: return 0x20; break; // SPACE
case 0x30 ... 0x7d: return src; break;
default: return 0x20; break;
}
}
bool TEF6686::checkDouble (uint16_t value)
{
for (int i = 0; i < 50; i++) if (af[i].frequency == value)return (true);
@@ -580,7 +560,7 @@ void TEF6686::clearRDS (bool fullsearchrds)
rds.hasTP = false;
rds.hasTA = false;
rds.hasEON = false;
rds.MS = false;
rds.MS = 0;
rds.hasPTY = false;
rds.hasCT = false;
rds.hasMusicTitle = false;
+1 -2
View File
@@ -86,6 +86,7 @@ const char* const PTY_USA[] {
typedef struct _rds_ {
byte region;
byte stationTypeCode;
byte MS;
char stationName[9];
char stationText[65];
char stationType[17];
@@ -110,7 +111,6 @@ typedef struct _rds_ {
bool hasTA;
bool hasEON;
bool hasAF;
bool MS;
bool hasPTY;
bool hasCT;
bool afclear;
@@ -172,7 +172,6 @@ class TEF6686 {
bool mute;
private:
char EBU_converter (uint8_t src);
uint16_t rdsTimeOut = 32768;
uint8_t ps_process;
uint8_t rt_process;
+6375 -1
View File
File diff suppressed because it is too large Load Diff