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  static bool BondDevices(const char *Bondings);
207  static void UnBondDevices(void);
209  bool Bond(cDvbDevice *Device);
217  void UnBond(void);
221  bool BondingOk(const cChannel *Channel, bool ConsiderOccupied = false) const;
228 
229 // Common Interface facilities:
230 
231 private:
233 
234 // Channel facilities
235 
236 private:
238 public:
239  virtual bool ProvidesDeliverySystem(int DeliverySystem) const;
240  virtual bool ProvidesSource(int Source) const;
241  virtual bool ProvidesTransponder(const cChannel *Channel) const;
242  virtual bool ProvidesChannel(const cChannel *Channel, int Priority = IDLEPRIORITY, bool *NeedsDetachReceivers = NULL) const;
243  virtual bool ProvidesEIT(void) const;
244  virtual int NumProvidedSystems(void) const;
245  virtual const cPositioner *Positioner(void) const;
246  virtual int SignalStrength(void) const;
247  virtual int SignalQuality(void) const;
248  virtual const cChannel *GetCurrentlyTunedTransponder(void) const;
249  virtual bool IsTunedToTransponder(const cChannel *Channel) const;
250  virtual bool MaySwitchTransponder(const cChannel *Channel) const;
251 protected:
252  virtual bool SetChannelDevice(const cChannel *Channel, bool LiveView);
253 public:
254  virtual bool HasLock(int TimeoutMs = 0) const;
255 
256 // PID handle facilities
257 
258 protected:
259  virtual bool SetPid(cPidHandle *Handle, int Type, bool On);
260 
261 // Section filter facilities
262 
263 protected:
264  virtual int OpenFilter(u_short Pid, u_char Tid, u_char Mask);
265  virtual void CloseFilter(int Handle);
266 
267 // Common Interface facilities:
268 
269 public:
270  virtual bool HasCi(void);
271 
272 // Audio facilities
273 
274 protected:
276 public:
277  static void SetTransferModeForDolbyDigital(int Mode); // needs to be here for backwards compatibility
283 
284 // Receiver facilities
285 
286 private:
288 protected:
289  virtual bool OpenDvr(void);
290  virtual void CloseDvr(void);
291  virtual bool GetTSPacket(uchar *&Data);
292  virtual void DetachAllReceivers(void);
293  };
294 
295 // A plugin that implements a DVB device derived from cDvbDevice needs to create
296 // a cDvbDeviceProbe derived object on the heap in order to have its Probe()
297 // function called, where it can actually create the appropriate device.
298 // The cDvbDeviceProbe object must be created in the plugin's constructor,
299 // and deleted in its destructor.
300 
301 class cDvbDeviceProbe : public cListObject {
302 public:
303  cDvbDeviceProbe(void);
304  virtual ~cDvbDeviceProbe();
305  static uint32_t GetSubsystemId(int Adapter, int Frontend);
306  virtual bool Probe(int Adapter, int Frontend) = 0;
310  };
311 
313 
314 #endif //__DVBDEVICE_H
virtual ~cDvbDeviceProbe()
Definition: dvbdevice.c:1801
cDvbTransponderParameters(const char *Parameters=NULL)
Definition: dvbdevice.c:202
unsigned char uchar
Definition: tools.h:30
virtual ~cDvbDevice()
Definition: dvbdevice.c:1181
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:1601
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 "DVB-S").
Definition: dvbdevice.c:1235
static bool Exists(int Adapter, int Frontend)
Checks whether the given adapter/frontend exists.
Definition: dvbdevice.c:1205
void SetTransmission(int Transmission)
Definition: dvbdevice.h:151
void SetPolarization(char Polarization)
Definition: dvbdevice.h:144
const tDvbParameterMap HierarchyValues[]
Definition: dvbdevice.c:134
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's transponder.
Definition: dvbdevice.c:1715
static bool Initialize(void)
Initializes the DVB devices.
Definition: dvbdevice.c:1251
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:1761
cDvbTuner * dvbTuner
Definition: dvbdevice.h:237
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:1695
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:1473
cTSBuffer * tsBuffer
< Controls how the DVB device handles Transfer Mode when replaying Dolby Digital audio.
Definition: dvbdevice.h:287
virtual int SignalQuality(void) const
Returns the "quality" of the currently received signal.
Definition: dvbdevice.c:1705
int Adapter(void) const
Definition: dvbdevice.h:196
cDvbDeviceProbe(void)
Definition: dvbdevice.c:1796
static uint32_t GetSubsystemId(int Adapter, int Frontend)
Definition: dvbdevice.c:1806
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:1725
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:137
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:157
int Bandwidth(void) const
Definition: dvbdevice.h:131
cString ToString(char Type) const
Definition: dvbdevice.c:227
bool QueryDeliverySystems(int fd_frontend)
Definition: dvbdevice.c:1309
void SetCoderateH(int CoderateH)
Definition: dvbdevice.h:147
bool needsDetachBondedReceivers
Definition: dvbdevice.h:191
void SetRollOff(int RollOff)
Definition: dvbdevice.h:154
const tDvbParameterMap BandwidthValues[]
Definition: dvbdevice.c:53
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'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:134
const tDvbParameterMap RollOffValues[]
Definition: dvbdevice.c:143
cDvbDevice(int Adapter, int Frontend, cDevice *ParentDevice=NULL)
Definition: dvbdevice.c:1142
#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:232
char Polarization(void) const
Definition: dvbdevice.h:129
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:1393
static bool Probe(int Adapter, int Frontend)
Probes for existing DVB devices.
Definition: dvbdevice.c:1222
virtual bool SetPid(cPidHandle *Handle, int Type, bool On)
Does the actual PID setting on this device.
Definition: dvbdevice.c:1523
int numModulations
Definition: dvbdevice.h:187
void SetSystem(int System)
Definition: dvbdevice.h:150
#define MAXDELIVERYSYSTEMS
Definition: dvbdevice.h:70
const tDvbParameterMap TransmissionValues[]
Definition: dvbdevice.c:111
cDvbDevice * bondedDevice
Definition: dvbdevice.h:190
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:189
virtual cString DeviceName(void) const
Returns a string identifying the name of this device.
Definition: dvbdevice.c:1246
Definition: ci.h:79
virtual void CloseDvr(void)
Shuts down the DVR.
Definition: dvbdevice.c:1751
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:1587
int adapter
Definition: dvbdevice.h:182
cList< cDvbDeviceProbe > DvbDeviceProbes
Definition: dvbdevice.c:1794
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:1742
int SisoMiso(void) const
Definition: dvbdevice.h:142
virtual void DetachAllReceivers(void)
Detaches all receivers from this device.
Definition: dvbdevice.c:1781
static void UnBondDevices(void)
Unbonds all devices.
Definition: dvbdevice.c:1438
virtual const cChannel * GetCurrentlyTunedTransponder(void) const
Returns a pointer to the currently tuned transponder.
Definition: dvbdevice.c:1710
virtual bool HasCi(void)
Returns true if this device has a Common Interface.
Definition: dvbdevice.c:1518
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:1732
virtual int NumProvidedSystems(void) const
Returns the number of individual "delivery systems" this device provides.
Definition: dvbdevice.c:1690
dvb_frontend_info frontendInfo
Definition: dvbdevice.h:184
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:136
virtual bool ProvidesDeliverySystem(int DeliverySystem) const
Definition: dvbdevice.c:1592
static int setTransferModeForDolbyDigital
Definition: dvbdevice.h:275
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:1449
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:1611
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:1635
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't do anything, just return, if the device can be set to the new id...
Definition: dvbdevice.c:1498
void SetGuard(int Guard)
Definition: dvbdevice.h:152
void SetCoderateL(int CoderateL)
Definition: dvbdevice.h:148
int Pilot(void) const
Definition: dvbdevice.h:143
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:1490
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:1563
void SetInversion(int Inversion)
Definition: dvbdevice.h:145
int numDeliverySystems
Definition: dvbdevice.h:186
virtual int SignalStrength(void) const
Returns the "strength" of the currently received signal.
Definition: dvbdevice.c:1700
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's transponder on this device, without disturbing an...
Definition: dvbdevice.c:1720
static cString DvbName(const char *Name, int Adapter, int Frontend)
Definition: dvbdevice.c:1191
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:1196
void SetPilot(int Pilot)
Definition: dvbdevice.h:158
int T2SystemId(void) const
Definition: dvbdevice.h:141
static void SetTransferModeForDolbyDigital(int Mode)
Definition: dvbdevice.c:1737
int Hierarchy(void) const
Definition: dvbdevice.h:138
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:1685
void SetBandwidth(int Bandwidth)
Definition: dvbdevice.h:146
void SetModulation(int Modulation)
Definition: dvbdevice.h:149