vdr  2.7.6
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 5.2 2025/03/02 11:03:35 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 DEV_VIDEO "/dev/video"
71 #define DEV_DVB_BASE "/dev/dvb"
72 #define DEV_DVB_ADAPTER "adapter"
73 #define DEV_DVB_OSD "osd"
74 #define DEV_DVB_FRONTEND "frontend"
75 #define DEV_DVB_DVR "dvr"
76 #define DEV_DVB_DEMUX "demux"
77 #define DEV_DVB_VIDEO "video"
78 #define DEV_DVB_AUDIO "audio"
79 #define DEV_DVB_CA "ca"
80 
82  int userValue;
84  const char *userString;
85  };
86 
87 const char *MapToUserString(int Value, const tDvbParameterMap *Map);
88 int MapToUser(int Value, const tDvbParameterMap *Map, const char **String = NULL);
89 int MapToDriver(int Value, const tDvbParameterMap *Map);
90 int UserIndex(int Value, const tDvbParameterMap *Map);
91 int DriverIndex(int Value, const tDvbParameterMap *Map);
92 
93 extern const tDvbParameterMap PilotValues[];
94 extern const tDvbParameterMap InversionValues[];
95 extern const tDvbParameterMap BandwidthValues[];
96 extern const tDvbParameterMap CoderateValues[];
97 extern const tDvbParameterMap ModulationValues[];
98 extern const tDvbParameterMap SystemValuesSat[];
99 extern const tDvbParameterMap SystemValuesTerr[];
100 extern const tDvbParameterMap TransmissionValues[];
101 extern const tDvbParameterMap GuardValues[];
102 extern const tDvbParameterMap HierarchyValues[];
103 extern const tDvbParameterMap RollOffValues[];
104 
106 friend class cDvbSourceParam;
107 private:
114  int system;
116  int guard;
118  int rollOff;
119  int streamId;
121  int sisoMiso;
122  int pilot;
123  int lcn;
124  int PrintParameter(char *p, char Name, int Value) const;
125  const char *ParseParameter(const char *s, int &Value, const tDvbParameterMap *Map = NULL);
126 public:
127  cDvbTransponderParameters(const char *Parameters = NULL);
128  char Polarization(void) const { return polarization; }
129  int Inversion(void) const { return inversion; }
130  int Bandwidth(void) const { return bandwidth; }
131  int CoderateH(void) const { return coderateH; }
132  int CoderateL(void) const { return coderateL; }
133  int Modulation(void) const { return modulation; }
134  int System(void) const { return system; }
135  int Transmission(void) const { return transmission; }
136  int Guard(void) const { return guard; }
137  int Hierarchy(void) const { return hierarchy; }
138  int RollOff(void) const { return rollOff; }
139  int StreamId(void) const { return streamId; }
140  int T2SystemId(void) const { return t2systemId; }
141  int SisoMiso(void) const { return sisoMiso; }
142  int Pilot(void) const { return pilot; }
143  int Lcn(void) const { return lcn; }
150  void SetSystem(int System) { system = System; }
152  void SetGuard(int Guard) { guard = Guard; }
158  void SetPilot(int Pilot) { pilot = Pilot; }
159  void SetLcn(int Lcn) { lcn = Lcn; }
160  cString ToString(char Type) const;
161  bool Parse(const char *s);
162  };
163 
164 class cDvbTuner;
165 
166 cString DvbName(const char *Name, int Adapter, int Frontend);
167 int DvbOpen(const char *Name, int Adapter, int Frontend, int Mode, bool ReportError = false);
168 
170 
171 class cDvbDevice : public cDevice {
172 private:
173  static bool Exists(int Adapter, int Frontend);
175  static bool Probe(int Adapter, int Frontend);
177 public:
178  static bool useDvbDevices;
179  static bool Initialize(void);
183 protected:
185  virtual bool IsBonded(void) const override { return bondedDevice; }
186 private:
187  int fd_dvr, fd_ca;
192 public:
193  cDvbDevice(int Adapter, int Frontend);
194  virtual ~cDvbDevice() override;
195  int Adapter(void) const { return adapter; }
196  int Frontend(void) const;
197  virtual cString DeviceType(void) const override;
198  virtual cString DeviceName(void) const override;
199  static bool BondDevices(const char *Bondings);
205  static void UnBondDevices(void);
207  bool Bond(cDvbDevice *Device);
215  void UnBond(void);
219  bool BondingOk(const cChannel *Channel, bool ConsiderOccupied = false) const;
226 
227 // Common Interface facilities:
228 
229 private:
231 
232 // Channel facilities
233 
234 private:
236 public:
237  virtual bool ProvidesDeliverySystem(int DeliverySystem) const;
238  virtual bool ProvidesSource(int Source) const override;
239  virtual bool ProvidesTransponder(const cChannel *Channel) const override;
240  virtual bool ProvidesChannel(const cChannel *Channel, int Priority = IDLEPRIORITY, bool *NeedsDetachReceivers = NULL) const override;
241  virtual bool ProvidesEIT(void) const override;
242  virtual int NumProvidedSystems(void) const override;
243  virtual const cPositioner *Positioner(void) const override;
244  virtual bool SignalStats(int &Valid, double *Strength = NULL, double *Cnr = NULL, double *BerPre = NULL, double *BerPost = NULL, double *Per = NULL, int *Status = NULL) const override;
245  virtual int SignalStrength(void) const override;
246  virtual int SignalQuality(void) const override;
247  virtual const cChannel *GetCurrentlyTunedTransponder(void) const override;
248  virtual bool IsTunedToTransponder(const cChannel *Channel) const override;
249  virtual bool MaySwitchTransponder(const cChannel *Channel) const override;
250  virtual void SetPowerSaveMode(bool On) override;
251 protected:
252  virtual bool SetChannelDevice(const cChannel *Channel, bool LiveView) override;
253 public:
254  virtual bool HasLock(int TimeoutMs = 0) const override;
255 
256 // PID handle facilities
257 
258 protected:
259  virtual bool SetPid(cPidHandle *Handle, int Type, bool On) override;
260 
261 // Section filter facilities
262 
263 protected:
264  virtual int OpenFilter(u_short Pid, u_char Tid, u_char Mask) override;
265  virtual void CloseFilter(int Handle) override;
266 
267 // Common Interface facilities:
268 
269 public:
270  virtual bool HasCi(void) override;
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) override;
290  virtual void CloseDvr(void) override;
291  virtual bool GetTSPacket(uchar *&Data) override;
292  virtual void DetachAllReceivers(void) override;
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() override;
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
Definition: ci.h:172
int Priority(bool IgnoreOccupied=false) const
Returns the priority of the current receiving session (-MAXPRIORITY..MAXPRIORITY),...
Definition: device.c:1714
cDvbDeviceProbe(void)
Definition: dvbdevice.c:2425
virtual ~cDvbDeviceProbe() override
Definition: dvbdevice.c:2430
static uint32_t GetSubsystemId(int Adapter, int Frontend)
Definition: dvbdevice.c:2435
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...
The cDvbDevice implements a DVB device which can be accessed through the Linux DVB driver API.
Definition: dvbdevice.h:171
virtual bool ProvidesChannel(const cChannel *Channel, int Priority=IDLEPRIORITY, bool *NeedsDetachReceivers=NULL) const override
Returns true if this device can provide the given channel.
Definition: dvbdevice.c:2251
static void UnBondDevices(void)
Unbonds all devices.
Definition: dvbdevice.c:2086
virtual bool ProvidesTransponder(const cChannel *Channel) const override
Returns true if this device can provide the transponder of the given Channel (which implies that it c...
Definition: dvbdevice.c:2238
static void SetTransferModeForDolbyDigital(int Mode)
Definition: dvbdevice.c:2365
virtual bool OpenDvr(void) override
Opens the DVR of this device and prepares it to deliver a Transport Stream for use in a cReceiver.
Definition: dvbdevice.c:2370
cDvbDevice(int Adapter, int Frontend)
Definition: dvbdevice.c:1881
virtual cString DeviceType(void) const override
Returns a string identifying the type of this device (like "DVB-S").
Definition: dvbdevice.c:1968
virtual const cPositioner * Positioner(void) const override
Returns a pointer to the positioner (if any) this device has used to move the satellite dish to the r...
Definition: dvbdevice.c:2311
virtual const cChannel * GetCurrentlyTunedTransponder(void) const override
Returns a pointer to the currently tuned transponder.
Definition: dvbdevice.c:2331
virtual cString DeviceName(void) const override
Returns a string identifying the name of this device.
Definition: dvbdevice.c:1975
virtual void CloseDvr(void) override
Shuts down the DVR.
Definition: dvbdevice.c:2379
static bool Exists(int Adapter, int Frontend)
Checks whether the given adapter/frontend exists.
Definition: dvbdevice.c:1938
static bool BondDevices(const char *Bondings)
Bonds the devices as defined in the given Bondings string.
Definition: dvbdevice.c:2045
static bool useDvbDevices
Definition: dvbdevice.h:178
bool checkTsBuffer
Definition: dvbdevice.h:188
virtual bool IsBonded(void) const override
Returns true if this device is bonded to an other device.
Definition: dvbdevice.h:185
cCiAdapter * ciAdapter
Definition: dvbdevice.h:230
virtual bool MaySwitchTransponder(const cChannel *Channel) const override
Returns true if it is ok to switch to the Channel's transponder on this device, without disturbing an...
Definition: dvbdevice.c:2341
cDvbTuner * dvbTuner
Definition: dvbdevice.h:235
static bool Initialize(void)
Initializes the DVB devices.
Definition: dvbdevice.c:1982
void UnBond(void)
Removes this device from any bonding it might have with other devices.
Definition: dvbdevice.c:2118
virtual bool GetTSPacket(uchar *&Data) override
Gets exactly one TS packet from the DVR of this device and returns a pointer to it in Data.
Definition: dvbdevice.c:2389
int adapter
Definition: dvbdevice.h:184
static cMutex bondMutex
Definition: dvbdevice.h:189
virtual int NumProvidedSystems(void) const override
Returns the number of individual "delivery systems" this device provides.
Definition: dvbdevice.c:2306
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:2135
virtual void DetachAllReceivers(void) override
Detaches all receivers from this device.
Definition: dvbdevice.c:2410
cTSBuffer * tsBuffer
< Controls how the DVB device handles Transfer Mode when replaying Dolby Digital audio.
Definition: dvbdevice.h:287
virtual bool SetPid(cPidHandle *Handle, int Type, bool On) override
Does the actual PID setting on this device.
Definition: dvbdevice.c:2148
bool needsDetachBondedReceivers
Definition: dvbdevice.h:191
virtual bool HasLock(int TimeoutMs=0) const override
Returns true if the device has a lock on the requested transponder.
Definition: dvbdevice.c:2360
static int setTransferModeForDolbyDigital
Definition: dvbdevice.h:275
virtual bool ProvidesSource(int Source) const override
Returns true if this device can provide the given source.
Definition: dvbdevice.c:2228
int Frontend(void) const
Definition: dvbdevice.c:1933
virtual int SignalQuality(void) const override
Returns the "quality" of the currently received signal.
Definition: dvbdevice.c:2326
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:2094
virtual bool ProvidesDeliverySystem(int DeliverySystem) const
Definition: dvbdevice.c:2223
virtual void CloseFilter(int Handle) override
Closes a file handle that has previously been opened by OpenFilter().
Definition: dvbdevice.c:2218
virtual int SignalStrength(void) const override
Returns the "strength" of the currently received signal.
Definition: dvbdevice.c:2321
virtual bool ProvidesEIT(void) const override
Returns true if this device provides EIT data and thus wants to be tuned to the channels it can recei...
Definition: dvbdevice.c:2301
virtual bool IsTunedToTransponder(const cChannel *Channel) const override
Returns true if this device is currently tuned to the given Channel's transponder.
Definition: dvbdevice.c:2336
cDvbDevice * bondedDevice
Definition: dvbdevice.h:190
int frontend
Definition: dvbdevice.h:184
virtual bool SetChannelDevice(const cChannel *Channel, bool LiveView) override
Sets the device to the given channel (actual physical setup).
Definition: dvbdevice.c:2351
int fd_dvr
Definition: dvbdevice.h:187
virtual ~cDvbDevice() override
Definition: dvbdevice.c:1909
static bool Probe(int Adapter, int Frontend)
Probes for existing DVB devices.
Definition: dvbdevice.c:1955
virtual bool SignalStats(int &Valid, double *Strength=NULL, double *Cnr=NULL, double *BerPre=NULL, double *BerPost=NULL, double *Per=NULL, int *Status=NULL) const override
Returns statistics about the currently received signal (if available).
Definition: dvbdevice.c:2316
virtual bool HasCi(void) override
Returns true if this device has a Common Interface.
Definition: dvbdevice.c:2143
int Adapter(void) const
Definition: dvbdevice.h:195
virtual void SetPowerSaveMode(bool On) override
Puts the device into power save mode, if applicable.
Definition: dvbdevice.c:2346
virtual int OpenFilter(u_short Pid, u_char Tid, u_char Mask) override
Opens a file handle for the given filter data.
Definition: dvbdevice.c:2190
void SetGuard(int Guard)
Definition: dvbdevice.h:152
int StreamId(void) const
Definition: dvbdevice.h:139
cString ToString(char Type) const
Definition: dvbdevice.c:217
const char * ParseParameter(const char *s, int &Value, const tDvbParameterMap *Map=NULL)
Definition: dvbdevice.c:242
char Polarization(void) const
Definition: dvbdevice.h:128
void SetSystem(int System)
Definition: dvbdevice.h:150
void SetSisoMiso(int SisoMiso)
Definition: dvbdevice.h:157
void SetModulation(int Modulation)
Definition: dvbdevice.h:149
void SetInversion(int Inversion)
Definition: dvbdevice.h:145
void SetPilot(int Pilot)
Definition: dvbdevice.h:158
int Guard(void) const
Definition: dvbdevice.h:136
int T2SystemId(void) const
Definition: dvbdevice.h:140
void SetRollOff(int RollOff)
Definition: dvbdevice.h:154
void SetCoderateL(int CoderateL)
Definition: dvbdevice.h:148
void SetCoderateH(int CoderateH)
Definition: dvbdevice.h:147
void SetT2SystemId(int T2SystemId)
Definition: dvbdevice.h:156
bool Parse(const char *s)
Definition: dvbdevice.c:258
void SetBandwidth(int Bandwidth)
Definition: dvbdevice.h:146
int Pilot(void) const
Definition: dvbdevice.h:142
void SetLcn(int Lcn)
Definition: dvbdevice.h:159
int PrintParameter(char *p, char Name, int Value) const
Definition: dvbdevice.c:212
int RollOff(void) const
Definition: dvbdevice.h:138
int CoderateL(void) const
Definition: dvbdevice.h:132
void SetPolarization(char Polarization)
Definition: dvbdevice.h:144
int Transmission(void) const
Definition: dvbdevice.h:135
int SisoMiso(void) const
Definition: dvbdevice.h:141
int Bandwidth(void) const
Definition: dvbdevice.h:130
int System(void) const
Definition: dvbdevice.h:134
void SetTransmission(int Transmission)
Definition: dvbdevice.h:151
int Inversion(void) const
Definition: dvbdevice.h:129
cDvbTransponderParameters(const char *Parameters=NULL)
Definition: dvbdevice.c:207
void SetHierarchy(int Hierarchy)
Definition: dvbdevice.h:153
int Modulation(void) const
Definition: dvbdevice.h:133
void SetStreamId(int StreamId)
Definition: dvbdevice.h:155
int Hierarchy(void) const
Definition: dvbdevice.h:137
int CoderateH(void) const
Definition: dvbdevice.h:131
int Lcn(void) const
Definition: dvbdevice.h:143
int Frontend(void) const
Definition: dvbdevice.c:583
Definition: tools.h:631
Definition: thread.h:67
A steerable satellite dish generally points to the south on the northern hemisphere,...
Definition: positioner.h:31
Definition: tools.h:178
Derived cDevice classes that can receive channels will have to provide Transport Stream (TS) packets ...
Definition: device.h:891
#define IDLEPRIORITY
Definition: config.h:49
@ SYS_DVBT2
Definition: dvbdevice.h:52
const tDvbParameterMap CoderateValues[]
Definition: dvbdevice.c:68
const tDvbParameterMap PilotValues[]
Definition: dvbdevice.c:43
const tDvbParameterMap GuardValues[]
Definition: dvbdevice.c:127
const char * MapToUserString(int Value, const tDvbParameterMap *Map)
Definition: dvbdevice.c:189
const tDvbParameterMap SystemValuesSat[]
Definition: dvbdevice.c:104
int DvbOpen(const char *Name, int Adapter, int Frontend, int Mode, bool ReportError=false)
Definition: dvbdevice.c:1924
const tDvbParameterMap HierarchyValues[]
Definition: dvbdevice.c:139
@ TRANSMISSION_MODE_16K
Definition: dvbdevice.h:43
@ TRANSMISSION_MODE_1K
Definition: dvbdevice.h:42
@ TRANSMISSION_MODE_32K
Definition: dvbdevice.h:44
int DriverIndex(int Value, const tDvbParameterMap *Map)
Definition: dvbdevice.c:167
@ GUARD_INTERVAL_19_128
Definition: dvbdevice.h:48
@ GUARD_INTERVAL_19_256
Definition: dvbdevice.h:49
@ GUARD_INTERVAL_1_128
Definition: dvbdevice.h:47
cString DvbName(const char *Name, int Adapter, int Frontend)
Definition: dvbdevice.c:1919
@ FE_CAN_2G_MODULATION
Definition: dvbdevice.h:27
const tDvbParameterMap BandwidthValues[]
Definition: dvbdevice.c:57
int MapToUser(int Value, const tDvbParameterMap *Map, const char **String=NULL)
Definition: dvbdevice.c:178
cList< cDvbDeviceProbe > DvbDeviceProbes
Definition: dvbdevice.c:2423
const tDvbParameterMap TransmissionValues[]
Definition: dvbdevice.c:116
const tDvbParameterMap InversionValues[]
Definition: dvbdevice.c:50
@ TRANSMISSION_MODE_4K
Definition: dvbdevice.h:30
@ FE_CAN_MULTISTREAM
Definition: dvbdevice.h:62
const tDvbParameterMap RollOffValues[]
Definition: dvbdevice.c:148
const tDvbParameterMap ModulationValues[]
Definition: dvbdevice.c:84
const tDvbParameterMap SystemValuesTerr[]
Definition: dvbdevice.c:110
@ FE_CAN_TURBO_FEC
Definition: dvbdevice.h:36
int UserIndex(int Value, const tDvbParameterMap *Map)
Definition: dvbdevice.c:156
int MapToDriver(int Value, const tDvbParameterMap *Map)
Definition: dvbdevice.c:197
unsigned char u_char
Definition: headers.h:24
const char * userString
Definition: dvbdevice.h:84
unsigned char uchar
Definition: tools.h:31