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; }
144  void SetPolarization(char Polarization) { polarization = Polarization; }
145  void SetInversion(int Inversion) { inversion = Inversion; }
146  void SetBandwidth(int Bandwidth) { bandwidth = Bandwidth; }
147  void SetCoderateH(int CoderateH) { coderateH = CoderateH; }
148  void SetCoderateL(int CoderateL) { coderateL = CoderateL; }
149  void SetModulation(int Modulation) { modulation = Modulation; }
150  void SetSystem(int System) { system = System; }
151  void SetTransmission(int Transmission) { transmission = Transmission; }
152  void SetGuard(int Guard) { guard = Guard; }
153  void SetHierarchy(int Hierarchy) { hierarchy = Hierarchy; }
154  void SetRollOff(int RollOff) { rollOff = RollOff; }
155  void SetStreamId(int StreamId) { streamId = StreamId; }
156  void SetT2SystemId(int T2SystemId) { t2systemId = T2SystemId; }
157  void SetSisoMiso(int SisoMiso) { sisoMiso = SisoMiso; }
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
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: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 "DVB-S").
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 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: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
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
< Controls how the DVB device handles Transfer Mode when replaying Dolby Digital audio.
Definition: dvbdevice.h:288
virtual int SignalQuality(void) const
Returns the "quality" of the currently received signal.
Definition: dvbdevice.c:1704
int Adapter(void) const
Definition: dvbdevice.h:196
cDvbDeviceProbe(void)
Definition: dvbdevice.c:1795
static uint32_t GetSubsystemId(int Adapter, int Frontend)
Definition: dvbdevice.c:1805
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
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:1308
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:1141
#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
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: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
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: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 adapter
Definition: dvbdevice.h:182
cList< cDvbDeviceProbe > DvbDeviceProbes
Definition: dvbdevice.c:1793
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
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
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 "delivery systems" this device provides.
Definition: dvbdevice.c:1689
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:1591
static int setTransferModeForDolbyDigital
Definition: dvbdevice.h:276
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: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'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
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: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 "strength" 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'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
static void SetTransferModeForDolbyDigital(int Mode)
Definition: dvbdevice.c:1736
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:1684
void SetBandwidth(int Bandwidth)
Definition: dvbdevice.h:146
void SetModulation(int Modulation)
Definition: dvbdevice.h:149