add support for rds data on own pids (i.e. hitradio ffh, harmony fm)
[enigma2.git] / lib / dvb / radiotext.h
1 #ifndef __lib_dvb_radiotext_h
2 #define __lib_dvb_radiotext_h
3
4 #include <lib/base/object.h>
5 #include <lib/dvb/idvb.h>
6 #include <lib/dvb/pesparse.h>
7 #include <lib/gdi/gpixmap.h>
8
9 class eDVBRdsDecoder: public iObject, public ePESParser, public Object
10 {
11         DECLARE_REF(eDVBRdsDecoder);
12         int msgPtr, bsflag, qdar_pos, t_ptr, qdarmvi_show;
13         unsigned char message[66], lastmessage[66], datamessage[256], rtp_buf[5], leninfo, text_len, text_len2, state;
14         unsigned char rtp_item[64][64], rtplus_osd[64]; //rtp
15         unsigned char qdar[60*1024]; //60 kB for holding Rass qdar archive
16         unsigned short crc16, crc;
17         long part, parts, partcnt;
18         unsigned char rass_picture_mask[5];  // 40 bits... (10 * 4 pictures)
19         void addToPictureMask(int id);
20         void removeFromPictureMask(int id);
21         int m_type;
22         int m_pid;
23 public:
24         enum { RadioTextChanged, RtpTextChanged, RassInteractivePicMaskChanged, RecvRassSlidePic };
25         eDVBRdsDecoder(iDVBDemux *demux, int type);
26         ~eDVBRdsDecoder();
27         int start(int pid);
28         void connectEvent(const Slot1<void, int> &slot, ePtr<eConnection> &connection);
29         const char *getRadioText() { return (const char*)message; }
30         const char *getRtpText() { return (const char*)rtplus_osd; }
31         ePyObject getRassPictureMask();
32         std::string getRassPicture(int page, int subpage);
33         std::string getRassSlideshowPicture() { return "/tmp/RassLast.mvi"; }
34         int getPid() { return m_pid; }
35 private:
36         void abortNonAvail();
37         void processPESPacket(__u8 *pkt, int len);
38         void gotAncillaryData(const __u8 *data, int len);
39         void process_qdar(unsigned char*);
40         ePtr<iDVBPESReader> m_pes_reader;
41         ePtr<eConnection> m_read_connection;
42         Signal1<void, int> m_event;
43         ePtr<eTimer> m_abortTimer;
44 };
45
46 #endif