vdr 2.7.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.1 2024/07/08 09:34:33 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
26enum {
28 };
29enum {
30 TRANSMISSION_MODE_4K = TRANSMISSION_MODE_AUTO + 1,
31 };
32#endif
33
34#if DVBAPIVERSION < 0x0502
35enum {
36 FE_CAN_TURBO_FEC = 0x8000000,
37 };
38#endif
39
40#if DVBAPIVERSION < 0x0503
41enum {
45 };
46enum {
47 GUARD_INTERVAL_1_128 = GUARD_INTERVAL_AUTO + 1,
50 };
51enum {
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
61enum {
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
84 const char *userString;
85 };
86
87const char *MapToUserString(int Value, const tDvbParameterMap *Map);
88int MapToUser(int Value, const tDvbParameterMap *Map, const char **String = NULL);
89int MapToDriver(int Value, const tDvbParameterMap *Map);
90int UserIndex(int Value, const tDvbParameterMap *Map);
91int DriverIndex(int Value, const tDvbParameterMap *Map);
92
93extern const tDvbParameterMap PilotValues[];
96extern const tDvbParameterMap CoderateValues[];
101extern const tDvbParameterMap GuardValues[];
102extern const tDvbParameterMap HierarchyValues[];
103extern const tDvbParameterMap RollOffValues[];
104
106friend class cDvbSourceParam;
107private:
116 int guard;
122 int pilot;
123 int PrintParameter(char *p, char Name, int Value) const;
124 const char *ParseParameter(const char *s, int &Value, const tDvbParameterMap *Map = NULL);
125public:
126 cDvbTransponderParameters(const char *Parameters = NULL);
127 char Polarization(void) const { return polarization; }
128 int Inversion(void) const { return inversion; }
129 int Bandwidth(void) const { return bandwidth; }
130 int CoderateH(void) const { return coderateH; }
131 int CoderateL(void) const { return coderateL; }
132 int Modulation(void) const { return modulation; }
133 int System(void) const { return system; }
134 int Transmission(void) const { return transmission; }
135 int Guard(void) const { return guard; }
136 int Hierarchy(void) const { return hierarchy; }
137 int RollOff(void) const { return rollOff; }
138 int StreamId(void) const { return streamId; }
139 int T2SystemId(void) const { return t2systemId; }
140 int SisoMiso(void) const { return sisoMiso; }
141 int Pilot(void) const { return pilot; }
148 void SetSystem(int System) { system = System; }
150 void SetGuard(int Guard) { guard = Guard; }
156 void SetPilot(int Pilot) { pilot = Pilot; }
157 cString ToString(char Type) const;
158 bool Parse(const char *s);
159 };
160
161class cDvbTuner;
162
163cString DvbName(const char *Name, int Adapter, int Frontend);
164int DvbOpen(const char *Name, int Adapter, int Frontend, int Mode, bool ReportError = false);
165
167
168class cDvbDevice : public cDevice {
169private:
170 static bool Exists(int Adapter, int Frontend);
172 static bool Probe(int Adapter, int Frontend);
174public:
175 static bool useDvbDevices;
176 static bool Initialize(void);
180protected:
182 virtual bool IsBonded(void) const { return bondedDevice; }
183private:
189public:
190 cDvbDevice(int Adapter, int Frontend);
191 virtual ~cDvbDevice();
192 int Adapter(void) const { return adapter; }
193 int Frontend(void) const;
194 virtual cString DeviceType(void) const;
195 virtual cString DeviceName(void) const;
196 static bool BondDevices(const char *Bondings);
202 static void UnBondDevices(void);
204 bool Bond(cDvbDevice *Device);
212 void UnBond(void);
216 bool BondingOk(const cChannel *Channel, bool ConsiderOccupied = false) const;
223
224// Common Interface facilities:
225
226private:
228
229// Channel facilities
230
231private:
233public:
234 virtual bool ProvidesDeliverySystem(int DeliverySystem) const;
235 virtual bool ProvidesSource(int Source) const;
236 virtual bool ProvidesTransponder(const cChannel *Channel) const;
237 virtual bool ProvidesChannel(const cChannel *Channel, int Priority = IDLEPRIORITY, bool *NeedsDetachReceivers = NULL) const;
238 virtual bool ProvidesEIT(void) const;
239 virtual int NumProvidedSystems(void) const;
240 virtual const cPositioner *Positioner(void) const;
241 virtual bool SignalStats(int &Valid, double *Strength = NULL, double *Cnr = NULL, double *BerPre = NULL, double *BerPost = NULL, double *Per = NULL, int *Status = NULL) const;
242 virtual int SignalStrength(void) const;
243 virtual int SignalQuality(void) const;
244 virtual const cChannel *GetCurrentlyTunedTransponder(void) const;
245 virtual bool IsTunedToTransponder(const cChannel *Channel) const;
246 virtual bool MaySwitchTransponder(const cChannel *Channel) const;
247 virtual void SetPowerSaveMode(bool On);
248protected:
249 virtual bool SetChannelDevice(const cChannel *Channel, bool LiveView);
250public:
251 virtual bool HasLock(int TimeoutMs = 0) const;
252
253// PID handle facilities
254
255protected:
256 virtual bool SetPid(cPidHandle *Handle, int Type, bool On);
257
258// Section filter facilities
259
260protected:
261 virtual int OpenFilter(u_short Pid, u_char Tid, u_char Mask);
262 virtual void CloseFilter(int Handle);
263
264// Common Interface facilities:
265
266public:
267 virtual bool HasCi(void);
268
269// Audio facilities
270
271protected:
273public:
274 static void SetTransferModeForDolbyDigital(int Mode); // needs to be here for backwards compatibility
280
281// Receiver facilities
282
283private:
285protected:
286 virtual bool OpenDvr(void);
287 virtual void CloseDvr(void);
288 virtual bool GetTSPacket(uchar *&Data);
289 virtual void DetachAllReceivers(void);
290 };
291
292// A plugin that implements a DVB device derived from cDvbDevice needs to create
293// a cDvbDeviceProbe derived object on the heap in order to have its Probe()
294// function called, where it can actually create the appropriate device.
295// The cDvbDeviceProbe object must be created in the plugin's constructor,
296// and deleted in its destructor.
297
299public:
300 cDvbDeviceProbe(void);
301 virtual ~cDvbDeviceProbe();
302 static uint32_t GetSubsystemId(int Adapter, int Frontend);
303 virtual bool Probe(int Adapter, int Frontend) = 0;
307 };
308
310
311#endif //__DVBDEVICE_H
int Priority(bool IgnoreOccupied=false) const
Returns the priority of the current receiving session (-MAXPRIORITY..MAXPRIORITY),...
Definition device.c:1695
cDevice(void)
Definition device.c:79
cDvbDeviceProbe(void)
Definition dvbdevice.c:2422
static uint32_t GetSubsystemId(int Adapter, int Frontend)
Definition dvbdevice.c:2432
virtual ~cDvbDeviceProbe()
Definition dvbdevice.c:2427
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:168
virtual cString DeviceType(void) const
Returns a string identifying the type of this device (like "DVB-S").
Definition dvbdevice.c:1965
virtual int OpenFilter(u_short Pid, u_char Tid, u_char Mask)
Opens a file handle for the given filter data.
Definition dvbdevice.c:2187
static void UnBondDevices(void)
Unbonds all devices.
Definition dvbdevice.c:2083
virtual bool IsTunedToTransponder(const cChannel *Channel) const
Returns true if this device is currently tuned to the given Channel's transponder.
Definition dvbdevice.c:2333
static void SetTransferModeForDolbyDigital(int Mode)
Definition dvbdevice.c:2362
cDvbDevice(int Adapter, int Frontend)
Definition dvbdevice.c:1878
virtual int SignalStrength(void) const
Returns the "strength" of the currently received signal.
Definition dvbdevice.c:2318
virtual void SetPowerSaveMode(bool On)
Puts the device into power save mode, if applicable.
Definition dvbdevice.c:2343
virtual bool HasLock(int TimeoutMs=0) const
Returns true if the device has a lock on the requested transponder.
Definition dvbdevice.c:2357
virtual void CloseFilter(int Handle)
Closes a file handle that has previously been opened by OpenFilter().
Definition dvbdevice.c:2215
static bool Exists(int Adapter, int Frontend)
Checks whether the given adapter/frontend exists.
Definition dvbdevice.c:1935
virtual bool SetPid(cPidHandle *Handle, int Type, bool On)
Does the actual PID setting on this device.
Definition dvbdevice.c:2145
static bool BondDevices(const char *Bondings)
Bonds the devices as defined in the given Bondings string.
Definition dvbdevice.c:2042
static bool useDvbDevices
Definition dvbdevice.h:175
virtual int NumProvidedSystems(void) const
Returns the number of individual "delivery systems" this device provides.
Definition dvbdevice.c:2303
virtual void DetachAllReceivers(void)
Detaches all receivers from this device.
Definition dvbdevice.c:2407
bool checkTsBuffer
Definition dvbdevice.h:185
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:2298
cCiAdapter * ciAdapter
Definition dvbdevice.h:227
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:2235
cDvbTuner * dvbTuner
Definition dvbdevice.h:232
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:2338
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:2367
virtual void CloseDvr(void)
Shuts down the DVR.
Definition dvbdevice.c:2376
static bool Initialize(void)
Initializes the DVB devices.
Definition dvbdevice.c:1979
void UnBond(void)
Removes this device from any bonding it might have with other devices.
Definition dvbdevice.c:2115
virtual bool SetChannelDevice(const cChannel *Channel, bool LiveView)
Sets the device to the given channel (actual physical setup).
Definition dvbdevice.c:2348
static cMutex bondMutex
Definition dvbdevice.h:186
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:2132
cTSBuffer * tsBuffer
< Controls how the DVB device handles Transfer Mode when replaying Dolby Digital audio.
Definition dvbdevice.h:284
bool needsDetachBondedReceivers
Definition dvbdevice.h:188
virtual ~cDvbDevice()
Definition dvbdevice.c:1906
virtual bool SignalStats(int &Valid, double *Strength=NULL, double *Cnr=NULL, double *BerPre=NULL, double *BerPost=NULL, double *Per=NULL, int *Status=NULL) const
Returns statistics about the currently received signal (if available).
Definition dvbdevice.c:2313
static int setTransferModeForDolbyDigital
Definition dvbdevice.h:272
virtual bool IsBonded(void) const
Returns true if this device is bonded to an other device.
Definition dvbdevice.h:182
virtual cString DeviceName(void) const
Returns a string identifying the name of this device.
Definition dvbdevice.c:1972
int Frontend(void) const
Definition dvbdevice.c:1930
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:2386
virtual const cChannel * GetCurrentlyTunedTransponder(void) const
Returns a pointer to the currently tuned transponder.
Definition dvbdevice.c:2328
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:2091
virtual bool ProvidesDeliverySystem(int DeliverySystem) const
Definition dvbdevice.c:2220
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:2248
virtual bool ProvidesSource(int Source) const
Returns true if this device can provide the given source.
Definition dvbdevice.c:2225
virtual bool HasCi(void)
Returns true if this device has a Common Interface.
Definition dvbdevice.c:2140
cDvbDevice * bondedDevice
Definition dvbdevice.h:187
virtual int SignalQuality(void) const
Returns the "quality" of the currently received signal.
Definition dvbdevice.c:2323
static bool Probe(int Adapter, int Frontend)
Probes for existing DVB devices.
Definition dvbdevice.c:1952
int Adapter(void) const
Definition dvbdevice.h:192
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:2308
void SetGuard(int Guard)
Definition dvbdevice.h:150
int StreamId(void) const
Definition dvbdevice.h:138
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:127
void SetSystem(int System)
Definition dvbdevice.h:148
void SetSisoMiso(int SisoMiso)
Definition dvbdevice.h:155
void SetModulation(int Modulation)
Definition dvbdevice.h:147
void SetInversion(int Inversion)
Definition dvbdevice.h:143
void SetPilot(int Pilot)
Definition dvbdevice.h:156
int Guard(void) const
Definition dvbdevice.h:135
int T2SystemId(void) const
Definition dvbdevice.h:139
void SetRollOff(int RollOff)
Definition dvbdevice.h:152
friend class cDvbSourceParam
Definition dvbdevice.h:106
void SetCoderateL(int CoderateL)
Definition dvbdevice.h:146
void SetCoderateH(int CoderateH)
Definition dvbdevice.h:145
void SetT2SystemId(int T2SystemId)
Definition dvbdevice.h:154
bool Parse(const char *s)
Definition dvbdevice.c:257
void SetBandwidth(int Bandwidth)
Definition dvbdevice.h:144
int Pilot(void) const
Definition dvbdevice.h:141
int PrintParameter(char *p, char Name, int Value) const
Definition dvbdevice.c:212
int RollOff(void) const
Definition dvbdevice.h:137
int CoderateL(void) const
Definition dvbdevice.h:131
void SetPolarization(char Polarization)
Definition dvbdevice.h:142
int Transmission(void) const
Definition dvbdevice.h:134
int SisoMiso(void) const
Definition dvbdevice.h:140
int Bandwidth(void) const
Definition dvbdevice.h:129
int System(void) const
Definition dvbdevice.h:133
void SetTransmission(int Transmission)
Definition dvbdevice.h:149
int Inversion(void) const
Definition dvbdevice.h:128
cDvbTransponderParameters(const char *Parameters=NULL)
Definition dvbdevice.c:207
void SetHierarchy(int Hierarchy)
Definition dvbdevice.h:151
int Modulation(void) const
Definition dvbdevice.h:132
void SetStreamId(int StreamId)
Definition dvbdevice.h:153
int Hierarchy(void) const
Definition dvbdevice.h:136
int CoderateH(void) const
Definition dvbdevice.h:130
int Frontend(void) const
Definition dvbdevice.c:580
cListObject(const cListObject &ListObject)
Definition tools.h:534
Definition tools.h:631
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:889
#define IDLEPRIORITY
Definition config.h:45
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
const tDvbParameterMap BandwidthValues[]
Definition dvbdevice.c:57
cList< cDvbDeviceProbe > DvbDeviceProbes
Definition dvbdevice.c:2420
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
@ SYS_DVBT2
Definition dvbdevice.h:52
@ FE_CAN_MULTISTREAM
Definition dvbdevice.h:62
int DvbOpen(const char *Name, int Adapter, int Frontend, int Mode, bool ReportError=false)
Definition dvbdevice.c:1921
@ FE_CAN_TURBO_FEC
Definition dvbdevice.h:36
@ TRANSMISSION_MODE_4K
Definition dvbdevice.h:30
int DriverIndex(int Value, const tDvbParameterMap *Map)
Definition dvbdevice.c:167
cString DvbName(const char *Name, int Adapter, int Frontend)
Definition dvbdevice.c:1916
@ FE_CAN_2G_MODULATION
Definition dvbdevice.h:27
@ GUARD_INTERVAL_19_128
Definition dvbdevice.h:48
@ GUARD_INTERVAL_19_256
Definition dvbdevice.h:49
@ GUARD_INTERVAL_1_128
Definition dvbdevice.h:47
int MapToUser(int Value, const tDvbParameterMap *Map, const char **String=NULL)
Definition dvbdevice.c:178
@ TRANSMISSION_MODE_16K
Definition dvbdevice.h:43
@ TRANSMISSION_MODE_1K
Definition dvbdevice.h:42
@ TRANSMISSION_MODE_32K
Definition dvbdevice.h:44
int UserIndex(int Value, const tDvbParameterMap *Map)
Definition dvbdevice.c:156
const char * MapToUserString(int Value, const tDvbParameterMap *Map)
Definition dvbdevice.c:189
int MapToDriver(int Value, const tDvbParameterMap *Map)
Definition dvbdevice.c:197
const char * userString
Definition dvbdevice.h:84
unsigned char uchar
Definition tools.h:31