vdr 2.8.4
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 <atomic>
16#include "device.h"
17
18#define DVBAPIVERSION (DVB_API_VERSION << 8 | DVB_API_VERSION_MINOR)
19
20#if DVBAPIVERSION < 0x0500
21#error VDR requires Linux DVB driver API version 5.0 or higher!
22#endif
23
24// --- Definitions for older DVB API versions --------------------------------
25
26#if DVBAPIVERSION < 0x0501
27enum {
29 };
30enum {
31 TRANSMISSION_MODE_4K = TRANSMISSION_MODE_AUTO + 1,
32 };
33#endif
34
35#if DVBAPIVERSION < 0x0502
36enum {
37 FE_CAN_TURBO_FEC = 0x8000000,
38 };
39#endif
40
41#if DVBAPIVERSION < 0x0503
42enum {
46 };
47enum {
48 GUARD_INTERVAL_1_128 = GUARD_INTERVAL_AUTO + 1,
51 };
52enum {
53 SYS_DVBT2 = SYS_DAB + 1,
54 };
55#endif
56
57#if DVBAPIVERSION < 0x0505
58#define DTV_ENUM_DELSYS 44
59#endif
60
61#if DVBAPIVERSION < 0x0508
62enum {
63 FE_CAN_MULTISTREAM = 0x4000000,
64 };
65#define DTV_STREAM_ID 42
66#define DTV_DVBT2_PLP_ID_LEGACY 43
67#endif
68
69// --- End of definitions for older DVB API versions -------------------------
70
71#define DEV_VIDEO "/dev/video"
72#define DEV_DVB_BASE "/dev/dvb"
73#define DEV_DVB_ADAPTER "adapter"
74#define DEV_DVB_OSD "osd"
75#define DEV_DVB_FRONTEND "frontend"
76#define DEV_DVB_DVR "dvr"
77#define DEV_DVB_DEMUX "demux"
78#define DEV_DVB_VIDEO "video"
79#define DEV_DVB_AUDIO "audio"
80#define DEV_DVB_CA "ca"
81
85 const char *userString;
86 };
87
88const char *MapToUserString(int Value, const tDvbParameterMap *Map);
89int MapToUser(int Value, const tDvbParameterMap *Map, const char **String = NULL);
90int MapToDriver(int Value, const tDvbParameterMap *Map);
91int UserIndex(int Value, const tDvbParameterMap *Map);
92int DriverIndex(int Value, const tDvbParameterMap *Map);
93
94extern const tDvbParameterMap PilotValues[];
97extern const tDvbParameterMap CoderateValues[];
102extern const tDvbParameterMap GuardValues[];
103extern const tDvbParameterMap HierarchyValues[];
104extern const tDvbParameterMap RollOffValues[];
105
107friend class cDvbSourceParam;
108private:
117 int guard;
123 int pilot;
124 int PrintParameter(char *p, char Name, int Value) const;
125 const char *ParseParameter(const char *s, int &Value, const tDvbParameterMap *Map = NULL);
126public:
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; }
149 void SetSystem(int System) { system = System; }
151 void SetGuard(int Guard) { guard = Guard; }
157 void SetPilot(int Pilot) { pilot = Pilot; }
158 cString ToString(char Type) const;
159 bool Parse(const char *s);
160 };
161
162class cDvbTuner;
163
164cString DvbName(const char *Name, int Adapter, int Frontend);
165int DvbOpen(const char *Name, int Adapter, int Frontend, int Mode, bool ReportError = false);
166
168
169class cDvbDevice : public cDevice {
170private:
171 static bool Exists(int Adapter, int Frontend);
173 static bool Probe(int Adapter, int Frontend);
175public:
176 static bool useDvbDevices;
177 static bool Initialize(void);
181protected:
183 virtual bool IsBonded(void) const override { return bondedDevice; }
184private:
189 mutable std::atomic<bool> needsDetachBondedReceivers; // set by ProvidesChannel() on whichever thread asks
190public:
191 cDvbDevice(int Adapter, int Frontend);
192 virtual ~cDvbDevice() override;
193 int Adapter(void) const { return adapter; }
194 int Frontend(void) const;
195 virtual cString DeviceType(void) const override;
196 virtual cString DeviceName(void) const override;
197 static bool BondDevices(const char *Bondings);
203 static void UnBondDevices(void);
205 bool Bond(cDvbDevice *Device);
213 void UnBond(void);
217 bool BondingOk(const cChannel *Channel, bool ConsiderOccupied = false) const;
224
225// Common Interface facilities:
226
227private:
229
230// Channel facilities
231
232private:
234public:
235 virtual bool ProvidesDeliverySystem(int DeliverySystem) const;
236 virtual bool ProvidesSource(int Source) const override;
237 virtual bool ProvidesTransponder(const cChannel *Channel) const override;
238 virtual bool ProvidesChannel(const cChannel *Channel, int Priority = IDLEPRIORITY, bool *NeedsDetachReceivers = NULL) const override;
239 virtual bool ProvidesEIT(void) const override;
240 virtual int NumProvidedSystems(void) const override;
241 virtual const cPositioner *Positioner(void) const override;
242 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;
243 virtual int SignalStrength(void) const override;
244 virtual int SignalQuality(void) const override;
245 virtual const cChannel *GetCurrentlyTunedTransponder(void) const override;
246 virtual bool IsTunedToTransponder(const cChannel *Channel) const override;
247 virtual bool MaySwitchTransponder(const cChannel *Channel) const override;
248 virtual void SetPowerSaveMode(bool On) override;
249protected:
250 virtual bool SetChannelDevice(const cChannel *Channel, bool LiveView) override;
251public:
252 virtual bool HasLock(int TimeoutMs = 0) const override;
253
254// PID handle facilities
255
256protected:
257 virtual bool SetPid(cPidHandle *Handle, int Type, bool On) override;
258
259// Section filter facilities
260
261protected:
262 virtual int OpenFilter(u_short Pid, u_char Tid, u_char Mask) override;
263 virtual void CloseFilter(int Handle) override;
264
265// Common Interface facilities:
266
267public:
268 virtual bool HasCi(void) override;
269
270// Audio facilities
271
272protected:
274public:
275 static void SetTransferModeForDolbyDigital(int Mode); // needs to be here for backwards compatibility
281
282// Receiver facilities
283
284private:
286protected:
287 virtual bool OpenDvr(void) override;
288 virtual void CloseDvr(void) override;
289 virtual bool GetTSPacket(uchar *&Data) override;
290 virtual void DetachAllReceivers(void) override;
291 };
292
293// A plugin that implements a DVB device derived from cDvbDevice needs to create
294// a cDvbDeviceProbe derived object on the heap in order to have its Probe()
295// function called, where it can actually create the appropriate device.
296// The cDvbDeviceProbe object must be created in the plugin's constructor,
297// and deleted in its destructor.
298
300public:
301 cDvbDeviceProbe(void);
302 virtual ~cDvbDeviceProbe() override;
303 static uint32_t GetSubsystemId(int Adapter, int Frontend);
304 virtual bool Probe(int Adapter, int Frontend) = 0;
308 };
309
311
312#endif //__DVBDEVICE_H
int Priority(bool IgnoreOccupied=false) const
Returns the priority of the current receiving session (-MAXPRIORITY..MAXPRIORITY),...
Definition device.c:1819
cDevice(void)
Definition device.c:80
cDvbDeviceProbe(void)
Definition dvbdevice.c:2436
static uint32_t GetSubsystemId(int Adapter, int Frontend)
Definition dvbdevice.c:2446
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:169
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:2262
static void UnBondDevices(void)
Unbonds all devices.
Definition dvbdevice.c:2097
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:2249
static void SetTransferModeForDolbyDigital(int Mode)
Definition dvbdevice.c:2376
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:2381
cDvbDevice(int Adapter, int Frontend)
Definition dvbdevice.c:1887
virtual cString DeviceType(void) const override
Returns a string identifying the type of this device (like "DVB-S").
Definition dvbdevice.c:1979
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:2322
virtual const cChannel * GetCurrentlyTunedTransponder(void) const override
Returns a pointer to the currently tuned transponder.
Definition dvbdevice.c:2342
std::atomic< bool > needsDetachBondedReceivers
Definition dvbdevice.h:189
virtual cString DeviceName(void) const override
Returns a string identifying the name of this device.
Definition dvbdevice.c:1986
virtual void CloseDvr(void) override
Shuts down the DVR.
Definition dvbdevice.c:2390
static bool Exists(int Adapter, int Frontend)
Checks whether the given adapter/frontend exists.
Definition dvbdevice.c:1949
static bool BondDevices(const char *Bondings)
Bonds the devices as defined in the given Bondings string.
Definition dvbdevice.c:2056
static bool useDvbDevices
Definition dvbdevice.h:176
bool checkTsBuffer
Definition dvbdevice.h:186
virtual bool IsBonded(void) const override
Returns true if this device is bonded to an other device.
Definition dvbdevice.h:183
cCiAdapter * ciAdapter
Definition dvbdevice.h:228
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:2352
cDvbTuner * dvbTuner
Definition dvbdevice.h:233
static bool Initialize(void)
Initializes the DVB devices.
Definition dvbdevice.c:1993
void UnBond(void)
Removes this device from any bonding it might have with other devices.
Definition dvbdevice.c:2129
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:2400
static cMutex bondMutex
Definition dvbdevice.h:187
virtual int NumProvidedSystems(void) const override
Returns the number of individual "delivery systems" this device provides.
Definition dvbdevice.c:2317
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:2146
virtual void DetachAllReceivers(void) override
Detaches all receivers from this device.
Definition dvbdevice.c:2421
cTSBuffer * tsBuffer
< Controls how the DVB device handles Transfer Mode when replaying Dolby Digital audio.
Definition dvbdevice.h:285
virtual bool SetPid(cPidHandle *Handle, int Type, bool On) override
Does the actual PID setting on this device.
Definition dvbdevice.c:2159
virtual bool HasLock(int TimeoutMs=0) const override
Returns true if the device has a lock on the requested transponder.
Definition dvbdevice.c:2371
static int setTransferModeForDolbyDigital
Definition dvbdevice.h:273
virtual bool ProvidesSource(int Source) const override
Returns true if this device can provide the given source.
Definition dvbdevice.c:2239
int Frontend(void) const
Definition dvbdevice.c:1944
virtual int SignalQuality(void) const override
Returns the "quality" of the currently received signal.
Definition dvbdevice.c:2337
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:2105
virtual bool ProvidesDeliverySystem(int DeliverySystem) const
Definition dvbdevice.c:2234
virtual void CloseFilter(int Handle) override
Closes a file handle that has previously been opened by OpenFilter().
Definition dvbdevice.c:2229
virtual int SignalStrength(void) const override
Returns the "strength" of the currently received signal.
Definition dvbdevice.c:2332
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:2312
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:2347
cDvbDevice * bondedDevice
Definition dvbdevice.h:188
virtual bool SetChannelDevice(const cChannel *Channel, bool LiveView) override
Sets the device to the given channel (actual physical setup).
Definition dvbdevice.c:2362
static bool Probe(int Adapter, int Frontend)
Probes for existing DVB devices.
Definition dvbdevice.c:1966
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:2327
virtual bool HasCi(void) override
Returns true if this device has a Common Interface.
Definition dvbdevice.c:2154
int Adapter(void) const
Definition dvbdevice.h:193
virtual void SetPowerSaveMode(bool On) override
Puts the device into power save mode, if applicable.
Definition dvbdevice.c:2357
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:2201
void SetGuard(int Guard)
Definition dvbdevice.h:151
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:241
char Polarization(void) const
Definition dvbdevice.h:128
void SetSystem(int System)
Definition dvbdevice.h:149
void SetSisoMiso(int SisoMiso)
Definition dvbdevice.h:156
void SetModulation(int Modulation)
Definition dvbdevice.h:148
void SetInversion(int Inversion)
Definition dvbdevice.h:144
void SetPilot(int Pilot)
Definition dvbdevice.h:157
int Guard(void) const
Definition dvbdevice.h:136
int T2SystemId(void) const
Definition dvbdevice.h:140
void SetRollOff(int RollOff)
Definition dvbdevice.h:153
friend class cDvbSourceParam
Definition dvbdevice.h:107
void SetCoderateL(int CoderateL)
Definition dvbdevice.h:147
void SetCoderateH(int CoderateH)
Definition dvbdevice.h:146
void SetT2SystemId(int T2SystemId)
Definition dvbdevice.h:155
bool Parse(const char *s)
Definition dvbdevice.c:257
void SetBandwidth(int Bandwidth)
Definition dvbdevice.h:145
int Pilot(void) const
Definition dvbdevice.h:142
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:143
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:150
int Inversion(void) const
Definition dvbdevice.h:129
cDvbTransponderParameters(const char *Parameters=NULL)
Definition dvbdevice.c:207
void SetHierarchy(int Hierarchy)
Definition dvbdevice.h:152
int Modulation(void) const
Definition dvbdevice.h:133
void SetStreamId(int StreamId)
Definition dvbdevice.h:154
int Hierarchy(void) const
Definition dvbdevice.h:137
int CoderateH(void) const
Definition dvbdevice.h:131
int Frontend(void) const
Definition dvbdevice.c:580
cListObject(const cListObject &ListObject)
Definition tools.h:553
Definition tools.h:650
A steerable satellite dish generally points to the south on the northern hemisphere,...
Definition positioner.h:31
Derived cDevice classes that can receive channels will have to provide Transport Stream (TS) packets ...
Definition device.h:929
#define IDLEPRIORITY
Definition config.h:45
int DvbOpen(const char *Name, int Adapter, int Frontend, int Mode, bool ReportError)
Definition dvbdevice.c:1935
const tDvbParameterMap CoderateValues[]
Definition dvbdevice.c:68
const tDvbParameterMap PilotValues[]
Definition dvbdevice.c:43
const tDvbParameterMap GuardValues[]
Definition dvbdevice.c:127
const tDvbParameterMap SystemValuesSat[]
Definition dvbdevice.c:104
const tDvbParameterMap HierarchyValues[]
Definition dvbdevice.c:139
int DriverIndex(int Value, const tDvbParameterMap *Map)
Definition dvbdevice.c:167
cString DvbName(const char *Name, int Adapter, int Frontend)
Definition dvbdevice.c:1930
const tDvbParameterMap BandwidthValues[]
Definition dvbdevice.c:57
cList< cDvbDeviceProbe > DvbDeviceProbes
Definition dvbdevice.c:2434
const tDvbParameterMap TransmissionValues[]
Definition dvbdevice.c:116
const tDvbParameterMap InversionValues[]
Definition dvbdevice.c:50
const tDvbParameterMap RollOffValues[]
Definition dvbdevice.c:148
const tDvbParameterMap ModulationValues[]
Definition dvbdevice.c:84
const tDvbParameterMap SystemValuesTerr[]
Definition dvbdevice.c:110
int UserIndex(int Value, const tDvbParameterMap *Map)
Definition dvbdevice.c:156
int MapToUser(int Value, const tDvbParameterMap *Map, const char **String)
Definition dvbdevice.c:178
const char * MapToUserString(int Value, const tDvbParameterMap *Map)
Definition dvbdevice.c:189
int MapToDriver(int Value, const tDvbParameterMap *Map)
Definition dvbdevice.c:197
@ SYS_DVBT2
Definition dvbdevice.h:53
@ FE_CAN_MULTISTREAM
Definition dvbdevice.h:63
@ FE_CAN_TURBO_FEC
Definition dvbdevice.h:37
@ TRANSMISSION_MODE_4K
Definition dvbdevice.h:31
@ FE_CAN_2G_MODULATION
Definition dvbdevice.h:28
@ GUARD_INTERVAL_19_128
Definition dvbdevice.h:49
@ GUARD_INTERVAL_19_256
Definition dvbdevice.h:50
@ GUARD_INTERVAL_1_128
Definition dvbdevice.h:48
@ TRANSMISSION_MODE_16K
Definition dvbdevice.h:44
@ TRANSMISSION_MODE_1K
Definition dvbdevice.h:43
@ TRANSMISSION_MODE_32K
Definition dvbdevice.h:45
const char * userString
Definition dvbdevice.h:85
unsigned char uchar
Definition tools.h:31