Added LIC and optimised AF in API

This commit is contained in:
Sjef Verhoeven PE5PVB
2023-07-06 22:33:30 +02:00
parent 00d78899f6
commit c4f64279d3
3 changed files with 464 additions and 46 deletions

View File

@@ -357,24 +357,55 @@ void TEF6686::readRDS(bool showrdserrors)
if (((bitRead(rds.rdsB, 3)) & 0x1F) == 1) rds.MS = 1; else rds.MS = 2; // Read MS flag if (((bitRead(rds.rdsB, 3)) & 0x1F) == 1) rds.MS = 1; else rds.MS = 2; // Read MS flag
//AF decoder //AF decoder
uint8_t af_controlCode = rds.rdsC >> 8; if ((rds.rdsB >> 11) == 0 && af_counter < 50) {
if ((af_controlCode < 224) && (af_counter < 50)) { uint16_t buffer0;// = (rds.rdsC >> 8);
uint16_t buffer0 = (rds.rdsC >> 8); uint16_t buffer1;// = (rds.rdsC & 0xFF);
uint16_t buffer1 = (rds.rdsC & 0xFF);
rds.hasAF = true; if ((rds.rdsC >> 8) > 0 && (rds.rdsC >> 8) < 205) buffer0 = (rds.rdsC >> 8) * 10 + 8750; else buffer0 = 0;
if (buffer0 != 0 && buffer1 != 0) { if ((rds.rdsC & 0xFF) > 0 && (rds.rdsC & 0xFF) < 205) buffer1 = (rds.rdsC & 0xFF) * 10 + 8750; else buffer1 = 0;
buffer0 = buffer0 * 10 + 8750; if (buffer0 != 0 || buffer1 != 0) rds.hasAF = true;
buffer1 = buffer1 * 10 + 8750;
bool isDouble = false; bool isValuePresent = false;
isDouble = checkDouble(buffer0); for (int i = 0; i < 50; i++) {
if (!isDouble && buffer0 != 0) { if (buffer0 == currentfreq || buffer0 == 0 || af[i].frequency == buffer0) {
af[af_counter].frequency = buffer0; isValuePresent = true;
af_counter++; break;
} }
isDouble = checkDouble(buffer1); }
if (!isDouble && buffer1 != 0) {
af[af_counter].frequency = buffer1; if (!isValuePresent) {
af_counter++; af[af_counter].frequency = buffer0;
if ((rds.rdsC & 0xFF) == 205) af[af_counter].filler = true;
af_counter++;
}
isValuePresent = false;
for (int i = 0; i < 50; i++) {
if (buffer1 == currentfreq || buffer1 == 0 || af[i].frequency == buffer1) {
isValuePresent = true;
break;
}
}
if (!isValuePresent) {
af[af_counter].frequency = buffer1;
af_counter++;
}
for (int i = 0; i < 51 - 1; i++) {
for (int j = 0; j < 51 - i - 1; j++) {
// Ignore elements with value 0
if (af[j].frequency == 0) continue;
if (af[j].frequency > af[j + 1].frequency && af[j + 1].frequency != 0) {
// Swap the elements
uint16_t temp = af[j].frequency;
bool temp2 = af[j].filler;
af[j].frequency = af[j + 1].frequency;
af[j].filler = af[j + 1].filler;
af[j + 1].frequency = temp;
af[j + 1].filler = temp2;
}
} }
} }
} }
@@ -383,10 +414,15 @@ void TEF6686::readRDS(bool showrdserrors)
case RDS_GROUP_1A: { case RDS_GROUP_1A: {
if (rds.correct) { if (rds.correct) {
if (rds.rdsC < 255) { // ECC code readout if (rds.rdsC >> 12 == 0) { // ECC code readout
rds.ECC = rds.rdsC; rds.ECC = rds.rdsC & 0xff;
rds.hasECC = true; rds.hasECC = true;
} }
if (rds.rdsC >> 12 == 3) { // ECC code readout
rds.LIC = rds.rdsC & 0xff;
rds.hasLIC = true;
}
} }
} break; } break;
@@ -607,7 +643,7 @@ void TEF6686::readRDS(bool showrdserrors)
eon[position].mappedfreq = ((rds.rdsC & 0xFF) * 10 + 8750); // Add mapped frequency to array eon[position].mappedfreq = ((rds.rdsC & 0xFF) * 10 + 8750); // Add mapped frequency to array
} }
} }
} }
} }
} }
@@ -620,18 +656,6 @@ void TEF6686::readRDS(bool showrdserrors)
} }
} }
bool TEF6686::checkDouble (uint16_t value)
{
for (int i = 0; i < 50; i++) if (af[i].frequency == value)return (true);
return (false);
}
bool TEF6686::checkDoubleEON (uint16_t value)
{
for (int i = 0; i < 5; i++) if (eon[i].pi == value)return (true);
return (false);
}
void TEF6686::clearRDS (bool fullsearchrds) void TEF6686::clearRDS (bool fullsearchrds)
{ {
devTEF_Radio_Set_RDS(fullsearchrds); devTEF_Radio_Set_RDS(fullsearchrds);
@@ -651,7 +675,11 @@ void TEF6686::clearRDS (bool fullsearchrds)
for (i = 0; i < 65; i++) rt_buffer[i] = 0; for (i = 0; i < 65; i++) rt_buffer[i] = 0;
for (i = 0; i < 18; i++) rds.stationType[i] = 0; for (i = 0; i < 18; i++) rds.stationType[i] = 0;
for (i = 0; i < 6; i++) rds.picode[i] = 0; for (i = 0; i < 6; i++) rds.picode[i] = 0;
for (i = 0; i < 50; i++) af[i].frequency = 0;
for (i = 0; i < 50; i++) {
af[i].frequency = 0;
af[i].filler = false;
}
for (i = 0; i < 5; i++) { for (i = 0; i < 5; i++) {
eon[i].pi = 0; eon[i].pi = 0;
@@ -670,8 +698,10 @@ void TEF6686::clearRDS (bool fullsearchrds)
} }
rds.ECC = 0; rds.ECC = 0;
rds.LIC = 0;
rds.stationTypeCode = 32; rds.stationTypeCode = 32;
rds.hasECC = false; rds.hasECC = false;
rds.hasLIC = false;
rds.hasRT = false; rds.hasRT = false;
rds.hasRDS = false; rds.hasRDS = false;
rds.hasTP = false; rds.hasTP = false;

View File

@@ -106,7 +106,8 @@ typedef struct _rds_ {
char picode[6]; char picode[6];
uint16_t hours, minutes, days, months, years, offsetplusmin, rdsA, rdsB, rdsC, rdsD, rdsErr; uint16_t hours, minutes, days, months, years, offsetplusmin, rdsA, rdsB, rdsC, rdsD, rdsErr;
int8_t offset; int8_t offset;
int ECC; unsigned int ECC;
unsigned int LIC;
bool rdsAerror; bool rdsAerror;
bool rdsBerror; bool rdsBerror;
bool rdsCerror; bool rdsCerror;
@@ -117,6 +118,7 @@ typedef struct _rds_ {
bool hasStereo; bool hasStereo;
bool hasRDS; bool hasRDS;
bool hasECC; bool hasECC;
bool hasLIC;
bool hasRT; bool hasRT;
bool hasTP; bool hasTP;
bool hasTA; bool hasTA;
@@ -138,6 +140,7 @@ typedef struct _rds_ {
typedef struct _af_ { typedef struct _af_ {
uint16_t frequency; uint16_t frequency;
bool filler;
} af_; } af_;
typedef struct _eon_ { typedef struct _eon_ {
@@ -209,8 +212,6 @@ class TEF6686 {
char rt_buffer[65]; char rt_buffer[65];
char rt_buffer2[65]; char rt_buffer2[65];
bool useRTPlus = true; bool useRTPlus = true;
bool checkDouble (uint16_t value);
bool checkDoubleEON (uint16_t value);
byte eon_counter; byte eon_counter;
bool ABold; bool ABold;
char stationTextBuffer[65]; char stationTextBuffer[65];

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]
static const char myLanguage[9][87][85] = { static const char myLanguage[9][130][85] = {
{ "English", // English { "English", // English
"Rotary direction changed", // 1 "Rotary direction changed", // 1
"Please release button", // 2 "Please release button", // 2
@@ -87,7 +87,50 @@ static const char myLanguage[9][87][85] = {
"Dendro", // 83 "Dendro", // 83
"Sakura", // 84 "Sakura", // 84
"Whiteout", // 85 "Whiteout", // 85
"NOT POSSIBLE" // 86 "NOT POSSIBLE", // 86
"Albanian", // 87
"Breton", // 88
"Catalan", // 89
"Croatian", // 90
"Welsh", // 91
"Czech", // 92
"Danish", // 93
"German", // 94
"English", // 95
"Spanish", // 96
"Esperanto", // 97
"Estonian", // 98
"Basque", // 99
"Faroese", // 100
"French", // 101
"Frisian", // 102
"Irish", // 103
"Gaelic", // 104
"Galician", // 105
"Icelandic", // 106
"Italian", // 107
"Lappish", // 108
"Latin", // 109
"Latvian", // 110
"Luxembourgian", // 111
"Lithuanian", // 112
"Hungarian", // 113
"Maltese", // 114
"Dutch", // 115
"Norwegian", // 116
"Occitan", // 117
"Polish", // 118
"Portuguese", // 119
"Romanian", // 120
"Romansh", // 121
"Serbian", // 122
"Slovak", // 123
"Slovene", // 124
"Finnish", // 125
"Swedish", // 126
"Turkish", // 127
"Flemish", // 128
"Walloon" // 129
}, },
{ "Nederlands", // Dutch { "Nederlands", // Dutch
@@ -176,7 +219,50 @@ static const char myLanguage[9][87][85] = {
"Dendro", // 83 "Dendro", // 83
"Sakura", // 84 "Sakura", // 84
"Whiteout", // 85 "Whiteout", // 85
"NIET MOGELIJK" // 86 "NIET MOGELIJK", // 86
"Albanees", // 87
"Bretons", // 88
"Catalaans", // 89
"Kroatisch", // 90
"Welsh", // 91
"Tsjechisch", // 92
"Deens", // 93
"Duits", // 94
"Engels", // 95
"Spaans", // 96
"Esperanto", // 97
"Ests", // 98
"Baskisch", // 99
"Faroese", // 100
"Frans", // 101
"Fries", // 102
"Iers", // 103
"Gaelic", // 104
"Gallicisch", // 105
"IJslands", // 106
"Italiaans", // 107
"Laplands", // 108
"Latijn", // 109
"Lets", // 110
"Luxemburgs", // 111
"Litouws", // 112
"Hongaars", // 113
"Maltees", // 114
"Nederlands", // 115
"Noors", // 116
"Occitaans", // 117
"Pools", // 118
"Portugees", // 119
"Roemeens", // 120
"Reto-Romaans", // 121
"Servisch", // 122
"Slowaaks", // 123
"Sloveens", // 124
"Fins", // 125
"Zweeds", // 126
"Turks", // 127
"Vlaams", // 128
"Waals" // 129
}, // }, //
{ "Polski", // Polish { "Polski", // Polish
@@ -265,7 +351,50 @@ static const char myLanguage[9][87][85] = {
"Dendro", // 83 "Dendro", // 83
"Sakura", // 84 "Sakura", // 84
"Whiteout", // 85 "Whiteout", // 85
"NOT POSSIBLE" // 86 "NOT POSSIBLE", // 86
"Albanian", // 87
"Breton", // 88
"Catalan", // 89
"Croatian", // 90
"Welsh", // 91
"Czech", // 92
"Danish", // 93
"German", // 94
"English", // 95
"Spanish", // 96
"Esperanto", // 97
"Estonian", // 98
"Basque", // 99
"Faroese", // 100
"French", // 101
"Frisian", // 102
"Irish", // 103
"Gaelic", // 104
"Galician", // 105
"Icelandic", // 106
"Italian", // 107
"Lappish", // 108
"Latin", // 109
"Latvian", // 110
"Luxembourgian", // 111
"Lithuanian", // 112
"Hungarian", // 113
"Maltese", // 114
"Dutch", // 115
"Norwegian", // 116
"Occitan", // 117
"Polish", // 118
"Portuguese", // 119
"Romanian", // 120
"Romansh", // 121
"Serbian", // 122
"Slovak", // 123
"Slovene", // 124
"Finnish", // 125
"Swedish", // 126
"Turkish", // 127
"Flemish", // 128
"Walloon" // 129
}, },
{ "Hrvatski", // Croatian { "Hrvatski", // Croatian
@@ -354,7 +483,50 @@ static const char myLanguage[9][87][85] = {
"Dendro", // 83 "Dendro", // 83
"Sakura", // 84 "Sakura", // 84
"Whiteout", // 85 "Whiteout", // 85
"NOT POSSIBLE" // 86 "NOT POSSIBLE", // 86
"Albanian", // 87
"Breton", // 88
"Catalan", // 89
"Croatian", // 90
"Welsh", // 91
"Czech", // 92
"Danish", // 93
"German", // 94
"English", // 95
"Spanish", // 96
"Esperanto", // 97
"Estonian", // 98
"Basque", // 99
"Faroese", // 100
"French", // 101
"Frisian", // 102
"Irish", // 103
"Gaelic", // 104
"Galician", // 105
"Icelandic", // 106
"Italian", // 107
"Lappish", // 108
"Latin", // 109
"Latvian", // 110
"Luxembourgian", // 111
"Lithuanian", // 112
"Hungarian", // 113
"Maltese", // 114
"Dutch", // 115
"Norwegian", // 116
"Occitan", // 117
"Polish", // 118
"Portuguese", // 119
"Romanian", // 120
"Romansh", // 121
"Serbian", // 122
"Slovak", // 123
"Slovene", // 124
"Finnish", // 125
"Swedish", // 126
"Turkish", // 127
"Flemish", // 128
"Walloon" // 129
}, },
{ "Ελληνικά", // Greek { "Ελληνικά", // Greek
@@ -443,7 +615,50 @@ static const char myLanguage[9][87][85] = {
"Dendro", // 83 "Dendro", // 83
"Sakura", // 84 "Sakura", // 84
"Whiteout", // 85 "Whiteout", // 85
"NOT POSSIBLE" // 86 "NOT POSSIBLE", // 86
"Albanian", // 87
"Breton", // 88
"Catalan", // 89
"Croatian", // 90
"Welsh", // 91
"Czech", // 92
"Danish", // 93
"German", // 94
"English", // 95
"Spanish", // 96
"Esperanto", // 97
"Estonian", // 98
"Basque", // 99
"Faroese", // 100
"French", // 101
"Frisian", // 102
"Irish", // 103
"Gaelic", // 104
"Galician", // 105
"Icelandic", // 106
"Italian", // 107
"Lappish", // 108
"Latin", // 109
"Latvian", // 110
"Luxembourgian", // 111
"Lithuanian", // 112
"Hungarian", // 113
"Maltese", // 114
"Dutch", // 115
"Norwegian", // 116
"Occitan", // 117
"Polish", // 118
"Portuguese", // 119
"Romanian", // 120
"Romansh", // 121
"Serbian", // 122
"Slovak", // 123
"Slovene", // 124
"Finnish", // 125
"Swedish", // 126
"Turkish", // 127
"Flemish", // 128
"Walloon" // 129
}, },
{ "Romana", // Romanian { "Romana", // Romanian
@@ -532,7 +747,50 @@ static const char myLanguage[9][87][85] = {
"Dendro", // 83 "Dendro", // 83
"Sakura", // 84 "Sakura", // 84
"Whiteout", // 85 "Whiteout", // 85
"NOT POSSIBLE" // 86 "NOT POSSIBLE", // 86
"Albanian", // 87
"Breton", // 88
"Catalan", // 89
"Croatian", // 90
"Welsh", // 91
"Czech", // 92
"Danish", // 93
"German", // 94
"English", // 95
"Spanish", // 96
"Esperanto", // 97
"Estonian", // 98
"Basque", // 99
"Faroese", // 100
"French", // 101
"Frisian", // 102
"Irish", // 103
"Gaelic", // 104
"Galician", // 105
"Icelandic", // 106
"Italian", // 107
"Lappish", // 108
"Latin", // 109
"Latvian", // 110
"Luxembourgian", // 111
"Lithuanian", // 112
"Hungarian", // 113
"Maltese", // 114
"Dutch", // 115
"Norwegian", // 116
"Occitan", // 117
"Polish", // 118
"Portuguese", // 119
"Romanian", // 120
"Romansh", // 121
"Serbian", // 122
"Slovak", // 123
"Slovene", // 124
"Finnish", // 125
"Swedish", // 126
"Turkish", // 127
"Flemish", // 128
"Walloon" // 129
}, },
{ "Deutsch", // German { "Deutsch", // German
@@ -621,7 +879,50 @@ static const char myLanguage[9][87][85] = {
"Dendro", // 83 "Dendro", // 83
"Sakura", // 84 "Sakura", // 84
"Whiteout", // 85 "Whiteout", // 85
"NOT POSSIBLE" // 86 "NOT POSSIBLE", // 86
"Albanian", // 87
"Breton", // 88
"Catalan", // 89
"Croatian", // 90
"Welsh", // 91
"Czech", // 92
"Danish", // 93
"German", // 94
"English", // 95
"Spanish", // 96
"Esperanto", // 97
"Estonian", // 98
"Basque", // 99
"Faroese", // 100
"French", // 101
"Frisian", // 102
"Irish", // 103
"Gaelic", // 104
"Galician", // 105
"Icelandic", // 106
"Italian", // 107
"Lappish", // 108
"Latin", // 109
"Latvian", // 110
"Luxembourgian", // 111
"Lithuanian", // 112
"Hungarian", // 113
"Maltese", // 114
"Dutch", // 115
"Norwegian", // 116
"Occitan", // 117
"Polish", // 118
"Portuguese", // 119
"Romanian", // 120
"Romansh", // 121
"Serbian", // 122
"Slovak", // 123
"Slovene", // 124
"Finnish", // 125
"Swedish", // 126
"Turkish", // 127
"Flemish", // 128
"Walloon" // 129
}, },
{ "Czech", // Czech { "Czech", // Czech
@@ -710,7 +1011,50 @@ static const char myLanguage[9][87][85] = {
"Dendro", // 83 "Dendro", // 83
"Sakura", // 84 "Sakura", // 84
"Whiteout", // 85 "Whiteout", // 85
"NOT POSSIBLE" // 86 "NOT POSSIBLE", // 86
"Albanian", // 87
"Breton", // 88
"Catalan", // 89
"Croatian", // 90
"Welsh", // 91
"Czech", // 92
"Danish", // 93
"German", // 94
"English", // 95
"Spanish", // 96
"Esperanto", // 97
"Estonian", // 98
"Basque", // 99
"Faroese", // 100
"French", // 101
"Frisian", // 102
"Irish", // 103
"Gaelic", // 104
"Galician", // 105
"Icelandic", // 106
"Italian", // 107
"Lappish", // 108
"Latin", // 109
"Latvian", // 110
"Luxembourgian", // 111
"Lithuanian", // 112
"Hungarian", // 113
"Maltese", // 114
"Dutch", // 115
"Norwegian", // 116
"Occitan", // 117
"Polish", // 118
"Portuguese", // 119
"Romanian", // 120
"Romansh", // 121
"Serbian", // 122
"Slovak", // 123
"Slovene", // 124
"Finnish", // 125
"Swedish", // 126
"Turkish", // 127
"Flemish", // 128
"Walloon" // 129
}, },
{ "Slovak", // Slovak { "Slovak", // Slovak
@@ -799,6 +1143,49 @@ static const char myLanguage[9][87][85] = {
"Dendro", // 83 "Dendro", // 83
"Sakura", // 84 "Sakura", // 84
"Whiteout", // 85 "Whiteout", // 85
"NOT POSSIBLE" // 86 "NOT POSSIBLE", // 86
"Albanian", // 87
"Breton", // 88
"Catalan", // 89
"Croatian", // 90
"Welsh", // 91
"Czech", // 92
"Danish", // 93
"German", // 94
"English", // 95
"Spanish", // 96
"Esperanto", // 97
"Estonian", // 98
"Basque", // 99
"Faroese", // 100
"French", // 101
"Frisian", // 102
"Irish", // 103
"Gaelic", // 104
"Galician", // 105
"Icelandic", // 106
"Italian", // 107
"Lappish", // 108
"Latin", // 109
"Latvian", // 110
"Luxembourgian", // 111
"Lithuanian", // 112
"Hungarian", // 113
"Maltese", // 114
"Dutch", // 115
"Norwegian", // 116
"Occitan", // 117
"Polish", // 118
"Portuguese", // 119
"Romanian", // 120
"Romansh", // 121
"Serbian", // 122
"Slovak", // 123
"Slovene", // 124
"Finnish", // 125
"Swedish", // 126
"Turkish", // 127
"Flemish", // 128
"Walloon" // 129
}, },
}; };