summaryrefslogtreecommitdiff
path: root/rdsreceiver.c
diff options
context:
space:
mode:
authorUlrich Eckhardt <uli@uli-eckhardt.de>2018-07-15 14:55:50 (GMT)
committerUlrich Eckhardt <uli@uli-eckhardt.de>2018-07-15 14:55:50 (GMT)
commit2c775ce4f145570600f24821e2010f3e95d18f8e (patch)
treee797af148c8fcb24d676866a409be83493b60f12 /rdsreceiver.c
parentb579440eba200c178b3860683634b4b83053cd23 (diff)
downloadvdr-plugin-radio-2c775ce4f145570600f24821e2010f3e95d18f8e.tar.gz
vdr-plugin-radio-2c775ce4f145570600f24821e2010f3e95d18f8e.tar.bz2
Improved CRC check.
- The CRC check uses now the lenght of the RDS Frame, this improves decoding specially on HarmonyFM. - Code splits and code cleanups. - Remove currently unused Traffic decoder.
Diffstat (limited to 'rdsreceiver.c')
-rw-r--r--rdsreceiver.c45
1 files changed, 12 insertions, 33 deletions
diff --git a/rdsreceiver.c b/rdsreceiver.c
index 63bbeac..42b8320 100644
--- a/rdsreceiver.c
+++ b/rdsreceiver.c
@@ -29,7 +29,7 @@ void cRDSReceiver::Receive(const uchar *Data, int Length)
#else
void cRDSReceiver::Receive(uchar *Data, int Length)
#endif
- {
+{
const int mframel = 263; // max. 255(MSG)+4(ADD/SQC/MFL)+2(CRC)+2(Start/Stop) of RDS-data
static unsigned char mtext[mframel + 1];
static int index;
@@ -42,10 +42,10 @@ void cRDSReceiver::Receive(const uchar *Data, int Length)
}
int offset;
- if (Data[1] & 0x40) { // 1.TS-Frame, payload-unit-start
- offset = (Data[3] & 0x20) ? Data[4] + 11 : 10; // Header + ADFL + 6 byte: PES-Startcode, -StreamID, -PacketLength
- if (Data[offset - 3] == 0xbd) { // StreamID = Private stream 1 (for rds)
- offset += 3; // 3 byte: Extension + Headerlength
+ if (Data[1] & 0x40) { // 1.TS-Frame, payload-unit-start
+ offset = (Data[3] & 0x20) ? Data[4] + 11 : 10; // Header + ADFL + 6 byte: PES-Startcode, -StreamID, -PacketLength
+ if (Data[offset - 3] == 0xbd) { // StreamID = Private stream 1 (for rds)
+ offset += 3; // 3 byte: Extension + Headerlength
offset += Data[offset - 1];
} else {
return;
@@ -81,7 +81,7 @@ void cRDSReceiver::Receive(const uchar *Data, int Length)
rt_bstuff = false;
mec = 0;
if ((S_Verbose & 0x0f) >= 2) {
- printf("\nRDS-Start: ");
+ printf("\nrdsreceiver: RDS-Start: ");
}
}
@@ -137,19 +137,19 @@ void cRDSReceiver::Receive(const uchar *Data, int Length)
if (index >= mframel) { // max. rdslength, garbage ?
rt_start = false;
if ((S_Verbose & 0x0f) >= 2) {
- printf("(RDS-Error: too long, garbage ?)\n");
+ printf("rdsreceiver: (RDS-Error: too long %d, garbage ?)\n", index);
}
}
}
- if (rt_start && val == 0xff) { // End
+ if (rt_start && (val == 0xff)) { // End
rt_start = false;
if ((S_Verbose & 0x0f) >= 2) {
printf("(RDS-End)\n");
}
if (index < 9) { // min. rdslength, garbage ?
if ((S_Verbose & 0x0f) >= 1) {
- printf("RDS-Error: too short -> garbage ?\n");
+ printf("rdsreceiver: RDS-Error: too short -> garbage ?\n");
}
} else {
// crc16-check
@@ -157,29 +157,18 @@ void cRDSReceiver::Receive(const uchar *Data, int Length)
if (crc16 != (mtext[index - 2] << 8) + mtext[index - 1]) {
if ((S_Verbose & 0x0f) >= 1) {
printf(
- "RDS-Error: wrong CRC # calc = %04x <> transmit = %02x%02x\n",
+ "rdsreceiver: RDS-Error: wrong CRC # calc = %04x <> transmit = %02x%02x\n",
crc16, mtext[index - 2], mtext[index - 1]);
}
} else {
switch (mec) {
case 0x0a:
- RadioAudio->RadiotextDecode(mtext, index); // Radiotext
+ RadioAudio->RadiotextDecode(mtext); // Radiotext
break;
case 0x46:
switch ((mtext[7] << 8) + mtext[8]) { // ODA-ID
case 0x4bd7:
- RadioAudio->RadiotextDecode(mtext, index); // RT+
- break;
- case 0x0d45:
- case 0xcd46:
- if ((S_Verbose & 0x20) > 0) {
- unsigned char tmc[6]; // TMC Alert-C
- int i;
- for (i = 9; i <= (index - 3); i++) {
- tmc[i - 9] = mtext[i];
- }
- tmc_parser(tmc, i - 8);
- }
+ RadioAudio->RadiotextDecode(mtext); // RT+
break;
default:
if ((S_Verbose & 0x0f) >= 2) {
@@ -202,16 +191,6 @@ void cRDSReceiver::Receive(const uchar *Data, int Length)
case 0x02:
RadioAudio->RDS_PsPtynDecode(false, mtext, index); // PS
break;
- case 0x30:
- if ((S_Verbose & 0x20) > 0) { // TMC Alert-C
- unsigned char tmc[6];
- int i;
- for (i = 7; i <= (index - 3); i++) {
- tmc[i - 7] = mtext[i];
- }
- tmc_parser(tmc, i - 6);
- }
- break;
}
}
}