#pragma once #include #include // STL incldues #include #include #include #include // Utility includes #include #include #include #include #include #include class LedDevice; typedef LedDevice* ( *LedDeviceCreateFuncType ) ( const Json::Value& ); typedef std::map LedDeviceRegistry; /// /// Interface (pure virtual base class) for LedDevices. /// class LedDevice : public QObject { Q_OBJECT public: LedDevice(); /// /// Empty virtual destructor for pure virtual base class /// virtual ~LedDevice() {} /// Switch the leds off virtual int switchOff(); virtual int setLedValues(const std::vector& ledValues); /// /// Opens and configures the output device /// /// @return Zero on succes else negative /// virtual int open(); static int addToDeviceMap(std::string name, LedDeviceCreateFuncType funcPtr); static const LedDeviceRegistry& getDeviceMap(); static void setActiveDevice(std::string dev); static std::string activeDevice() { return _activeDevice; } static Json::Value getLedDeviceSchemas(); static void setLedCount(int ledCount); static int getLedCount() { return _ledCount; } protected: /// /// Writes the RGB-Color values to the leds. /// /// @param[in] ledValues The RGB-color per led /// /// @return Zero on success else negative /// virtual int write(const std::vector& ledValues) = 0; /// The common Logger instance for all LedDevices Logger * _log; /// The buffer containing the packed RGB values std::vector _ledBuffer; bool _deviceReady; static std::string _activeDevice; static LedDeviceRegistry _ledDeviceMap; static int _ledCount; static int _ledRGBCount; static int _ledRGBWCount; };