1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
#ifndef LOCALDEVICES_H
#define LOCALDEVICES_H
// Local devices implements a device collection (Devices) for any devices physically
// attached to the local machine; that is, can be accessed directly through /dev/dvb/adapterX
#include <dvb.h>
#include <options.h>
#include <mutex>
#include <visibility.h>
#include <logger.h>
#include <filesystem>
namespace P2PVR {
class OpenTuner;
class DLL_PUBLIC DevicesI : public Tuners {
public:
class Options : public IceTray::Options {
public:
Options();
ICETRAY_OPTIONS_DECLARE;
std::vector<std::filesystem::path> devices;
};
DevicesI();
~DevicesI();
virtual void ScanAndSendNetworkInformation(const RawDataClientPrxPtr, const ::Ice::Current&) override;
virtual void SendNetworkInformation(const ::DVBSI::DeliveryPtr, const RawDataClientPrxPtr, const ::Ice::Current&) override;
virtual void SendBouquetAssociations(const ::DVBSI::DeliveryPtr, const RawDataClientPrxPtr, const ::Ice::Current&) override;
virtual void SendServiceDescriptions(const ::DVBSI::DeliveryPtr, const RawDataClientPrxPtr, const ::Ice::Current&) override;
virtual void SendProgramAssociationTable(const ::DVBSI::DeliveryPtr, const RawDataClientPrxPtr, const ::Ice::Current&) override;
virtual void SendProgramMap(const ::DVBSI::DeliveryPtr, ::Ice::Int, const RawDataClientPrxPtr, const ::Ice::Current&) override;
virtual void SendEventInformation(const ::DVBSI::DeliveryPtr, const RawDataClientPrxPtr, const ::Ice::Current&) override;
virtual ::Ice::Int StartSendingTS(const ::DVBSI::DeliveryPtr, const PacketIds, const RawDataClientPrxPtr, const ::Ice::Current&) override;
virtual ::Ice::Int StartSendingSection(const ::DVBSI::DeliveryPtr, ::Ice::Int, const RawDataClientPrxPtr, const ::Ice::Current&) override;
virtual void StopSending(::Ice::Int, const ::Ice::Current&) override;
void Scan(const std::string path, const Ice::Current &) override;
void Add(const std::string frontend, const Ice::Current &) override;
void Remove(const std::string frontend, const Ice::Current &) override;
::Ice::Int TunerCount(const Ice::Current &) override;
protected:
virtual TunerPtr openTuner(const std::filesystem::path &) const;
typedef boost::function<DVBSI::DeliveryPtr()> DeliveryProvider;
typedef boost::function<void(TunerPtr)> Target;
typedef std::shared_ptr<OpenTuner> OpenTunerPtr;
typedef std::map<Ice::Int, OpenTunerPtr> OpenDevices;
typedef std::map<Ice::Int, TunerPtr> BackgroundOperations;
DLL_PRIVATE TunerPtr getTuner();
DLL_PRIVATE TunerPtr getTuner(const DeliveryProvider &);
DLL_PRIVATE TunerPtr getTuner(const DVBSI::DeliveryPtr &);
DLL_PRIVATE void releaseTuner(const TunerPtr &);
DLL_PRIVATE void finiteTunerOperation(TunerPtr && tuner, const Target &);
OpenDevices openDevices;
BackgroundOperations backgroundOperations;
std::vector<std::filesystem::path> devices;
std::mutex lock;
IceTray::OptionsResolver<Options> options;
static IceTray::Logging::LoggerPtr logger;
};
}
#endif
|