#pragma once // stl includes #include // QT includes #include #include // hyperion-utils includes #include // Hyperion includes #include #include #include // Forward class declaration class HsvTransform; class ColorTransform; class Hyperion : public QObject { Q_OBJECT public: typedef PriorityMuxer::InputInfo InputInfo; enum Color { RED, GREEN, BLUE, INVALID }; enum Transform { SATURATION_GAIN, VALUE_GAIN, THRESHOLD, GAMMA, BLACKLEVEL, WHITELEVEL }; static LedString createLedString(const Json::Value& ledsConfig); static Json::Value loadConfig(const std::string& configFile); Hyperion(const std::string& configFile); Hyperion(const Json::Value& jsonConfig); ~Hyperion(); unsigned getLedCount() const; void setColor(int priority, RgbColor &ledColor, const int timeout_ms); void setColors(int priority, std::vector &ledColors, const int timeout_ms); void setTransform(Transform transform, Color color, double value); void clear(int priority); void clearall(); double getTransform(Transform transform, Color color) const; QList getActivePriorities() const; const InputInfo& getPriorityInfo(const int priority) const; private slots: void update(); private: void applyTransform(std::vector& colors) const; LedString _ledString; PriorityMuxer _muxer; HsvTransform * _hsvTransform; ColorTransform * _redTransform; ColorTransform * _greenTransform; ColorTransform * _blueTransform; LedDevice* _device; QTimer _timer; };