diff options
Diffstat (limited to 'daemon/Driver.h')
-rw-r--r-- | daemon/Driver.h | 76 |
1 files changed, 73 insertions, 3 deletions
diff --git a/daemon/Driver.h b/daemon/Driver.h index e5ed7b6..72870e3 100644 --- a/daemon/Driver.h +++ b/daemon/Driver.h @@ -9,10 +9,36 @@ #ifndef DRIVER_H #define DRIVER_H +#include <stdint.h> + #include "mxml/mxml.h" +class Buffer; class Counter; +class DriverCounter { +public: + DriverCounter(DriverCounter *const next, const char *const name); + virtual ~DriverCounter(); + + DriverCounter *getNext() const { return mNext; } + const char *getName() const { return mName; } + int getKey() const { return mKey; } + bool isEnabled() const { return mEnabled; } + void setEnabled(const bool enabled) { mEnabled = enabled; } + virtual int64_t read() { return -1; } + +private: + DriverCounter *const mNext; + const char *const mName; + const int mKey; + bool mEnabled; + + // Intentionally unimplemented + DriverCounter(const DriverCounter &); + DriverCounter &operator=(const DriverCounter &); +}; + class Driver { public: static Driver *getHead() { return head; } @@ -26,15 +52,17 @@ public: // Enables and prepares the counter for capture virtual void setupCounter(Counter &counter) = 0; + // Performs any actions needed for setup or based on eventsXML + virtual void readEvents(mxml_node_t *const) {} // Emits available counters - virtual int writeCounters(mxml_node_t *root) const = 0; + virtual int writeCounters(mxml_node_t *const root) const = 0; // Emits possible dynamically generated events/counters - virtual void writeEvents(mxml_node_t *) const {} + virtual void writeEvents(mxml_node_t *const) const {} Driver *getNext() const { return next; } protected: - Driver (); + Driver(); private: static Driver *head; @@ -45,4 +73,46 @@ private: Driver &operator=(const Driver &); }; +class SimpleDriver : public Driver { +public: + virtual ~SimpleDriver(); + + bool claimCounter(const Counter &counter) const; + bool countersEnabled() const; + void resetCounters(); + void setupCounter(Counter &counter); + int writeCounters(mxml_node_t *root) const; + +protected: + SimpleDriver() : mCounters(NULL) {} + + DriverCounter *getCounters() const { return mCounters; } + void setCounters(DriverCounter *const counter) { mCounters = counter; } + + DriverCounter *findCounter(const Counter &counter) const; + +private: + DriverCounter *mCounters; + + // Intentionally unimplemented + SimpleDriver(const SimpleDriver &); + SimpleDriver &operator=(const SimpleDriver &); +}; + +class PolledDriver : public SimpleDriver { +public: + virtual ~PolledDriver(); + + virtual void start() {} + virtual void read(Buffer *const buffer); + +protected: + PolledDriver() {} + +private: + // Intentionally unimplemented + PolledDriver(const PolledDriver &); + PolledDriver &operator=(const PolledDriver &); +}; + #endif // DRIVER_H |