vdr  2.2.0
dvbdevice.h
Go to the documentation of this file.
1 /*
2  * dvbdevice.h: The DVB device tuner interface
3  *
4  * See the main source file 'vdr.c' for copyright information and
5  * how to reach the author.
6  *
7  * $Id: dvbdevice.h 3.5 2014/03/16 10:38:31 kls Exp $
8  */
9 
10 #ifndef __DVBDEVICE_H
11 #define __DVBDEVICE_H
12 
13 #include <linux/dvb/frontend.h>
14 #include <linux/dvb/version.h>
15 #include "device.h"
16 
17 #define DVBAPIVERSION (DVB_API_VERSION << 8 | DVB_API_VERSION_MINOR)
18 
19 #if DVBAPIVERSION < 0x0500
20 #error VDR requires Linux DVB driver API version 5.0 or higher!
21 #endif
22 
23 // --- Definitions for older DVB API versions --------------------------------
24 
25 #if DVBAPIVERSION < 0x0501
26 enum {
27  FE_CAN_2G_MODULATION = 0x10000000,
28  };
29 enum {
30  TRANSMISSION_MODE_4K = TRANSMISSION_MODE_AUTO + 1,
31  };
32 #endif
33 
34 #if DVBAPIVERSION < 0x0502
35 enum {
36  FE_CAN_TURBO_FEC = 0x8000000,
37  };
38 #endif
39 
40 #if DVBAPIVERSION < 0x0503
41 enum {
45  };
46 enum {
47  GUARD_INTERVAL_1_128 = GUARD_INTERVAL_AUTO + 1,
50  };
51 enum {
52  SYS_DVBT2 = SYS_DAB + 1,
53  };
54 #endif
55 
56 #if DVBAPIVERSION < 0x0505
57 #define DTV_ENUM_DELSYS 44
58 #endif
59 
60 #if DVBAPIVERSION < 0x0508
61 enum {
62  FE_CAN_MULTISTREAM = 0x4000000,
63  };
64 #define DTV_STREAM_ID 42
65 #define DTV_DVBT2_PLP_ID_LEGACY 43
66 #endif
67 
68 // --- End of definitions for older DVB API versions -------------------------
69 
70 #define MAXDELIVERYSYSTEMS 8
71 
72 #define DEV_VIDEO "/dev/video"
73 #define DEV_DVB_BASE "/dev/dvb"
74 #define DEV_DVB_ADAPTER "adapter"
75 #define DEV_DVB_OSD "osd"
76 #define DEV_DVB_FRONTEND "frontend"
77 #define DEV_DVB_DVR "dvr"
78 #define DEV_DVB_DEMUX "demux"
79 #define DEV_DVB_VIDEO "video"
80 #define DEV_DVB_AUDIO "audio"
81 #define DEV_DVB_CA "ca"
82 
84  int userValue;
86  const char *userString;
87  };
88 
89 const char *MapToUserString(int Value, const tDvbParameterMap *Map);
90 int MapToUser(int Value, const tDvbParameterMap *Map, const char **String = NULL);
91 int MapToDriver(int Value, const tDvbParameterMap *Map);
92 int UserIndex(int Value, const tDvbParameterMap *Map);
93 int DriverIndex(int Value, const tDvbParameterMap *Map);
94 
95 extern const tDvbParameterMap PilotValues[];
96 extern const tDvbParameterMap InversionValues[];
97 extern const tDvbParameterMap BandwidthValues[];
98 extern const tDvbParameterMap CoderateValues[];
99 extern const tDvbParameterMap ModulationValues[];
100 extern const tDvbParameterMap SystemValuesSat[];
101 extern const tDvbParameterMap SystemValuesTerr[];
102 extern const tDvbParameterMap TransmissionValues[];
103 extern const tDvbParameterMap GuardValues[];
104 extern const tDvbParameterMap HierarchyValues[];
105 extern const tDvbParameterMap RollOffValues[];
106 
108 friend class cDvbSourceParam;
109 private:
116  int system;
118  int guard;
120  int rollOff;
121  int streamId;
123  int sisoMiso;
124  int pilot;
125  int lcn;
126  int PrintParameter(char *p, char Name, int Value) const;
127  const char *ParseParameter(const char *s, int &Value, const tDvbParameterMap *Map = NULL);
128 public:
129  cDvbTransponderParameters(const char *Parameters = NULL);
130  char Polarization(void) const { return polarization; }
131  int Inversion(void) const { return inversion; }
132  int Bandwidth(void) const { return bandwidth; }
133  int CoderateH(void) const { return coderateH; }
134  int CoderateL(void) const { return coderateL; }
135  int Modulation(void) const { return modulation; }
136  int System(void) const { return system; }
137  int Transmission(void) const { return transmission; }
138  int Guard(void) const { return guard; }
139  int Hierarchy(void) const { return hierarchy; }
140  int RollOff(void) const { return rollOff; }
141  int StreamId(void) const { return streamId; }
142  int T2SystemId(void) const { return t2systemId; }
143  int SisoMiso(void) const { return sisoMiso; }
144  int Pilot(void) const { return pilot; }
145  int Lcn(void) const { return lcn; }
146  void SetPolarization(char Polarization) { polarization = Polarization; }
147  void SetInversion(int Inversion) { inversion = Inversion; }
148  void SetBandwidth(int Bandwidth) { bandwidth = Bandwidth; }
149  void SetCoderateH(int CoderateH) { coderateH = CoderateH; }
150  void SetCoderateL(int CoderateL) { coderateL = CoderateL; }
151  void SetModulation(int Modulation) { modulation = Modulation; }
152  void SetSystem(int System) { system = System; }
153  void SetTransmission(int Transmission) { transmission = Transmission; }
154  void SetGuard(int Guard) { guard = Guard; }
155  void SetHierarchy(int Hierarchy) { hierarchy = Hierarchy; }
156  void SetRollOff(int RollOff) { rollOff = RollOff; }
157  void SetStreamId(int StreamId) { streamId = StreamId; }
158  void SetT2SystemId(int T2SystemId) { t2systemId = T2SystemId; }
159  void SetSisoMiso(int SisoMiso) { sisoMiso = SisoMiso; }
160  void SetPilot(int Pilot) { pilot = Pilot; }
161  void SetLcn(int Lcn) { lcn = Lcn; }
162  cString ToString(char Type) const;
163  bool Parse(const char *s);
164  };
165 
166 class cDvbTuner;
167 
169 
170 class cDvbDevice : public cDevice {
171 protected:
172  static cString DvbName(const char *Name, int Adapter, int Frontend);
173  static int DvbOpen(const char *Name, int Adapter, int Frontend, int Mode, bool ReportError = false);
174 private:
175  static bool Exists(int Adapter, int Frontend);
177  static bool Probe(int Adapter, int Frontend);
179 public:
180  static bool Initialize(void);
184 protected:
186 private:
187  dvb_frontend_info frontendInfo;
191  int fd_dvr, fd_ca;
195  bool QueryDeliverySystems(int fd_frontend);
196 public:
197  cDvbDevice(int Adapter, int Frontend);
198  virtual ~cDvbDevice();
199  int Adapter(void) const { return adapter; }
200  int Frontend(void) const { return frontend; }
201  virtual cString DeviceType(void) const;
202  virtual cString DeviceName(void) const;
203  static bool BondDevices(const char *Bondings);
209  static void UnBondDevices(void);
211  bool Bond(cDvbDevice *Device);
219  void UnBond(void);
223  bool BondingOk(const cChannel *Channel, bool ConsiderOccupied = false) const;
230 
231 // Common Interface facilities:
232 
233 private:
235 
236 // Channel facilities
237 
238 private:
240 public:
241  virtual bool ProvidesDeliverySystem(int DeliverySystem) const;
242  virtual bool ProvidesSource(int Source) const;
243  virtual bool ProvidesTransponder(const cChannel *Channel) const;
244  virtual bool ProvidesChannel(const cChannel *Channel, int Priority = IDLEPRIORITY, bool *NeedsDetachReceivers = NULL) const;
245  virtual bool ProvidesEIT(void) const;
246  virtual int NumProvidedSystems(void) const;
247  virtual const cPositioner *Positioner(void) const;
248  virtual int SignalStrength(void) const;
249  virtual int SignalQuality(void) const;
250  virtual const cChannel *GetCurrentlyTunedTransponder(void) const;
251  virtual bool IsTunedToTransponder(const cChannel *Channel) const;
252  virtual bool MaySwitchTransponder(const cChannel *Channel) const;
253 protected:
254  virtual bool SetChannelDevice(const cChannel *Channel, bool LiveView);
255 public:
256  virtual bool HasLock(int TimeoutMs = 0) const;
257 
258 // PID handle facilities
259 
260 protected:
261  virtual bool SetPid(cPidHandle *Handle, int Type, bool On);
262 
263 // Section filter facilities
264 
265 protected:
266  virtual int OpenFilter(u_short Pid, u_char Tid, u_char Mask);
267  virtual void CloseFilter(int Handle);
268 
269 // Common Interface facilities:
270 
271 public:
272  virtual bool HasCi(void);
273 
274 // Audio facilities
275 
276 protected:
278 public:
279  static void SetTransferModeForDolbyDigital(int Mode); // needs to be here for backwards compatibility
285 
286 // Receiver facilities
287 
288 private:
290 protected:
291  virtual bool OpenDvr(void);
292  virtual void CloseDvr(void);
293  virtual bool GetTSPacket(uchar *&Data);
294  virtual void DetachAllReceivers(void);
295  };
296 
297 // A plugin that implements a DVB device derived from cDvbDevice needs to create
298 // a cDvbDeviceProbe derived object on the heap in order to have its Probe()
299 // function called, where it can actually create the appropriate device.
300 // The cDvbDeviceProbe object must be created in the plugin's constructor,
301 // and deleted in its destructor.
302 
303 class cDvbDeviceProbe : public cListObject {
304 public:
305  cDvbDeviceProbe(void);
306  virtual ~cDvbDeviceProbe();
307  static uint32_t GetSubsystemId(int Adapter, int Frontend);
308  virtual bool Probe(int Adapter, int Frontend) = 0;
312  };
313 
315 
316 #endif //__DVBDEVICE_H
virtual ~cDvbDeviceProbe()
Definition: dvbdevice.c:1726
cDvbTransponderParameters(const char *Parameters=NULL)
Definition: dvbdevice.c:202
unsigned char uchar
Definition: tools.h:30
virtual ~cDvbDevice()
Definition: dvbdevice.c:1133
const tDvbParameterMap GuardValues[]
Definition: dvbdevice.c:122
virtual bool ProvidesSource(int Source) const
Returns true if this device can provide the given source.
Definition: dvbdevice.c:1526
int PrintParameter(char *p, char Name, int Value) const
Definition: dvbdevice.c:223
virtual cString DeviceType(void) const
Returns a string identifying the type of this device (like "DVB-S").
Definition: dvbdevice.c:1187
static bool Exists(int Adapter, int Frontend)
Checks whether the given adapter/frontend exists.
Definition: dvbdevice.c:1157
void SetTransmission(int Transmission)
Definition: dvbdevice.h:153
void SetPolarization(char Polarization)
Definition: dvbdevice.h:146
const tDvbParameterMap HierarchyValues[]
Definition: dvbdevice.c:134
const char * ParseParameter(const char *s, int &Value, const tDvbParameterMap *Map=NULL)
Definition: dvbdevice.c:253
virtual bool IsTunedToTransponder(const cChannel *Channel) const
Returns true if this device is currently tuned to the given Channel's transponder.
Definition: dvbdevice.c:1640
static bool Initialize(void)
Initializes the DVB devices.
Definition: dvbdevice.c:1203
virtual bool GetTSPacket(uchar *&Data)
Gets exactly one TS packet from the DVR of this device and returns a pointer to it in Data...
Definition: dvbdevice.c:1686
cDvbTuner * dvbTuner
Definition: dvbdevice.h:239
virtual const cPositioner * Positioner(void) const
Returns a pointer to the positioner (if any) this device has used to move the satellite dish to the r...
Definition: dvbdevice.c:1620
int fd_dvr
Definition: dvbdevice.h:191
void UnBond(void)
Removes this device from any bonding it might have with other devices.
Definition: dvbdevice.c:1418
cTSBuffer * tsBuffer
< Controls how the DVB device handles Transfer Mode when replaying Dolby Digital audio.
Definition: dvbdevice.h:289
virtual int SignalQuality(void) const
Returns the "quality" of the currently received signal.
Definition: dvbdevice.c:1630
int Adapter(void) const
Definition: dvbdevice.h:199
cDvbDeviceProbe(void)
Definition: dvbdevice.c:1721
static uint32_t GetSubsystemId(int Adapter, int Frontend)
Definition: dvbdevice.c:1731
bool Parse(const char *s)
Definition: dvbdevice.c:269
virtual bool SetChannelDevice(const cChannel *Channel, bool LiveView)
Sets the device to the given channel (actual physical setup).
Definition: dvbdevice.c:1650
int DriverIndex(int Value, const tDvbParameterMap *Map)
Definition: dvbdevice.c:162
Definition: tools.h:489
const tDvbParameterMap InversionValues[]
Definition: dvbdevice.c:46
int UserIndex(int Value, const tDvbParameterMap *Map)
Definition: dvbdevice.c:151
int Guard(void) const
Definition: dvbdevice.h:138
const tDvbParameterMap ModulationValues[]
Definition: dvbdevice.c:79
int MapToDriver(int Value, const tDvbParameterMap *Map)
Definition: dvbdevice.c:192
void SetSisoMiso(int SisoMiso)
Definition: dvbdevice.h:159
int Bandwidth(void) const
Definition: dvbdevice.h:132
cString ToString(char Type) const
Definition: dvbdevice.c:228
bool QueryDeliverySystems(int fd_frontend)
Definition: dvbdevice.c:1261
void SetCoderateH(int CoderateH)
Definition: dvbdevice.h:149
bool needsDetachBondedReceivers
Definition: dvbdevice.h:194
void SetRollOff(int RollOff)
Definition: dvbdevice.h:156
const tDvbParameterMap BandwidthValues[]
Definition: dvbdevice.c:53
int frontend
Definition: dvbdevice.h:185
A steerable satellite dish generally points to the south on the northern hemisphere, and to the north on the southern hemisphere (unless you're located directly on the equator, in which case the general direction is "up").
Definition: positioner.h:31
int Modulation(void) const
Definition: dvbdevice.h:135
const tDvbParameterMap RollOffValues[]
Definition: dvbdevice.c:143
#define IDLEPRIORITY
Definition: config.h:43
int Frontend(void) const
Definition: dvbdevice.h:200
void SetT2SystemId(int T2SystemId)
Definition: dvbdevice.h:158
cCiAdapter * ciAdapter
Definition: dvbdevice.h:234
char Polarization(void) const
Definition: dvbdevice.h:130
const tDvbParameterMap CoderateValues[]
Definition: dvbdevice.c:63
static bool BondDevices(const char *Bondings)
Bonds the devices as defined in the given Bondings string.
Definition: dvbdevice.c:1345
static bool Probe(int Adapter, int Frontend)
Probes for existing DVB devices.
Definition: dvbdevice.c:1174
virtual bool SetPid(cPidHandle *Handle, int Type, bool On)
Does the actual PID setting on this device.
Definition: dvbdevice.c:1448
void SetLcn(int Lcn)
Definition: dvbdevice.h:161
int numModulations
Definition: dvbdevice.h:190
void SetSystem(int System)
Definition: dvbdevice.h:152
int Lcn(void) const
Definition: dvbdevice.h:145
#define MAXDELIVERYSYSTEMS
Definition: dvbdevice.h:70
const tDvbParameterMap TransmissionValues[]
Definition: dvbdevice.c:111
cDvbDevice * bondedDevice
Definition: dvbdevice.h:193
virtual bool Probe(int Adapter, int Frontend)=0
Probes for a DVB device at the given Adapter and creates the appropriate object derived from cDvbDevi...
const tDvbParameterMap PilotValues[]
Definition: dvbdevice.c:39
static cMutex bondMutex
Definition: dvbdevice.h:192
virtual cString DeviceName(void) const
Returns a string identifying the name of this device.
Definition: dvbdevice.c:1198
Definition: ci.h:79
virtual void CloseDvr(void)
Shuts down the DVR.
Definition: dvbdevice.c:1676
int StreamId(void) const
Definition: dvbdevice.h:141
int RollOff(void) const
Definition: dvbdevice.h:140
virtual void CloseFilter(int Handle)
Closes a file handle that has previously been opened by OpenFilter().
Definition: dvbdevice.c:1512
int adapter
Definition: dvbdevice.h:185
cList< cDvbDeviceProbe > DvbDeviceProbes
Definition: dvbdevice.c:1719
int deliverySystems[MAXDELIVERYSYSTEMS]
Definition: dvbdevice.h:188
Definition: thread.h:63
virtual bool OpenDvr(void)
Opens the DVR of this device and prepares it to deliver a Transport Stream for use in a cReceiver...
Definition: dvbdevice.c:1667
int SisoMiso(void) const
Definition: dvbdevice.h:143
virtual void DetachAllReceivers(void)
Detaches all receivers from this device.
Definition: dvbdevice.c:1706
static void UnBondDevices(void)
Unbonds all devices.
Definition: dvbdevice.c:1386
virtual const cChannel * GetCurrentlyTunedTransponder(void) const
Returns a pointer to the currently tuned transponder.
Definition: dvbdevice.c:1635
virtual bool HasCi(void)
Returns true if this device has a Common Interface.
Definition: dvbdevice.c:1443
int Priority(void) const
Returns the priority of the current receiving session (-MAXPRIORITY..MAXPRIORITY), or IDLEPRIORITY if no receiver is currently active.
Definition: device.c:1564
virtual bool HasLock(int TimeoutMs=0) const
Returns true if the device has a lock on the requested transponder.
Definition: dvbdevice.c:1657
virtual int NumProvidedSystems(void) const
Returns the number of individual "delivery systems" this device provides.
Definition: dvbdevice.c:1615
dvb_frontend_info frontendInfo
Definition: dvbdevice.h:187
const tDvbParameterMap SystemValuesSat[]
Definition: dvbdevice.c:99
const char * MapToUserString(int Value, const tDvbParameterMap *Map)
Definition: dvbdevice.c:184
int Transmission(void) const
Definition: dvbdevice.h:137
virtual bool ProvidesDeliverySystem(int DeliverySystem) const
Definition: dvbdevice.c:1517
static int setTransferModeForDolbyDigital
Definition: dvbdevice.h:277
int MapToUser(int Value, const tDvbParameterMap *Map, const char **String=NULL)
Definition: dvbdevice.c:173
unsigned char u_char
Definition: headers.h:24
bool Bond(cDvbDevice *Device)
Bonds this device with the given Device, making both of them use the same satellite cable and LNB...
Definition: dvbdevice.c:1394
int Inversion(void) const
Definition: dvbdevice.h:131
virtual bool ProvidesTransponder(const cChannel *Channel) const
Returns true if this device can provide the transponder of the given Channel (which implies that it c...
Definition: dvbdevice.c:1536
void SetStreamId(int StreamId)
Definition: dvbdevice.h:157
void SetHierarchy(int Hierarchy)
Definition: dvbdevice.h:155
virtual bool ProvidesChannel(const cChannel *Channel, int Priority=IDLEPRIORITY, bool *NeedsDetachReceivers=NULL) const
Returns true if this device can provide the given channel.
Definition: dvbdevice.c:1560
int CoderateH(void) const
Definition: dvbdevice.h:133
The cDvbDevice implements a DVB device which can be accessed through the Linux DVB driver API...
Definition: dvbdevice.h:170
void SetGuard(int Guard)
Definition: dvbdevice.h:154
void SetCoderateL(int CoderateL)
Definition: dvbdevice.h:150
int Pilot(void) const
Definition: dvbdevice.h:144
bool BondingOk(const cChannel *Channel, bool ConsiderOccupied=false) const
Returns true if this device is either not bonded to any other device, or the given Channel is on the ...
Definition: dvbdevice.c:1435
int System(void) const
Definition: dvbdevice.h:136
Derived cDevice classes that can receive channels will have to provide Transport Stream (TS) packets ...
Definition: device.h:835
virtual int OpenFilter(u_short Pid, u_char Tid, u_char Mask)
Opens a file handle for the given filter data.
Definition: dvbdevice.c:1488
void SetInversion(int Inversion)
Definition: dvbdevice.h:147
cDvbDevice(int Adapter, int Frontend)
Definition: dvbdevice.c:1095
int numDeliverySystems
Definition: dvbdevice.h:189
virtual int SignalStrength(void) const
Returns the "strength" of the currently received signal.
Definition: dvbdevice.c:1625
int CoderateL(void) const
Definition: dvbdevice.h:134
const char * userString
Definition: dvbdevice.h:86
virtual bool MaySwitchTransponder(const cChannel *Channel) const
Returns true if it is ok to switch to the Channel's transponder on this device, without disturbing an...
Definition: dvbdevice.c:1645
static cString DvbName(const char *Name, int Adapter, int Frontend)
Definition: dvbdevice.c:1143
The cDevice class is the base from which actual devices can be derived.
Definition: device.h:109
Definition: tools.h:168
static int DvbOpen(const char *Name, int Adapter, int Frontend, int Mode, bool ReportError=false)
Definition: dvbdevice.c:1148
void SetPilot(int Pilot)
Definition: dvbdevice.h:160
int T2SystemId(void) const
Definition: dvbdevice.h:142
static void SetTransferModeForDolbyDigital(int Mode)
Definition: dvbdevice.c:1662
int Hierarchy(void) const
Definition: dvbdevice.h:139
const tDvbParameterMap SystemValuesTerr[]
Definition: dvbdevice.c:105
virtual bool ProvidesEIT(void) const
Returns true if this device provides EIT data and thus wants to be tuned to the channels it can recei...
Definition: dvbdevice.c:1610
void SetBandwidth(int Bandwidth)
Definition: dvbdevice.h:148
void SetModulation(int Modulation)
Definition: dvbdevice.h:151