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 PrintParameter(char *p, char Name, int Value) const;
126  const char *ParseParameter(const char *s, int &Value, const tDvbParameterMap *Map = NULL);
127 public:
128  cDvbTransponderParameters(const char *Parameters = NULL);
129  char Polarization(void) const { return polarization; }
130  int Inversion(void) const { return inversion; }
131  int Bandwidth(void) const { return bandwidth; }
132  int CoderateH(void) const { return coderateH; }
133  int CoderateL(void) const { return coderateL; }
134  int Modulation(void) const { return modulation; }
135  int System(void) const { return system; }
136  int Transmission(void) const { return transmission; }
137  int Guard(void) const { return guard; }
138  int Hierarchy(void) const { return hierarchy; }
139  int RollOff(void) const { return rollOff; }
140  int StreamId(void) const { return streamId; }
141  int T2SystemId(void) const { return t2systemId; }
142  int SisoMiso(void) const { return sisoMiso; }
143  int Pilot(void) const { return pilot; }
150  void SetSystem(int System) { system = System; }
152  void SetGuard(int Guard) { guard = Guard; }
158  void SetPilot(int Pilot) { pilot = Pilot; }
159  cString ToString(char Type) const;
160  bool Parse(const char *s);
161  };
162 
163 class cDvbTuner;
164 
166 
167 class cDvbDevice : public cDevice {
168 public:
169  static cString DvbName(const char *Name, int Adapter, int Frontend);
170  static int DvbOpen(const char *Name, int Adapter, int Frontend, int Mode, bool ReportError = false);
171 private:
172  static bool Exists(int Adapter, int Frontend);
174  static bool Probe(int Adapter, int Frontend);
176 public:
177  static bool Initialize(void);
181 protected:
183 private:
184  dvb_frontend_info frontendInfo;
188  int fd_dvr, fd_ca;
192  bool QueryDeliverySystems(int fd_frontend);
193 public:
194  cDvbDevice(int Adapter, int Frontend, cDevice *ParentDevice = NULL);
195  virtual ~cDvbDevice();
196  int Adapter(void) const { return adapter; }
197  int Frontend(void) const { return frontend; }
198  virtual cString DeviceType(void) const;
199  virtual cString DeviceName(void) const;
200  virtual bool SetIdleDevice(bool Idle, bool TestOnly);
201 
202  static bool BondDevices(const char *Bondings);
208  static void UnBondDevices(void);
210  bool Bond(cDvbDevice *Device);
218  void UnBond(void);
222  bool BondingOk(const cChannel *Channel, bool ConsiderOccupied = false) const;
229 
230 // Common Interface facilities:
231 
232 private:
234 
235 // Channel facilities
236 
237 private:
239 public:
240  virtual bool ProvidesDeliverySystem(int DeliverySystem) const;
241  virtual bool ProvidesSource(int Source) const;
242  virtual bool ProvidesTransponder(const cChannel *Channel) const;
243  virtual bool ProvidesChannel(const cChannel *Channel, int Priority = IDLEPRIORITY, bool *NeedsDetachReceivers = NULL) const;
244  virtual bool ProvidesEIT(void) const;
245  virtual int NumProvidedSystems(void) const;
246  virtual const cPositioner *Positioner(void) const;
247  virtual int SignalStrength(void) const;
248  virtual int SignalQuality(void) const;
249  virtual const cChannel *GetCurrentlyTunedTransponder(void) const;
250  virtual bool IsTunedToTransponder(const cChannel *Channel) const;
251  virtual bool MaySwitchTransponder(const cChannel *Channel) const;
252 protected:
253  virtual bool SetChannelDevice(const cChannel *Channel, bool LiveView);
254 public:
255  virtual bool HasLock(int TimeoutMs = 0) const;
256 
257 // PID handle facilities
258 
259 protected:
260  virtual bool SetPid(cPidHandle *Handle, int Type, bool On);
261 
262 // Section filter facilities
263 
264 protected:
265  virtual int OpenFilter(u_short Pid, u_char Tid, u_char Mask);
266  virtual void CloseFilter(int Handle);
267 
268 // Common Interface facilities:
269 
270 public:
271  virtual bool HasCi(void);
272 
273 // Audio facilities
274 
275 protected:
277 public:
278  static void SetTransferModeForDolbyDigital(int Mode); // needs to be here for backwards compatibility
284 
285 // Receiver facilities
286 
287 private:
289 protected:
290  virtual bool OpenDvr(void);
291  virtual void CloseDvr(void);
292  virtual bool GetTSPacket(uchar *&Data);
293  virtual void DetachAllReceivers(void);
294  };
295 
296 // A plugin that implements a DVB device derived from cDvbDevice needs to create
297 // a cDvbDeviceProbe derived object on the heap in order to have its Probe()
298 // function called, where it can actually create the appropriate device.
299 // The cDvbDeviceProbe object must be created in the plugin's constructor,
300 // and deleted in its destructor.
301 
302 class cDvbDeviceProbe : public cListObject {
303 public:
304  cDvbDeviceProbe(void);
305  virtual ~cDvbDeviceProbe();
306  static uint32_t GetSubsystemId(int Adapter, int Frontend);
307  virtual bool Probe(int Adapter, int Frontend) = 0;
311  };
312 
314 
315 #endif //__DVBDEVICE_H
virtual ~cDvbDeviceProbe()
Definition: dvbdevice.c:1800
cDvbTransponderParameters(const char *Parameters=NULL)
Definition: dvbdevice.c:202
unsigned char uchar
Definition: tools.h:30
virtual ~cDvbDevice()
Definition: dvbdevice.c:1180
virtual bool ProvidesSource(int Source) const
Returns true if this device can provide the given source.
Definition: dvbdevice.c:1600
int PrintParameter(char *p, char Name, int Value) const
Definition: dvbdevice.c:222
virtual cString DeviceType(void) const
Returns a string identifying the type of this device (like &quot;DVB-S&quot;).
Definition: dvbdevice.c:1234
static bool Exists(int Adapter, int Frontend)
Checks whether the given adapter/frontend exists.
Definition: dvbdevice.c:1204
void SetTransmission(int Transmission)
Definition: dvbdevice.h:151
void SetPolarization(char Polarization)
Definition: dvbdevice.h:144
const char * ParseParameter(const char *s, int &Value, const tDvbParameterMap *Map=NULL)
Definition: dvbdevice.c:251
virtual bool IsTunedToTransponder(const cChannel *Channel) const
Returns true if this device is currently tuned to the given Channel&#39;s transponder.
Definition: dvbdevice.c:1714
static bool Initialize(void)
Initializes the DVB devices.
Definition: dvbdevice.c:1250
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:1760
cDvbTuner * dvbTuner
Definition: dvbdevice.h:238
int UserIndex(int Value, const tDvbParameterMap *Map)
Definition: dvbdevice.c:151
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:1694
int fd_dvr
Definition: dvbdevice.h:188
void UnBond(void)
Removes this device from any bonding it might have with other devices.
Definition: dvbdevice.c:1472
cTSBuffer * tsBuffer
&lt; Controls how the DVB device handles Transfer Mode when replaying Dolby Digital audio.
Definition: dvbdevice.h:288
virtual int SignalQuality(void) const
Returns the &quot;quality&quot; of the currently received signal.
Definition: dvbdevice.c:1704
int Adapter(void) const
Definition: dvbdevice.h:196
const tDvbParameterMap SystemValuesSat[]
Definition: dvbdevice.c:99
cDvbDeviceProbe(void)
Definition: dvbdevice.c:1795
static uint32_t GetSubsystemId(int Adapter, int Frontend)
Definition: dvbdevice.c:1805
const tDvbParameterMap InversionValues[]
Definition: dvbdevice.c:46
bool Parse(const char *s)
Definition: dvbdevice.c:267
virtual bool SetChannelDevice(const cChannel *Channel, bool LiveView)
Sets the device to the given channel (actual physical setup).
Definition: dvbdevice.c:1724
Definition: tools.h:489
int Guard(void) const
Definition: dvbdevice.h:137
void SetSisoMiso(int SisoMiso)
Definition: dvbdevice.h:157
int Bandwidth(void) const
Definition: dvbdevice.h:131
cString ToString(char Type) const
Definition: dvbdevice.c:227
int MapToDriver(int Value, const tDvbParameterMap *Map)
Definition: dvbdevice.c:192
bool QueryDeliverySystems(int fd_frontend)
Definition: dvbdevice.c:1308
void SetCoderateH(int CoderateH)
Definition: dvbdevice.h:147
bool needsDetachBondedReceivers
Definition: dvbdevice.h:191
void SetRollOff(int RollOff)
Definition: dvbdevice.h:154
int frontend
Definition: dvbdevice.h:182
A steerable satellite dish generally points to the south on the northern hemisphere, and to the north on the southern hemisphere (unless you&#39;re located directly on the equator, in which case the general direction is &quot;up&quot;).
Definition: positioner.h:31
int Modulation(void) const
Definition: dvbdevice.h:134
cDvbDevice(int Adapter, int Frontend, cDevice *ParentDevice=NULL)
Definition: dvbdevice.c:1141
const tDvbParameterMap HierarchyValues[]
Definition: dvbdevice.c:134
#define IDLEPRIORITY
Definition: config.h:47
int Frontend(void) const
Definition: dvbdevice.h:197
void SetT2SystemId(int T2SystemId)
Definition: dvbdevice.h:156
cCiAdapter * ciAdapter
Definition: dvbdevice.h:233
char Polarization(void) const
Definition: dvbdevice.h:129
static bool BondDevices(const char *Bondings)
Bonds the devices as defined in the given Bondings string.
Definition: dvbdevice.c:1392
static bool Probe(int Adapter, int Frontend)
Probes for existing DVB devices.
Definition: dvbdevice.c:1221
virtual bool SetPid(cPidHandle *Handle, int Type, bool On)
Does the actual PID setting on this device.
Definition: dvbdevice.c:1522
int numModulations
Definition: dvbdevice.h:187
void SetSystem(int System)
Definition: dvbdevice.h:150
#define MAXDELIVERYSYSTEMS
Definition: dvbdevice.h:70
cDvbDevice * bondedDevice
Definition: dvbdevice.h:190
int MapToUser(int Value, const tDvbParameterMap *Map, const char **String)
Definition: dvbdevice.c:173
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...
cList< cDvbDeviceProbe > DvbDeviceProbes
Definition: dvbdevice.c:1793
static cMutex bondMutex
Definition: dvbdevice.h:189
virtual cString DeviceName(void) const
Returns a string identifying the name of this device.
Definition: dvbdevice.c:1245
Definition: ci.h:79
virtual void CloseDvr(void)
Shuts down the DVR.
Definition: dvbdevice.c:1750
int StreamId(void) const
Definition: dvbdevice.h:140
int RollOff(void) const
Definition: dvbdevice.h:139
virtual void CloseFilter(int Handle)
Closes a file handle that has previously been opened by OpenFilter().
Definition: dvbdevice.c:1586
int DriverIndex(int Value, const tDvbParameterMap *Map)
Definition: dvbdevice.c:162
int adapter
Definition: dvbdevice.h:182
const tDvbParameterMap ModulationValues[]
Definition: dvbdevice.c:79
int deliverySystems[MAXDELIVERYSYSTEMS]
Definition: dvbdevice.h:185
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:1741
int SisoMiso(void) const
Definition: dvbdevice.h:142
virtual void DetachAllReceivers(void)
Detaches all receivers from this device.
Definition: dvbdevice.c:1780
static void UnBondDevices(void)
Unbonds all devices.
Definition: dvbdevice.c:1437
const char * MapToUserString(int Value, const tDvbParameterMap *Map)
Definition: dvbdevice.c:184
virtual const cChannel * GetCurrentlyTunedTransponder(void) const
Returns a pointer to the currently tuned transponder.
Definition: dvbdevice.c:1709
virtual bool HasCi(void)
Returns true if this device has a Common Interface.
Definition: dvbdevice.c:1517
const tDvbParameterMap PilotValues[]
Definition: dvbdevice.c:39
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:1614
virtual bool HasLock(int TimeoutMs=0) const
Returns true if the device has a lock on the requested transponder.
Definition: dvbdevice.c:1731
virtual int NumProvidedSystems(void) const
Returns the number of individual &quot;delivery systems&quot; this device provides.
Definition: dvbdevice.c:1689
dvb_frontend_info frontendInfo
Definition: dvbdevice.h:184
int Transmission(void) const
Definition: dvbdevice.h:136
virtual bool ProvidesDeliverySystem(int DeliverySystem) const
Definition: dvbdevice.c:1591
const tDvbParameterMap RollOffValues[]
Definition: dvbdevice.c:143
static int setTransferModeForDolbyDigital
Definition: dvbdevice.h:276
const tDvbParameterMap CoderateValues[]
Definition: dvbdevice.c:63
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:1448
int Inversion(void) const
Definition: dvbdevice.h:130
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:1610
void SetStreamId(int StreamId)
Definition: dvbdevice.h:155
void SetHierarchy(int Hierarchy)
Definition: dvbdevice.h:153
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:1634
int CoderateH(void) const
Definition: dvbdevice.h:132
The cDvbDevice implements a DVB device which can be accessed through the Linux DVB driver API...
Definition: dvbdevice.h:167
virtual bool SetIdleDevice(bool Idle, bool TestOnly)
Called by SetIdle if TestOnly, don&#39;t do anything, just return, if the device can be set to the new id...
Definition: dvbdevice.c:1497
void SetGuard(int Guard)
Definition: dvbdevice.h:152
const tDvbParameterMap SystemValuesTerr[]
Definition: dvbdevice.c:105
void SetCoderateL(int CoderateL)
Definition: dvbdevice.h:148
int Pilot(void) const
Definition: dvbdevice.h:143
const tDvbParameterMap BandwidthValues[]
Definition: dvbdevice.c:53
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:1489
int System(void) const
Definition: dvbdevice.h:135
Derived cDevice classes that can receive channels will have to provide Transport Stream (TS) packets ...
Definition: device.h:856
virtual int OpenFilter(u_short Pid, u_char Tid, u_char Mask)
Opens a file handle for the given filter data.
Definition: dvbdevice.c:1562
void SetInversion(int Inversion)
Definition: dvbdevice.h:145
int numDeliverySystems
Definition: dvbdevice.h:186
virtual int SignalStrength(void) const
Returns the &quot;strength&quot; of the currently received signal.
Definition: dvbdevice.c:1699
int CoderateL(void) const
Definition: dvbdevice.h:133
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&#39;s transponder on this device, without disturbing an...
Definition: dvbdevice.c:1719
static cString DvbName(const char *Name, int Adapter, int Frontend)
Definition: dvbdevice.c:1190
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:1195
void SetPilot(int Pilot)
Definition: dvbdevice.h:158
int T2SystemId(void) const
Definition: dvbdevice.h:141
const tDvbParameterMap GuardValues[]
Definition: dvbdevice.c:122
const tDvbParameterMap TransmissionValues[]
Definition: dvbdevice.c:111
static void SetTransferModeForDolbyDigital(int Mode)
Definition: dvbdevice.c:1736
int Hierarchy(void) const
Definition: dvbdevice.h:138
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:1684
void SetBandwidth(int Bandwidth)
Definition: dvbdevice.h:146
void SetModulation(int Modulation)
Definition: dvbdevice.h:149