vdr  2.0.6
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 
39 #define MAXLANGCODE1 4 // a 3 letter language code, zero terminated
40 #define MAXLANGCODE2 8 // up to two 3 letter language codes, separated by '+' and zero terminated
41 
42 #define CA_FTA 0x0000
43 #define CA_DVB_MIN 0x0001
44 #define CA_DVB_MAX 0x000F
45 #define CA_USER_MIN 0x0010
46 #define CA_USER_MAX 0x00FF
47 #define CA_ENCRYPTED_MIN 0x0100
48 #define CA_ENCRYPTED_MAX 0xFFFF
49 
50 struct tChannelID {
51 private:
52  int source;
53  int nid;
54  int tid;
55  int sid;
56  int rid;
57 public:
58  tChannelID(void) { source = nid = tid = sid = rid = 0; }
59  tChannelID(int Source, int Nid, int Tid, int Sid, int Rid = 0) { source = Source; nid = Nid; tid = Tid; sid = Sid; rid = Rid; }
60  bool operator== (const tChannelID &arg) const { return source == arg.source && nid == arg.nid && tid == arg.tid && sid == arg.sid && rid == arg.rid; }
61  bool Valid(void) const { return (nid || tid) && sid; } // rid is optional and source may be 0//XXX source may not be 0???
62  tChannelID &ClrRid(void) { rid = 0; return *this; }
64  int Source(void) const { return source; }
65  int Nid(void) const { return nid; }
66  int Tid(void) const { return tid; }
67  int Sid(void) const { return sid; }
68  int Rid(void) const { return rid; }
69  static tChannelID FromString(const char *s);
70  cString ToString(void) const;
71  static const tChannelID InvalidID;
72  };
73 
74 class cChannel;
75 
76 class cLinkChannel : public cListObject {
77 private:
79 public:
81  cChannel *Channel(void) { return channel; }
82  };
83 
84 class cLinkChannels : public cList<cLinkChannel> {
85  };
86 
87 class cSchedule;
88 
89 class cChannel : public cListObject {
90  friend class cSchedules;
91  friend class cMenuEditChannel;
92  friend class cDvbSourceParam;
93 private:
94  static cString ToText(const cChannel *Channel);
95  char *name;
96  char *shortName;
97  char *provider;
98  char *portalName;
100  int frequency; // MHz
101  int source;
102  int srate;
103  int vpid;
104  int ppid;
105  int vtype;
106  int apids[MAXAPIDS + 1]; // list is zero-terminated
107  int atypes[MAXAPIDS + 1]; // list is zero-terminated
109  int dpids[MAXDPIDS + 1]; // list is zero-terminated
110  int dtypes[MAXAPIDS + 1]; // list is zero-terminated
112  int spids[MAXSPIDS + 1]; // list is zero-terminated
117  int tpid;
118  int caids[MAXCAIDS + 1]; // list is zero-terminated
119  int nid;
120  int tid;
121  int sid;
122  int rid;
123  int number; // Sequence number assigned on load
124  bool groupSep;
130  mutable const cSchedule *schedule;
133  cString TransponderDataToString(void) const;
134 public:
135  cChannel(void);
136  cChannel(const cChannel &Channel);
137  ~cChannel();
138  cChannel& operator= (const cChannel &Channel);
139  cString ToText(void) const;
140  bool Parse(const char *s);
141  bool Save(FILE *f);
142  const char *Name(void) const;
143  const char *ShortName(bool OrName = false) const;
144  const char *Provider(void) const { return provider; }
145  const char *PortalName(void) const { return portalName; }
146  int Frequency(void) const { return frequency; }
147  int Transponder(void) const;
148  static int Transponder(int Frequency, char Polarization);
149  int Source(void) const { return source; }
150  int Srate(void) const { return srate; }
151  int Vpid(void) const { return vpid; }
152  int Ppid(void) const { return ppid; }
153  int Vtype(void) const { return vtype; }
154  const int *Apids(void) const { return apids; }
155  const int *Dpids(void) const { return dpids; }
156  const int *Spids(void) const { return spids; }
157  int Apid(int i) const { return (0 <= i && i < MAXAPIDS) ? apids[i] : 0; }
158  int Dpid(int i) const { return (0 <= i && i < MAXDPIDS) ? dpids[i] : 0; }
159  int Spid(int i) const { return (0 <= i && i < MAXSPIDS) ? spids[i] : 0; }
160  const char *Alang(int i) const { return (0 <= i && i < MAXAPIDS) ? alangs[i] : ""; }
161  const char *Dlang(int i) const { return (0 <= i && i < MAXDPIDS) ? dlangs[i] : ""; }
162  const char *Slang(int i) const { return (0 <= i && i < MAXSPIDS) ? slangs[i] : ""; }
163  int Atype(int i) const { return (0 <= i && i < MAXAPIDS) ? atypes[i] : 0; }
164  int Dtype(int i) const { return (0 <= i && i < MAXDPIDS) ? dtypes[i] : 0; }
165  uchar SubtitlingType(int i) const { return (0 <= i && i < MAXSPIDS) ? subtitlingTypes[i] : uchar(0); }
166  uint16_t CompositionPageId(int i) const { return (0 <= i && i < MAXSPIDS) ? compositionPageIds[i] : uint16_t(0); }
167  uint16_t AncillaryPageId(int i) const { return (0 <= i && i < MAXSPIDS) ? ancillaryPageIds[i] : uint16_t(0); }
168  int Tpid(void) const { return tpid; }
169  const int *Caids(void) const { return caids; }
170  int Ca(int Index = 0) const { return Index < MAXCAIDS ? caids[Index] : 0; }
171  int Nid(void) const { return nid; }
172  int Tid(void) const { return tid; }
173  int Sid(void) const { return sid; }
174  int Rid(void) const { return rid; }
175  int Number(void) const { return number; }
176  void SetNumber(int Number) { number = Number; }
177  bool GroupSep(void) const { return groupSep; }
178  const char *Parameters(void) const { return parameters; }
179  const cLinkChannels* LinkChannels(void) const { return linkChannels; }
180  const cChannel *RefChannel(void) const { return refChannel; }
181  bool IsAtsc(void) const { return cSource::IsAtsc(source); }
182  bool IsCable(void) const { return cSource::IsCable(source); }
183  bool IsSat(void) const { return cSource::IsSat(source); }
184  bool IsTerr(void) const { return cSource::IsTerr(source); }
185  bool IsSourceType(char Source) const { return cSource::IsType(source, Source); }
186  tChannelID GetChannelID(void) const { return tChannelID(source, nid, (nid || tid) ? tid : Transponder(), sid, rid); }
187  bool HasTimer(void) const;
188  int Modification(int Mask = CHANNELMOD_ALL);
189  void CopyTransponderData(const cChannel *Channel);
190  bool SetTransponderData(int Source, int Frequency, int Srate, const char *Parameters, bool Quiet = false);
191  void SetId(int Nid, int Tid, int Sid, int Rid = 0);
192  void SetName(const char *Name, const char *ShortName, const char *Provider);
193  void SetPortalName(const char *PortalName);
194  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);
195  void SetCaIds(const int *CaIds); // list must be zero-terminated
196  void SetCaDescriptors(int Level);
199  void SetSubtitlingDescriptors(uchar *SubtitlingTypes, uint16_t *CompositionPageIds, uint16_t *AncillaryPageIds);
200  };
201 
202 class cChannels : public cRwLock, public cConfig<cChannel> {
203 private:
207  int modified;
210  void DeleteDuplicateChannels(void);
211 public:
212  cChannels(void);
213  bool Load(const char *FileName, bool AllowComments = false, bool MustExist = false);
214  void HashChannel(cChannel *Channel);
215  void UnhashChannel(cChannel *Channel);
216  int GetNextGroup(int Idx); // Get next channel group
217  int GetPrevGroup(int Idx); // Get previous channel group
218  int GetNextNormal(int Idx); // Get next normal channel (not group)
219  int GetPrevNormal(int Idx); // Get previous normal channel (not group)
220  void ReNumber(void); // Recalculate 'number' based on channel type
221  cChannel *GetByNumber(int Number, int SkipGap = 0);
222  cChannel *GetByServiceID(int Source, int Transponder, unsigned short ServiceID);
223  cChannel *GetByChannelID(tChannelID ChannelID, bool TryWithoutRid = false, bool TryWithoutPolarization = false);
225  int BeingEdited(void) { return beingEdited; }
226  void IncBeingEdited(void) { beingEdited++; }
227  void DecBeingEdited(void) { beingEdited--; }
228  bool HasUniqueChannelID(cChannel *NewChannel, cChannel *OldChannel = NULL);
229  bool SwitchTo(int Number);
230  int MaxNumber(void) { return maxNumber; }
231  int MaxChannelNameLength(void);
232  int MaxShortChannelNameLength(void);
233  void SetModified(bool ByUser = false);
234  int Modified(void);
238  cChannel *NewChannel(const cChannel *Transponder, const char *Name, const char *ShortName, const char *Provider, int Nid, int Tid, int Sid, int Rid = 0);
239  };
240 
241 extern cChannels Channels;
242 
243 cString ChannelString(const cChannel *Channel, int Number);
244 
245 #endif //__CHANNELS_H
cChannel * channel
Definition: channels.h:78
uint16_t AncillaryPageId(int i) const
Definition: channels.h:167
int sid
Definition: channels.h:55
unsigned char uchar
Definition: tools.h:30
int Tid(void) const
Definition: channels.h:172
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:1004
int Vpid(void) const
Definition: channels.h:151
int Number(void) const
Definition: channels.h:175
const int * Dpids(void) const
Definition: channels.h:155
int tid
Definition: channels.h:120
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:164
int GetPrevGroup(int Idx)
Definition: channels.c:849
void SetNumber(int Number)
Definition: channels.h:176
int MaxShortChannelNameLength(void)
Definition: channels.c:987
int MaxNumber(void)
Definition: channels.h:230
const cLinkChannels * LinkChannels(void) const
Definition: channels.h:179
const char * PortalName(void) const
Definition: channels.h:145
int Rid(void) const
Definition: channels.h:68
void CopyTransponderData(const cChannel *Channel)
Definition: channels.c:185
int Nid(void) const
Definition: channels.h:171
uint16_t compositionPageIds[MAXSPIDS]
Definition: channels.h:115
uchar SubtitlingType(int i) const
Definition: channels.h:165
int Spid(int i) const
Definition: channels.h:159
uint16_t ancillaryPageIds[MAXSPIDS]
Definition: channels.h:116
int Ca(int Index=0) const
Definition: channels.h:170
int Dpid(int i) const
Definition: channels.h:158
int modification
Definition: channels.h:129
tChannelID(void)
Definition: channels.h:58
int tid
Definition: channels.h:54
static bool IsTerr(int Code)
Definition: sources.h:43
int ppid
Definition: channels.h:104
int maxChannelNameLength
Definition: channels.h:205
int Srate(void) const
Definition: channels.h:150
uchar subtitlingTypes[MAXSPIDS]
Definition: channels.h:114
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:177
int Sid(void) const
Definition: channels.h:67
tChannelID & ClrPolarization(void)
Definition: channels.c:49
char * name
Definition: channels.h:95
void ReNumber(void)
Definition: channels.c:873
int spids[MAXSPIDS+1]
Definition: channels.h:112
int MaxChannelNameLength(void)
Definition: channels.c:976
cString nameSource
Definition: channels.h:126
const char * Dlang(int i) const
Definition: channels.h:161
int nid
actually the "original" network id
Definition: channels.h:53
int Ppid(void) const
Definition: channels.h:152
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:124
int nid
Definition: channels.h:119
const cSchedule * schedule
Definition: channels.h:130
char * provider
Definition: channels.h:97
const char * FileName(void)
Definition: config.h:118
const char * Alang(int i) const
Definition: channels.h:160
int maxShortChannelNameLength
Definition: channels.h:206
bool Save(FILE *f)
Definition: channels.c:769
int tpid
Definition: channels.h:117
const char * Parameters(void) const
Definition: channels.h:178
bool Load(const char *FileName, bool AllowComments=false, bool MustExist=false)
Definition: channels.c:821
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:81
char * shortName
Definition: channels.h:96
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:1011
void SetName(const char *Name, const char *ShortName, const char *Provider)
Definition: channels.c:250
int Source(void) const
Definition: channels.h:149
const int * Caids(void) const
Definition: channels.h:169
int Rid(void) const
Definition: channels.h:174
char alangs[MAXAPIDS][MAXLANGCODE2]
Definition: channels.h:108
cChannel(void)
Definition: channels.c:58
bool Parse(const char *s)
Definition: channels.c:563
static bool IsAtsc(int Code)
Definition: sources.h:40
void IncBeingEdited(void)
Definition: channels.h:226
tChannelID(int Source, int Nid, int Tid, int Sid, int Rid=0)
Definition: channels.h:59
int GetNextNormal(int Idx)
Definition: channels.c:857
int source
Definition: channels.h:52
int Tpid(void) const
Definition: channels.h:168
int GetPrevNormal(int Idx)
Definition: channels.c:865
void SetCaDescriptors(int Level)
Definition: channels.c:432
cChannels(void)
Definition: channels.c:794
int __EndData__
Definition: channels.h:125
char dlangs[MAXDPIDS][MAXLANGCODE2]
Definition: channels.h:111
int Atype(int i) const
Definition: channels.h:163
static bool IsSat(int Code)
Definition: sources.h:42
int atypes[MAXAPIDS+1]
Definition: channels.h:107
int rid
Definition: channels.h:122
tChannelID GetChannelID(void) const
Definition: channels.h:186
int frequency
Definition: channels.h:100
void SetModified(bool ByUser=false)
Definition: channels.c:998
int GetNextGroup(int Idx)
Definition: channels.c:841
cString TransponderDataToString(void) const
Definition: channels.c:494
const char * Provider(void) const
Definition: channels.h:144
cChannel * GetByServiceID(int Source, int Transponder, unsigned short ServiceID)
Definition: channels.c:906
int __BeginData__
Definition: channels.h:99
const cChannel * RefChannel(void) const
Definition: channels.h:180
int Frequency(void) const
Returns the actual frequency, as given in 'channels.conf'.
Definition: channels.h:146
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:919
int vpid
Definition: channels.h:103
#define MAXLANGCODE2
Definition: channels.h:40
bool HasTimer(void) const
Definition: channels.c:169
bool Valid(void) const
Definition: channels.h:61
int sid
Definition: channels.h:121
static bool IsType(int Code, char Source)
Definition: sources.h:44
bool IsSat(void) const
Definition: channels.h:183
cString shortNameSource
Definition: channels.h:127
const int * Apids(void) const
Definition: channels.h:154
void DecBeingEdited(void)
Definition: channels.h:227
void SetLinkChannels(cLinkChannels *LinkChannels)
Definition: channels.c:442
bool HasUniqueChannelID(cChannel *NewChannel, cChannel *OldChannel=NULL)
Definition: channels.c:960
#define MAXDPIDS
Definition: channels.h:35
cString ToString(void) const
Definition: channels.c:42
void SetRefChannel(cChannel *RefChannel)
Definition: channels.c:489
int dpids[MAXDPIDS+1]
Definition: channels.h:109
cString ChannelString(const cChannel *Channel, int Number)
Definition: channels.c:1026
bool IsTerr(void) const
Definition: channels.h:184
cChannel * GetByNumber(int Number, int SkipGap=0)
Definition: channels.c:891
Definition: thread.h:53
void DeleteDuplicateChannels(void)
Definition: channels.c:802
Definition: epg.h:143
bool IsSourceType(char Source) const
Definition: channels.h:185
static bool IsCable(int Code)
Definition: sources.h:41
uint16_t CompositionPageId(int i) const
Definition: channels.h:166
int Apid(int i) const
Definition: channels.h:157
~cChannel()
Definition: channels.c:84
int maxNumber
Definition: channels.h:204
int source
Definition: channels.h:101
cString parameters
Definition: channels.h:128
int rid
Definition: channels.h:56
char slangs[MAXSPIDS][MAXLANGCODE2]
Definition: channels.h:113
#define MAXSPIDS
Definition: channels.h:36
int vtype
Definition: channels.h:105
int caids[MAXCAIDS+1]
Definition: channels.h:118
const char * Slang(int i) const
Definition: channels.h:162
bool operator==(const tChannelID &arg) const
Definition: channels.h:60
cHash< cChannel > channelsHashSid
Definition: channels.h:209
cChannels Channels
Definition: channels.c:792
int Tid(void) const
Definition: channels.h:66
cChannel * GetByTransponderID(tChannelID ChannelID)
Definition: channels.c:948
static const tChannelID InvalidID
Definition: channels.h:71
int beingEdited
Definition: channels.h:208
int Modification(int Mask=CHANNELMOD_ALL)
Definition: channels.c:178
bool SwitchTo(int Number)
Definition: channels.c:970
const int * Spids(void) const
Definition: channels.h:156
void UnhashChannel(cChannel *Channel)
Definition: channels.c:836
cChannel * refChannel
Definition: channels.h:132
int modified
Definition: channels.h:207
bool IsCable(void) const
Definition: channels.h:182
int number
Definition: channels.h:123
cLinkChannel(cChannel *Channel)
Definition: channels.h:80
#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:173
void SetPortalName(const char *PortalName)
Definition: channels.c:276
tChannelID & ClrRid(void)
Definition: channels.h:62
cLinkChannels * linkChannels
Definition: channels.h:131
char * portalName
Definition: channels.h:98
bool IsAtsc(void) const
Definition: channels.h:181
int Vtype(void) const
Definition: channels.h:153
int BeingEdited(void)
Definition: channels.h:225
void SetCaIds(const int *CaIds)
Definition: channels.c:411
cString ToText(void) const
Definition: channels.c:558
int srate
Definition: channels.h:102
void HashChannel(cChannel *Channel)
Definition: channels.c:831
Definition: tools.h:166
int Source(void) const
Definition: channels.h:64
int apids[MAXAPIDS+1]
Definition: channels.h:106
#define MAXAPIDS
Definition: channels.h:34
int Nid(void) const
Definition: channels.h:65
int dtypes[MAXAPIDS+1]
Definition: channels.h:110