+ else
+ {
+ eDebug("[RDS/Rass] CRC error, skip Rass-Qdar-Packet");
+ eDebug("[RDS/Rass] CRC read: %04X CRC calculated: %04X",crc16,crc^0xFFFF);
+ partcnt=-1;
+ }
+ state=0;
+ break;
+
+ // process RT plus tags ...
+ case 38: // Message Element Length
+ text_len=c;
+ ++state;
+ break;
+ case 39: // Application ID
+ case 40: // always 0x4BD7 so we ignore it ;)
+ case 41: // Applicationgroup Typecode/PTY ... ignore
+ ++state;
+ break;
+ case 42:
+ rtp_buf[0]=c;
+ ++state;
+ break;
+ case 43:
+ rtp_buf[1]=c;
+ ++state;
+ break;
+ case 44:
+ rtp_buf[2]=c;
+ ++state;
+ break;
+ case 45:
+ rtp_buf[3]=c;
+ ++state;
+ break;
+ case 46: // bit 10#4 = Item Togglebit
+ // bit 10#3 = Item Runningbit
+ // Tag1: bit 10#2..11#5 = Contenttype, 11#4..12#7 = Startmarker, 12#6..12#1 = Length
+ rtp_buf[4]=c;
+ if (lastmessage[0] == 0) // no rds message till now ? quit ...
+ break;
+ int rtp_typ[2],rtp_start[2],rtp_len[2];
+ rtp_typ[0] = (0x38 & rtp_buf[0]<<3) | rtp_buf[1]>>5;
+ rtp_start[0] = (0x3e & rtp_buf[1]<<1) | rtp_buf[2]>>7;
+ rtp_len[0] = 0x3f & rtp_buf[2]>>1;
+ // Tag2: bit 12#0..13#3 = Contenttype, 13#2..14#5 = Startmarker, 14#4..14#0 = Length(5bit)
+ rtp_typ[1] = (0x20 & rtp_buf[2]<<5) | rtp_buf[3]>>3;
+ rtp_start[1] = (0x38 & rtp_buf[3]<<3) | rtp_buf[4]>>5;
+ rtp_len[1] = 0x1f & rtp_buf[4];
+
+ unsigned char rtplus_osd_tmp[64];
+
+ if (rtp_start[0] < 66 && (rtp_len[0]+rtp_start[0]) < 66)
+ {
+ memcpy(rtp_item[rtp_typ[0]],lastmessage+rtp_start[0],rtp_len[0]+1);
+ rtp_item[rtp_typ[0]][rtp_len[0]+1]=0;
+ }
+
+ if (rtp_typ[0] != rtp_typ[1])
+ {
+ if (rtp_start[1] < 66 && (rtp_len[1]+rtp_start[1]) < 66)
+ {
+ memcpy(rtp_item[rtp_typ[1]],lastmessage+rtp_start[1],rtp_len[1]+1);
+ rtp_item[rtp_typ[1]][rtp_len[1]+1]=0;
+ }
+ }
+
+ // main RTPlus item_types used by the radio stations:
+ // 1 title
+ // 4 artist
+ // 24 info.date_time
+ // 31 stationname
+ // 32 program.now
+ // 39 homepage
+ // 41 phone.hotline
+ // 46 email.hotline
+ // todo: make a window to display all saved items ...
+
+ //create RTPlus OSD for title/artist
+ rtplus_osd[0]=0;
+
+ if ( rtp_item[4][0] != 0 )//artist
+ sprintf((char*)rtplus_osd_tmp," (%s)",rtp_item[4]);
+
+ if ( rtp_item[1][0] != 0 )//title
+ sprintf((char*)rtplus_osd,"%s%s",rtp_item[1],rtplus_osd_tmp);
+
+ if ( rtplus_osd[0] != 0 )
+ {
+ /*emit*/ m_event(RtpTextChanged);
+ eDebug("RTPlus: %s",rtplus_osd);
+ }
+
+ state=0;
+ break;