vdr  2.0.5
channels.h
Go to the documentation of this file.
1 /*
2  * channels.h: Channel handling
3  *
4  * See the main source file 'vdr.c' for copyright information and
5  * how to reach the author.
6  *
7  * $Id: channels.h 2.16 2012/06/17 11:21:33 kls Exp $
8  */
9 
10 #ifndef __CHANNELS_H
11 #define __CHANNELS_H
12 
13 #include "config.h"
14 #include "sources.h"
15 #include "thread.h"
16 #include "tools.h"
17 
18 #define ISTRANSPONDER(f1, f2) (abs((f1) - (f2)) < 4) //XXX
19 
20 #define CHANNELMOD_NONE 0x00
21 #define CHANNELMOD_ALL 0xFF
22 #define CHANNELMOD_NAME 0x01
23 #define CHANNELMOD_PIDS 0x02
24 #define CHANNELMOD_ID 0x04
25 #define CHANNELMOD_CA 0x10
26 #define CHANNELMOD_TRANSP 0x20
27 #define CHANNELMOD_LANGS 0x40
28 #define CHANNELMOD_RETUNE (CHANNELMOD_PIDS | CHANNELMOD_CA | CHANNELMOD_TRANSP)
29 
30 #define CHANNELSMOD_NONE 0
31 #define CHANNELSMOD_AUTO 1
32 #define CHANNELSMOD_USER 2
33 
34 #define MAXAPIDS 32 // audio
35 #define MAXDPIDS 16 // dolby (AC3 + DTS)
36 #define MAXSPIDS 32 // subtitles
37 #define MAXCAIDS 12 // conditional access
38 #define MAXTXTPAGES 8 // teletext pages
39 
40 #define MAXLANGCODE1 4 // a 3 letter language code, zero terminated
41 #define MAXLANGCODE2 8 // up to two 3 letter language codes, separated by '+' and zero terminated
42 
43 #define CA_FTA 0x0000
44 #define CA_DVB_MIN 0x0001
45 #define CA_DVB_MAX 0x000F
46 #define CA_USER_MIN 0x0010
47 #define CA_USER_MAX 0x00FF
48 #define CA_ENCRYPTED_MIN 0x0100
49 #define CA_ENCRYPTED_MAX 0xFFFF
50 
51 struct tChannelID {
52 private:
53  int source;
54  int nid;
55  int tid;
56  int sid;
57  int rid;
58 public:
59  tChannelID(void) { source = nid = tid = sid = rid = 0; }
60  tChannelID(int Source, int Nid, int Tid, int Sid, int Rid = 0) { source = Source; nid = Nid; tid = Tid; sid = Sid; rid = Rid; }
61  bool operator== (const tChannelID &arg) const { return source == arg.source && nid == arg.nid && tid == arg.tid && sid == arg.sid && rid == arg.rid; }
62  bool Valid(void) const { return (nid || tid) && sid; } // rid is optional and source may be 0//XXX source may not be 0???
63  tChannelID &ClrRid(void) { rid = 0; return *this; }
65  int Source(void) const { return source; }
66  int Nid(void) const { return nid; }
67  int Tid(void) const { return tid; }
68  int Sid(void) const { return sid; }
69  int Rid(void) const { return rid; }
70  static tChannelID FromString(const char *s);
71  cString ToString(void) const;
72  static const tChannelID InvalidID;
73  };
74 
76  tTeletextSubtitlePage(void) { ttxtPage = ttxtMagazine = 0; ttxtType = 0x02; strcpy(ttxtLanguage, "und"); }
77  tTeletextSubtitlePage(int page) { ttxtMagazine = (page / 100) & 0x7; ttxtPage = (((page % 100) / 10) << 4) + (page % 10); ttxtType = 0x02; strcpy(ttxtLanguage, "und"); }
82  int PageNumber(void) const { return BCDCHARTOINT(ttxtMagazine) * 100 + BCDCHARTOINT(ttxtPage); }
83  };
84 
85 class cChannel;
86 
87 class cLinkChannel : public cListObject {
88 private:
90 public:
92  cChannel *Channel(void) { return channel; }
93  };
94 
95 class cLinkChannels : public cList<cLinkChannel> {
96  };
97 
98 class cSchedule;
99 
100 class cChannel : public cListObject {
101  friend class cSchedules;
102  friend class cMenuEditChannel;
103  friend class cDvbSourceParam;
104 private:
105  static cString ToText(const cChannel *Channel);
106  char *name;
107  char *shortName;
108  char *provider;
109  char *portalName;
111  int frequency; // MHz
112  int source;
113  int srate;
114  int vpid;
115  int ppid;
116  int vtype;
117  int apids[MAXAPIDS + 1]; // list is zero-terminated
118  int atypes[MAXAPIDS + 1]; // list is zero-terminated
120  int dpids[MAXDPIDS + 1]; // list is zero-terminated
121  int dtypes[MAXAPIDS + 1]; // list is zero-terminated
123  int spids[MAXSPIDS + 1]; // list is zero-terminated
128  int tpid;
132  int caids[MAXCAIDS + 1]; // list is zero-terminated
133  int nid;
134  int tid;
135  int sid;
136  int rid;
137  int number; // Sequence number assigned on load
138  bool groupSep;
144  mutable const cSchedule *schedule;
147  cString TransponderDataToString(void) const;
148 public:
149  cChannel(void);
150  cChannel(const cChannel &Channel);
151  ~cChannel();
152  cChannel& operator= (const cChannel &Channel);
153  cString ToText(void) const;
154  bool Parse(const char *s);
155  bool Save(FILE *f);
156  const char *Name(void) const;
157  const char *ShortName(bool OrName = false) const;
158  const char *Provider(void) const { return provider; }
159  const char *PortalName(void) const { return portalName; }
160  int Frequency(void) const { return frequency; }
161  int Transponder(void) const;
162  static int Transponder(int Frequency, char Polarization);
163  int Source(void) const { return source; }
164  int Srate(void) const { return srate; }
165  int Vpid(void) const { return vpid; }
166  int Ppid(void) const { return ppid; }
167  int Vtype(void) const { return vtype; }
168  const int *Apids(void) const { return apids; }
169  const int *Dpids(void) const { return dpids; }
170  const int *Spids(void) const { return spids; }
171  int Apid(int i) const { return (0 <= i && i < MAXAPIDS) ? apids[i] : 0; }
172  int Dpid(int i) const { return (0 <= i && i < MAXDPIDS) ? dpids[i] : 0; }
173  int Spid(int i) const { return (0 <= i && i < MAXSPIDS) ? spids[i] : 0; }
174  const char *Alang(int i) const { return (0 <= i && i < MAXAPIDS) ? alangs[i] : ""; }
175  const char *Dlang(int i) const { return (0 <= i && i < MAXDPIDS) ? dlangs[i] : ""; }
176  const char *Slang(int i) const { return (0 <= i && i < MAXSPIDS) ? slangs[i] : ""; }
177  int Atype(int i) const { return (0 <= i && i < MAXAPIDS) ? atypes[i] : 0; }
178  int Dtype(int i) const { return (0 <= i && i < MAXDPIDS) ? dtypes[i] : 0; }
179  uchar SubtitlingType(int i) const { return (0 <= i && i < MAXSPIDS) ? subtitlingTypes[i] : uchar(0); }
180  uint16_t CompositionPageId(int i) const { return (0 <= i && i < MAXSPIDS) ? compositionPageIds[i] : uint16_t(0); }
181  uint16_t AncillaryPageId(int i) const { return (0 <= i && i < MAXSPIDS) ? ancillaryPageIds[i] : uint16_t(0); }
182  int Tpid(void) const { return tpid; }
185  const int *Caids(void) const { return caids; }
186  int Ca(int Index = 0) const { return Index < MAXCAIDS ? caids[Index] : 0; }
187  int Nid(void) const { return nid; }
188  int Tid(void) const { return tid; }
189  int Sid(void) const { return sid; }
190  int Rid(void) const { return rid; }
191  int Number(void) const { return number; }
192  void SetNumber(int Number) { number = Number; }
193  bool GroupSep(void) const { return groupSep; }
194  const char *Parameters(void) const { return parameters; }
195  const cLinkChannels* LinkChannels(void) const { return linkChannels; }
196  const cChannel *RefChannel(void) const { return refChannel; }
197  bool IsAtsc(void) const { return cSource::IsAtsc(source); }
198  bool IsCable(void) const { return cSource::IsCable(source); }
199  bool IsSat(void) const { return cSource::IsSat(source); }
200  bool IsTerr(void) const { return cSource::IsTerr(source); }
201  bool IsSourceType(char Source) const { return cSource::IsType(source, Source); }
202  tChannelID GetChannelID(void) const { return tChannelID(source, nid, (nid || tid) ? tid : Transponder(), sid, rid); }
203  bool HasTimer(void) const;
204  int Modification(int Mask = CHANNELMOD_ALL);
205  void CopyTransponderData(const cChannel *Channel);
206  bool SetTransponderData(int Source, int Frequency, int Srate, const char *Parameters, bool Quiet = false);
207  void SetId(int Nid, int Tid, int Sid, int Rid = 0);
208  void SetName(const char *Name, const char *ShortName, const char *Provider);
209  void SetPortalName(const char *PortalName);
210  void SetPids(int Vpid, int Ppid, int Vtype, int *Apids, int *Atypes, char ALangs[][MAXLANGCODE2], int *Dpids, int *Dtypes, char DLangs[][MAXLANGCODE2], int *Spids, char SLangs[][MAXLANGCODE2], int Tpid);
211  void SetTeletextSubtitlePages(tTeletextSubtitlePage pages[], int numberOfPages);
212  void SetCaIds(const int *CaIds); // list must be zero-terminated
213  void SetCaDescriptors(int Level);
216  void SetSubtitlingDescriptors(uchar *SubtitlingTypes, uint16_t *CompositionPageIds, uint16_t *AncillaryPageIds);
217  };
218 
219 class cChannels : public cRwLock, public cConfig<cChannel> {
220 private:
224  int modified;
227  void DeleteDuplicateChannels(void);
228 public:
229  cChannels(void);
230  bool Load(const char *FileName, bool AllowComments = false, bool MustExist = false);
231  void HashChannel(cChannel *Channel);
232  void UnhashChannel(cChannel *Channel);
233  int GetNextGroup(int Idx); // Get next channel group
234  int GetPrevGroup(int Idx); // Get previous channel group
235  int GetNextNormal(int Idx); // Get next normal channel (not group)
236  int GetPrevNormal(int Idx); // Get previous normal channel (not group)
237  void ReNumber(void); // Recalculate 'number' based on channel type
238  cChannel *GetByNumber(int Number, int SkipGap = 0);
239  cChannel *GetByServiceID(int Source, int Transponder, unsigned short ServiceID);
240  cChannel *GetByChannelID(tChannelID ChannelID, bool TryWithoutRid = false, bool TryWithoutPolarization = false);
242  int BeingEdited(void) { return beingEdited; }
243  void IncBeingEdited(void) { beingEdited++; }
244  void DecBeingEdited(void) { beingEdited--; }
245  bool HasUniqueChannelID(cChannel *NewChannel, cChannel *OldChannel = NULL);
246  bool SwitchTo(int Number);
247  int MaxNumber(void) { return maxNumber; }
248  int MaxChannelNameLength(void);
249  int MaxShortChannelNameLength(void);
250  void SetModified(bool ByUser = false);
251  int Modified(void);
255  cChannel *NewChannel(const cChannel *Transponder, const char *Name, const char *ShortName, const char *Provider, int Nid, int Tid, int Sid, int Rid = 0);
256  };
257 
258 extern cChannels Channels;
259 
260 cString ChannelString(const cChannel *Channel, int Number);
261 
262 #endif //__CHANNELS_H
cChannel * channel
Definition: channels.h:89
uint16_t AncillaryPageId(int i) const
Definition: channels.h:181
int sid
Definition: channels.h:56
unsigned char uchar
Definition: tools.h:30
int Tid(void) const
Definition: channels.h:188
void SetId(int Nid, int Tid, int Sid, int Rid=0)
Definition: channels.c:231
int Modified(void)
Returns 0 if no channels have been modified, 1 if an automatic modification has been made...
Definition: channels.c:1057
int Vpid(void) const
Definition: channels.h:165
int Number(void) const
Definition: channels.h:191
const int * Dpids(void) const
Definition: channels.h:169
int tid
Definition: channels.h:134
static tChannelID FromString(const char *s)
Definition: channels.c:25
int Index(void) const
Definition: tools.c:1920
int Dtype(int i) const
Definition: channels.h:178
int GetPrevGroup(int Idx)
Definition: channels.c:902
void SetNumber(int Number)
Definition: channels.h:192
int MaxShortChannelNameLength(void)
Definition: channels.c:1040
int MaxNumber(void)
Definition: channels.h:247
const cLinkChannels * LinkChannels(void) const
Definition: channels.h:195
const char * PortalName(void) const
Definition: channels.h:159
int Rid(void) const
Definition: channels.h:69
void CopyTransponderData(const cChannel *Channel)
Definition: channels.c:185
int Nid(void) const
Definition: channels.h:187
uint16_t compositionPageIds[MAXSPIDS]
Definition: channels.h:126
uchar SubtitlingType(int i) const
Definition: channels.h:179
int Spid(int i) const
Definition: channels.h:173
int TotalTeletextSubtitlePages() const
Definition: channels.h:184
uint16_t ancillaryPageIds[MAXSPIDS]
Definition: channels.h:127
int Ca(int Index=0) const
Definition: channels.h:186
int Dpid(int i) const
Definition: channels.h:172
int modification
Definition: channels.h:143
tChannelID(void)
Definition: channels.h:59
int tid
Definition: channels.h:55
static bool IsTerr(int Code)
Definition: sources.h:43
int ppid
Definition: channels.h:115
int maxChannelNameLength
Definition: channels.h:222
int Srate(void) const
Definition: channels.h:164
uchar subtitlingTypes[MAXSPIDS]
Definition: channels.h:125
const char * ShortName(bool OrName=false) const
Definition: channels.c:131
cChannel & operator=(const cChannel &Channel)
Definition: channels.c:108
Definition: tools.h:479
bool GroupSep(void) const
Definition: channels.h:193
int Sid(void) const
Definition: channels.h:68
tChannelID & ClrPolarization(void)
Definition: channels.c:49
#define MAXTXTPAGES
Definition: channels.h:38
char * name
Definition: channels.h:106
void ReNumber(void)
Definition: channels.c:926
int spids[MAXSPIDS+1]
Definition: channels.h:123
int MaxChannelNameLength(void)
Definition: channels.c:1029
cString nameSource
Definition: channels.h:140
const char * Dlang(int i) const
Definition: channels.h:175
int nid
actually the "original" network id
Definition: channels.h:54
int Ppid(void) const
Definition: channels.h:166
int Transponder(void) const
Returns the transponder frequency in MHz, plus the polarization in case of sat.
Definition: channels.c:156
bool groupSep
Definition: channels.h:138
int nid
Definition: channels.h:133
const cSchedule * schedule
Definition: channels.h:144
char * provider
Definition: channels.h:108
const char * FileName(void)
Definition: config.h:118
int totalTtxtSubtitlePages
Definition: channels.h:130
const char * Alang(int i) const
Definition: channels.h:174
int maxShortChannelNameLength
Definition: channels.h:223
bool Save(FILE *f)
Definition: channels.c:822
int tpid
Definition: channels.h:128
const char * Parameters(void) const
Definition: channels.h:194
bool Load(const char *FileName, bool AllowComments=false, bool MustExist=false)
Definition: channels.c:874
bool SetTransponderData(int Source, int Frequency, int Srate, const char *Parameters, bool Quiet=false)
Definition: channels.c:195
#define CHANNELMOD_ALL
Definition: channels.h:21
cChannel * Channel(void)
Definition: channels.h:92
char * shortName
Definition: channels.h:107
const char * Name(void) const
Definition: channels.c:121
cChannel * NewChannel(const cChannel *Transponder, const char *Name, const char *ShortName, const char *Provider, int Nid, int Tid, int Sid, int Rid=0)
Definition: channels.c:1064
void SetName(const char *Name, const char *ShortName, const char *Provider)
Definition: channels.c:250
void SetTeletextSubtitlePages(tTeletextSubtitlePage pages[], int numberOfPages)
Definition: channels.c:411
int Source(void) const
Definition: channels.h:163
const int * Caids(void) const
Definition: channels.h:185
int Rid(void) const
Definition: channels.h:190
char alangs[MAXAPIDS][MAXLANGCODE2]
Definition: channels.h:119
cChannel(void)
Definition: channels.c:58
bool Parse(const char *s)
Definition: channels.c:590
static bool IsAtsc(int Code)
Definition: sources.h:40
void IncBeingEdited(void)
Definition: channels.h:243
const tTeletextSubtitlePage * TeletextSubtitlePages() const
Definition: channels.h:183
tChannelID(int Source, int Nid, int Tid, int Sid, int Rid=0)
Definition: channels.h:60
int GetNextNormal(int Idx)
Definition: channels.c:910
int source
Definition: channels.h:53
int Tpid(void) const
Definition: channels.h:182
int GetPrevNormal(int Idx)
Definition: channels.c:918
void SetCaDescriptors(int Level)
Definition: channels.c:452
cChannels(void)
Definition: channels.c:847
int __EndData__
Definition: channels.h:139
char dlangs[MAXDPIDS][MAXLANGCODE2]
Definition: channels.h:122
int Atype(int i) const
Definition: channels.h:177
static bool IsSat(int Code)
Definition: sources.h:42
int atypes[MAXAPIDS+1]
Definition: channels.h:118
int rid
Definition: channels.h:136
tChannelID GetChannelID(void) const
Definition: channels.h:202
int frequency
Definition: channels.h:111
void SetModified(bool ByUser=false)
Definition: channels.c:1051
int GetNextGroup(int Idx)
Definition: channels.c:894
cString TransponderDataToString(void) const
Definition: channels.c:514
const char * Provider(void) const
Definition: channels.h:158
cChannel * GetByServiceID(int Source, int Transponder, unsigned short ServiceID)
Definition: channels.c:959
int __BeginData__
Definition: channels.h:110
const cChannel * RefChannel(void) const
Definition: channels.h:196
int Frequency(void) const
Returns the actual frequency, as given in 'channels.conf'.
Definition: channels.h:160
#define MAXLANGCODE1
Definition: channels.h:40
void SetSubtitlingDescriptors(uchar *SubtitlingTypes, uint16_t *CompositionPageIds, uint16_t *AncillaryPageIds)
Definition: channels.c:395
cChannel * GetByChannelID(tChannelID ChannelID, bool TryWithoutRid=false, bool TryWithoutPolarization=false)
Definition: channels.c:972
int vpid
Definition: channels.h:114
#define MAXLANGCODE2
Definition: channels.h:41
bool HasTimer(void) const
Definition: channels.c:169
bool Valid(void) const
Definition: channels.h:62
#define BCDCHARTOINT(x)
Definition: tools.h:64
char ttxtLanguage[MAXLANGCODE1]
Definition: channels.h:78
int sid
Definition: channels.h:135
static bool IsType(int Code, char Source)
Definition: sources.h:44
bool IsSat(void) const
Definition: channels.h:199
cString shortNameSource
Definition: channels.h:141
const int * Apids(void) const
Definition: channels.h:168
void DecBeingEdited(void)
Definition: channels.h:244
void SetLinkChannels(cLinkChannels *LinkChannels)
Definition: channels.c:462
bool HasUniqueChannelID(cChannel *NewChannel, cChannel *OldChannel=NULL)
Definition: channels.c:1013
#define MAXDPIDS
Definition: channels.h:35
cString ToString(void) const
Definition: channels.c:42
void SetRefChannel(cChannel *RefChannel)
Definition: channels.c:509
int dpids[MAXDPIDS+1]
Definition: channels.h:120
cString ChannelString(const cChannel *Channel, int Number)
Definition: channels.c:1079
bool IsTerr(void) const
Definition: channels.h:200
cChannel * GetByNumber(int Number, int SkipGap=0)
Definition: channels.c:944
tTeletextSubtitlePage teletextSubtitlePages[MAXTXTPAGES]
Definition: channels.h:131
Definition: thread.h:53
int PageNumber(void) const
Definition: channels.h:82
void DeleteDuplicateChannels(void)
Definition: channels.c:855
Definition: epg.h:143
bool IsSourceType(char Source) const
Definition: channels.h:201
static bool IsCable(int Code)
Definition: sources.h:41
uint16_t CompositionPageId(int i) const
Definition: channels.h:180
int Apid(int i) const
Definition: channels.h:171
~cChannel()
Definition: channels.c:84
int maxNumber
Definition: channels.h:221
int source
Definition: channels.h:112
cString parameters
Definition: channels.h:142
int rid
Definition: channels.h:57
char slangs[MAXSPIDS][MAXLANGCODE2]
Definition: channels.h:124
#define MAXSPIDS
Definition: channels.h:36
int vtype
Definition: channels.h:116
int caids[MAXCAIDS+1]
Definition: channels.h:132
const char * Slang(int i) const
Definition: channels.h:176
bool operator==(const tChannelID &arg) const
Definition: channels.h:61
cHash< cChannel > channelsHashSid
Definition: channels.h:226
cChannels Channels
Definition: channels.c:845
int Tid(void) const
Definition: channels.h:67
cChannel * GetByTransponderID(tChannelID ChannelID)
Definition: channels.c:1001
static const tChannelID InvalidID
Definition: channels.h:72
int beingEdited
Definition: channels.h:225
int Modification(int Mask=CHANNELMOD_ALL)
Definition: channels.c:178
bool SwitchTo(int Number)
Definition: channels.c:1023
const int * Spids(void) const
Definition: channels.h:170
void UnhashChannel(cChannel *Channel)
Definition: channels.c:889
cChannel * refChannel
Definition: channels.h:146
tTeletextSubtitlePage(void)
Definition: channels.h:76
int modified
Definition: channels.h:224
bool IsCable(void) const
Definition: channels.h:198
int number
Definition: channels.h:137
cLinkChannel(cChannel *Channel)
Definition: channels.h:91
#define MAXCAIDS
Definition: channels.h:37
void SetPids(int Vpid, int Ppid, int Vtype, int *Apids, int *Atypes, char ALangs[][MAXLANGCODE2], int *Dpids, int *Dtypes, char DLangs[][MAXLANGCODE2], int *Spids, char SLangs[][MAXLANGCODE2], int Tpid)
Definition: channels.c:330
int Sid(void) const
Definition: channels.h:189
void SetPortalName(const char *PortalName)
Definition: channels.c:276
tChannelID & ClrRid(void)
Definition: channels.h:63
cLinkChannels * linkChannels
Definition: channels.h:145
char * portalName
Definition: channels.h:109
bool IsAtsc(void) const
Definition: channels.h:197
int Vtype(void) const
Definition: channels.h:167
int BeingEdited(void)
Definition: channels.h:242
tTeletextSubtitlePage(int page)
Definition: channels.h:77
void SetCaIds(const int *CaIds)
Definition: channels.c:431
cString ToText(void) const
Definition: channels.c:585
int fixedTtxtSubtitlePages
Definition: channels.h:129
int srate
Definition: channels.h:113
void HashChannel(cChannel *Channel)
Definition: channels.c:884
Definition: tools.h:166
int Source(void) const
Definition: channels.h:65
int apids[MAXAPIDS+1]
Definition: channels.h:117
#define MAXAPIDS
Definition: channels.h:34
int Nid(void) const
Definition: channels.h:66
int dtypes[MAXAPIDS+1]
Definition: channels.h:121