summaryrefslogtreecommitdiff
path: root/dvbdevice.h
diff options
context:
space:
mode:
authorKlaus Schmidinger <vdr@tvdr.de>2011-12-04 12:45:26 +0100
committerKlaus Schmidinger <vdr@tvdr.de>2011-12-04 12:45:26 +0100
commita49ce434f6152a4431b0dd717f4070dc0da401ef (patch)
treebb1329cf29c377e8424fc1e538ed25110f095c93 /dvbdevice.h
parenta964269fe9080463cc87aba7b454b6b06b7f8677 (diff)
downloadvdr-a49ce434f6152a4431b0dd717f4070dc0da401ef.tar.gz
vdr-a49ce434f6152a4431b0dd717f4070dc0da401ef.tar.bz2
Implemented "Device Bonding"
Diffstat (limited to 'dvbdevice.h')
-rw-r--r--dvbdevice.h36
1 files changed, 34 insertions, 2 deletions
diff --git a/dvbdevice.h b/dvbdevice.h
index e1842b7d..aee74592 100644
--- a/dvbdevice.h
+++ b/dvbdevice.h
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: dvbdevice.h 2.16 2011/08/26 12:55:45 kls Exp $
+ * $Id: dvbdevice.h 2.17 2011/11/27 11:56:57 kls Exp $
*/
#ifndef __DVBDEVICE_H
@@ -122,10 +122,40 @@ private:
int numProvidedSystems;
fe_delivery_system frontendType;
int fd_dvr, fd_ca;
+ static cMutex bondMutex;
+ cDvbDevice *bondedDevice;
+ mutable bool needsDetachBondedReceivers;
public:
cDvbDevice(int Adapter, int Frontend);
virtual ~cDvbDevice();
virtual bool Ready(void);
+ static bool BondDevices(const char *Bondings);
+ ///< Bonds the devices as defined in the given Bondings string.
+ ///< A bonding is a sequence of device numbers (starting at 1),
+ ///< separated by '+' characters. Several bondings are separated by
+ ///< commas, as in "1+2,3+4+5".
+ ///< Returns false if an error occurred.
+ static void UnBondDevices(void);
+ ///< Unbonds all devices.
+ bool Bond(cDvbDevice *Device);
+ ///< Bonds this device with the given Device, making both of them use
+ ///< the same satellite cable and LNB. Only DVB-S(2) devices can be
+ ///< bonded. When this function is called, the calling device must
+ ///< not be bonded to any other device. The given Device, however,
+ ///< may already be bonded to an other device. That way several devices
+ ///< can be bonded together.
+ ///< Returns true if the bonding was successful.
+ void UnBond(void);
+ ///< Removes this device from any bonding it might have with other
+ ///< devices. If this device is not bonded with any other device,
+ ///< nothing happens.
+ 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 same satellite, polarization
+ ///< and band as those the bonded devices are tuned to (if any).
+ ///< If ConsiderOccupied is true, any bonded devices that are currently
+ ///< occupied but not otherwise receiving will cause this function to
+ ///< return false.
// Common Interface facilities:
@@ -145,7 +175,8 @@ public:
virtual int SignalStrength(void) const;
virtual int SignalQuality(void) const;
virtual const cChannel *GetCurrentlyTunedTransponder(void) const;
- virtual bool IsTunedToTransponder(const cChannel *Channel);
+ virtual bool IsTunedToTransponder(const cChannel *Channel) const;
+ virtual bool MaySwitchTransponder(const cChannel *Channel) const;
protected:
virtual bool SetChannelDevice(const cChannel *Channel, bool LiveView);
public:
@@ -187,6 +218,7 @@ protected:
virtual bool OpenDvr(void);
virtual void CloseDvr(void);
virtual bool GetTSPacket(uchar *&Data);
+ virtual void DetachAllReceivers(void);
};
// A plugin that implements a DVB device derived from cDvbDevice needs to create