summaryrefslogtreecommitdiff
path: root/monitor.h
diff options
context:
space:
mode:
Diffstat (limited to 'monitor.h')
-rw-r--r--monitor.h58
1 files changed, 58 insertions, 0 deletions
diff --git a/monitor.h b/monitor.h
new file mode 100644
index 0000000..659e504
--- /dev/null
+++ b/monitor.h
@@ -0,0 +1,58 @@
+#ifndef __DYNAMITEMONITOR_H
+#define __DYNAMITEMONITOR_H
+
+#include <vdr/thread.h>
+#include <vdr/tools.h>
+#include "udev.h"
+
+#define MAXUDEVMONITORS 10
+
+class cUdevFilter;
+
+class cUdevMonitor : public cThread {
+private:
+ static cMutex mutexMonitors;
+ static int numMonitors;
+ static cUdevMonitor *monitors[MAXUDEVMONITORS];
+
+ struct udev_monitor *monitor;
+ int index;
+ cString subsystem;
+ cMutex filtersMutex;
+ cList<cUdevFilter> filters;
+
+ cUdevMonitor(const char *Subsystem);
+protected:
+ virtual void Action(void);
+public:
+ static cUdevMonitor *Get(const char *Subsystem);
+ static bool AddFilter(const char *Subsystem, cUdevFilter *Filter);
+ static void ShutdownAllMonitors(void);
+
+ virtual ~cUdevMonitor(void);
+ cString GetSubsystem() const { return subsystem; };
+ bool AddFilter(cUdevFilter *Filter);
+ bool DelFilter(cUdevFilter *Filter);
+ };
+
+class cUdevFilter : public cListObject {
+friend class cUdevMonitor;
+protected:
+ const cUdevMonitor *monitor;
+ virtual void Process(cUdevDevice &Device) = 0;
+public:
+ cUdevFilter(void);
+ virtual ~cUdevFilter(void);
+ };
+
+class cUdevLogFilter : public cUdevFilter {
+protected:
+ virtual void Process(cUdevDevice &Device);
+ };
+
+class cUdevDvbFilter : public cUdevFilter {
+protected:
+ virtual void Process(cUdevDevice &Device);
+ };
+
+#endif // __DYNAMITEMONITOR_H