#pragma once #include "RGBLed.h" class RCOutputRGBLed: public RGBLed { public: RCOutputRGBLed(uint8_t red_channel, uint8_t green_channel, uint8_t blue_channel, uint8_t led_off, uint8_t led_full, uint8_t led_medium, uint8_t led_dim); RCOutputRGBLed(uint8_t red_channel, uint8_t green_channel, uint8_t blue_channel); protected: bool hw_init() override; virtual bool hw_set_rgb(uint8_t red, uint8_t green, uint8_t blue) override; virtual uint16_t get_duty_cycle_for_color(const uint8_t color, const uint16_t usec_period) const; private: uint8_t _red_channel; uint8_t _green_channel; uint8_t _blue_channel; }; class RCOutputRGBLedInverted : public RCOutputRGBLed { public: RCOutputRGBLedInverted(uint8_t red_channel, uint8_t green_channel, uint8_t blue_channel) : RCOutputRGBLed(red_channel, green_channel, blue_channel) { } protected: virtual uint16_t get_duty_cycle_for_color(const uint8_t color, const uint16_t usec_period) const override; }; class RCOutputRGBLedOff : public RCOutputRGBLed { public: RCOutputRGBLedOff(uint8_t red_channel, uint8_t green_channel, uint8_t blue_channel, uint8_t led_off) : RCOutputRGBLed(red_channel, green_channel, blue_channel, led_off, led_off, led_off, led_off) { } /* Override the hw_set_rgb method to turn leds off regardless of the * values passed */ bool hw_set_rgb(uint8_t red, uint8_t green, uint8_t blue) override { return RCOutputRGBLed::hw_set_rgb(_led_off, _led_off, _led_off); } };