LCOV - code coverage report
Current view: top level - src/MIDI_Inputs/LEDs/MCU - VULEDs.hpp (source / functions) Hit Total Coverage
Test: e224b347cd670555e44f06608ac41bd1ace9d9d8 Lines: 14 14 100.0 %
Date: 2020-09-08 17:44:46 Functions: 6 7 85.7 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : #pragma once
       2             : 
       3             : #include <AH/Hardware/LEDs/DotBarDisplayLEDs.hpp>
       4             : #include <MIDI_Inputs/MCU/VU.hpp>
       5             : 
       6             : BEGIN_CS_NAMESPACE
       7             : 
       8             : namespace MCU {
       9             : 
      10             : template <uint8_t NumLEDs>
      11             : class VULEDsCallback {
      12             :   public:
      13           1 :     VULEDsCallback(const AH::DotBarDisplayLEDs<NumLEDs> &leds) : leds(leds) {}
      14             : 
      15             :     template <class T>
      16           1 :     void begin(T &) {
      17           1 :         leds.begin();
      18           1 :     }
      19             : 
      20             :     template <class T>
      21           4 :     void update(T &t) {
      22           4 :         uint8_t value = t.getValue();                      // value in [0, 12]
      23           4 :         value = (value * NumLEDs + FLOOR_CORRECTION) / 12; // value in [0, N]
      24           4 :         leds.display(value);
      25           4 :     }
      26             : 
      27             :     /// @copydoc    AH::DotBarDisplayLEDs::getMode
      28             :     AH::DotBarMode getMode() const { return this->leds.getMode(); }
      29             :     /// @copydoc    AH::DotBarDisplayLEDs::setMode
      30             :     void setMode(AH::DotBarMode mode) { this->leds.setMode(mode); }
      31             :     /// @copydoc    AH::DotBarDisplayLEDs::dotMode
      32             :     void dotMode() { this->leds.dotMode(); }
      33             :     /// @copydoc    AH::DotBarDisplayLEDs::barMode
      34             :     void barMode() { this->leds.barMode(); }
      35             :     /// @copydoc    AH::DotBarDisplayLEDs::toggleMode
      36             :     void toggleMode() { this->leds.toggleMode(); }
      37             : 
      38             :   private:
      39             :     AH::DotBarDisplayLEDs<NumLEDs> leds;
      40             : 
      41             :     /// @see    doc/VU-LED-mapping.ods
      42             :     constexpr static uint8_t FLOOR_CORRECTION = 5;
      43             : };
      44             : 
      45             : template <uint8_t NumLEDs>
      46             : class VULEDs : public GenericVU<VULEDsCallback<NumLEDs>> {
      47             :   public:
      48             :     VULEDs(const PinList<NumLEDs> &ledPins, uint8_t track,
      49             :            unsigned int decayTime = VUDecay::Default)
      50             :         : GenericVU<VULEDsCallback<NumLEDs>>{
      51             :               track,
      52             :               CHANNEL_1,
      53             :               decayTime,
      54             :               {ledPins},
      55             :           } {}
      56             : 
      57             :     VULEDs(const PinList<NumLEDs> &ledPins, uint8_t track,
      58             :            MIDIChannelCN channelCN, unsigned int decayTime = VUDecay::Default)
      59             :         : GenericVU<VULEDsCallback<NumLEDs>>{
      60             :               track,
      61             :               channelCN,
      62             :               decayTime,
      63             :               {ledPins},
      64             :           } {}
      65             : 
      66             :     /// @copydoc    AH::DotBarDisplayLEDs::getMode
      67             :     AH::DotBarMode getMode() const { return this->callback.getMode(); }
      68             :     /// @copydoc    AH::DotBarDisplayLEDs::setMode
      69             :     void setMode(AH::DotBarMode mode) { this->callback.setMode(mode); }
      70             :     /// @copydoc    AH::DotBarDisplayLEDs::dotMode
      71             :     void dotMode() { this->callback.dotMode(); }
      72             :     /// @copydoc    AH::DotBarDisplayLEDs::barMode
      73             :     void barMode() { this->callback.barMode(); }
      74             :     /// @copydoc    AH::DotBarDisplayLEDs::toggleMode
      75             :     void toggleMode() { this->callback.toggleMode(); }
      76             : };
      77             : 
      78             : namespace Bankable {
      79             : 
      80             : template <uint8_t NumBanks, uint8_t NumLEDs>
      81           1 : class VULEDs : public GenericVU<NumBanks, VULEDsCallback<NumLEDs>> {
      82             :   public:
      83             :     VULEDs(BankConfig<NumBanks> config, const PinList<NumLEDs> &ledPins,
      84             :            uint8_t track, unsigned int decayTime = VUDecay::Default)
      85             :         : GenericVU<NumBanks, VULEDsCallback<NumLEDs>>{
      86             :               config, track, CHANNEL_1, decayTime, {ledPins},
      87             :           } {}
      88             : 
      89           1 :     VULEDs(BankConfig<NumBanks> config, const PinList<NumLEDs> &ledPins,
      90             :            uint8_t track, MIDIChannelCN channelCN,
      91             :            unsigned int decayTime = VUDecay::Default)
      92           1 :         : GenericVU<NumBanks, VULEDsCallback<NumLEDs>>{
      93           1 :               config, track, channelCN, decayTime, {ledPins},
      94           2 :           } {}
      95             : 
      96             :     /// @copydoc    AH::DotBarDisplayLEDs::getMode
      97             :     AH::DotBarMode getMode() const { return this->callback.getMode(); }
      98             :     /// @copydoc    AH::DotBarDisplayLEDs::setMode
      99             :     void setMode(AH::DotBarMode mode) { this->callback.setMode(mode); }
     100             :     /// @copydoc    AH::DotBarDisplayLEDs::dotMode
     101             :     void dotMode() { this->callback.dotMode(); }
     102             :     /// @copydoc    AH::DotBarDisplayLEDs::barMode
     103             :     void barMode() { this->callback.barMode(); }
     104             :     /// @copydoc    AH::DotBarDisplayLEDs::toggleMode
     105             :     void toggleMode() { this->callback.toggleMode(); }
     106             : };
     107             : 
     108             : } // namespace Bankable
     109             : 
     110             : } // namespace MCU
     111             : 
     112             : END_CS_NAMESPACE

Generated by: LCOV version 1.14-6-g40580cd