LCOV - code coverage report
Current view: top level - src/MIDI_Inputs/LEDs - NoteCCRangeLEDBar.hpp (source / functions) Hit Total Coverage
Test: 90a1b9beff85a60dc6ebcea034a947a845e56960 Lines: 17 17 100.0 %
Date: 2019-11-30 15:53:32 Functions: 6 7 85.7 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : #include <AH/Hardware/ExtendedInputOutput/ExtendedInputOutput.hpp>
       2             : #include <AH/Hardware/LEDs/DotBarDisplayLEDs.hpp>
       3             : #include <MIDI_Inputs/NoteCCRange.hpp>
       4             : 
       5             : BEGIN_CS_NAMESPACE
       6             : 
       7             : /**
       8             :  * @brief   Callback class that drives a LED dot/bar display based on a note or
       9             :  *          control change value.
      10             :  * 
      11             :  * @tparam  NumLEDs 
      12             :  *          The number of LEDs the display has.
      13             :  */
      14             : template <uint8_t NumLEDs>
      15           1 : class NoteCCLEDBarCallback : public SimpleNoteCCValueCallback {
      16             :   public:
      17           1 :     NoteCCLEDBarCallback(const AH::DotBarDisplayLEDs<NumLEDs> &leds)
      18           2 :         : leds(leds) {}
      19             : 
      20           1 :     void begin(const INoteCCValue &t) override {
      21           1 :         leds.begin();
      22           1 :         updateAll(t);
      23           1 :     }
      24             : 
      25           3 :     void update(const INoteCCValue &t, uint8_t) override {
      26           3 :         uint8_t value = t.getValue();
      27           3 :         leds.display(value / 127.0f);
      28           3 :     }
      29             : 
      30             :     /// @copydoc    AH::DotBarDisplayLEDs::dotMode
      31             :     void dotMode() { leds.dotMode(); }
      32             :     /// @copydoc    AH::DotBarDisplayLEDs::barMode
      33             :     void barMode() { leds.barMode(); }
      34             :     /// @copydoc    AH::DotBarDisplayLEDs::setMode
      35             :     void setMode(AH::DotBarMode mode) { leds.setMode(mode); }
      36             : 
      37             :   private:
      38             :     AH::DotBarDisplayLEDs<NumLEDs> leds;
      39             : };
      40             : 
      41             : // :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: //
      42             : 
      43             : /**
      44             :  * @brief   Class that listens for **Note** events and displays the velocity on
      45             :  *          an **LED Bar Graph**.
      46             :  * 
      47             :  * @tparam  NumLEDs 
      48             :  *          The number of LEDs the display has.
      49             :  * @ingroup midi-input-elements-leds
      50             :  */
      51             : template <uint8_t NumLEDs>
      52           1 : class NoteLEDBar : public GenericNoteCCRange<MIDIInputElementNote, 1,
      53             :                                              NoteCCLEDBarCallback<NumLEDs>> {
      54             :   public:
      55           1 :     NoteLEDBar(const AH::DotBarDisplayLEDs<NumLEDs> &leds,
      56             :                MIDICNChannelAddress address)
      57           1 :         : GenericNoteCCRange<MIDIInputElementNote, 1,
      58             :                              NoteCCLEDBarCallback<NumLEDs>>{
      59           1 :               address,
      60           1 :               {leds},
      61           2 :           } {}
      62             : 
      63             :     /// @copydoc    AH::DotBarDisplayLEDs::dotMode
      64             :     void dotMode() { this->callback.dotMode(); }
      65             :     /// @copydoc    AH::DotBarDisplayLEDs::barMode
      66             :     void barMode() { this->callback.barMode(); }
      67             :     /// @copydoc    AH::DotBarDisplayLEDs::setMode
      68             :     void setMode(AH::DotBarMode mode) { this->callback.setMode(mode); }
      69             : };
      70             : 
      71             : // :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: //
      72             : 
      73             : /**
      74             :  * @brief   Class that listens for **Control Change** events and displays the
      75             :  *          velocity on an **LED Bar Graph**.
      76             :  * 
      77             :  * @tparam  NumLEDs 
      78             :  *          The number of LEDs the display has.
      79             :  * @ingroup midi-input-elements-leds
      80             :  */
      81             : template <uint8_t NumLEDs>
      82             : class CCLEDBar : public GenericNoteCCRange<MIDIInputElementCC, 1,
      83             :                                            NoteCCLEDBarCallback<NumLEDs>> {
      84             :   public:
      85             :     CCLEDBar(const AH::DotBarDisplayLEDs<NumLEDs> &leds,
      86             :              MIDICNChannelAddress address)
      87             :         : GenericNoteCCRange<MIDIInputElementCC, 1,
      88             :                              NoteCCLEDBarCallback<NumLEDs>>{
      89             :               address,
      90             :               {leds},
      91             :           } {}
      92             : 
      93             :     /// @copydoc    AH::DotBarDisplayLEDs::dotMode
      94             :     void dotMode() { this->callback.dotMode(); }
      95             :     /// @copydoc    AH::DotBarDisplayLEDs::barMode
      96             :     void barMode() { this->callback.barMode(); }
      97             :     /// @copydoc    AH::DotBarDisplayLEDs::setMode
      98             :     void setMode(AH::DotBarMode mode) { this->callback.setMode(mode); }
      99             : };
     100             : 
     101             : // :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: //
     102             : 
     103             : namespace Bankable {
     104             : 
     105             : // :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: //
     106             : 
     107             : /**
     108             :  * @brief   Class that listens for **Note** events and displays the velocity on
     109             :  *          an **LED Bar Graph**.
     110             :  * 
     111             :  * This version can be banked.
     112             :  * 
     113             :  * @tparam  NumLEDs 
     114             :  *          The number of LEDs the display has.
     115             :  * @ingroup midi-input-elements-leds
     116             :  */
     117             : template <uint8_t BankSize, uint8_t NumLEDs>
     118             : class NoteLEDBar : public GenericNoteCCRange<MIDIInputElementNote, 1, BankSize,
     119             :                                              NoteCCLEDBarCallback<NumLEDs>> {
     120             :   public:
     121             :     NoteLEDBar(const BankConfig<BankSize> &config,
     122             :                const AH::DotBarDisplayLEDs<NumLEDs> &leds,
     123             :                const MIDICNChannelAddress &address)
     124             :         : GenericNoteCCRange<MIDIInputElementNote, 1, BankSize,
     125             :                              NoteCCLEDBarCallback<NumLEDs>>{
     126             :               config,
     127             :               address,
     128             :               {leds},
     129             :           } {}
     130             : 
     131             :     /// @copydoc    AH::DotBarDisplayLEDs::dotMode
     132             :     void dotMode() { this->callback.dotMode(); }
     133             :     /// @copydoc    AH::DotBarDisplayLEDs::barMode
     134             :     void barMode() { this->callback.barMode(); }
     135             :     /// @copydoc    AH::DotBarDisplayLEDs::setMode
     136             :     void setMode(AH::DotBarMode mode) { this->callback.setMode(mode); }
     137             : };
     138             : 
     139             : // :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: //
     140             : 
     141             : /**
     142             :  * @brief   Class that listens for **Control Change** events and displays the
     143             :  *          velocity on an **LED Bar Graph**.
     144             :  * 
     145             :  * This version can be banked.
     146             :  * 
     147             :  * @tparam  NumLEDs 
     148             :  *          The number of LEDs the display has.
     149             :  * @ingroup midi-input-elements-leds
     150             :  */
     151             : template <uint8_t BankSize, uint8_t NumLEDs>
     152             : class CCLEDBar : public GenericNoteCCRange<MIDIInputElementCC, 1, BankSize,
     153             :                                            NoteCCLEDBarCallback<NumLEDs>> {
     154             :   public:
     155             :     CCLEDBar(const BankConfig<BankSize> &config,
     156             :              const AH::DotBarDisplayLEDs<NumLEDs> &leds,
     157             :              const MIDICNChannelAddress &address)
     158             :         : GenericNoteCCRange<MIDIInputElementCC, 1, BankSize,
     159             :                              NoteCCLEDBarCallback<NumLEDs>>{
     160             :               config,
     161             :               address,
     162             :               {leds},
     163             :           } {}
     164             : 
     165             :     /// @copydoc    AH::DotBarDisplayLEDs::dotMode
     166             :     void dotMode() { this->callback.dotMode(); }
     167             :     /// @copydoc    AH::DotBarDisplayLEDs::barMode
     168             :     void barMode() { this->callback.barMode(); }
     169             :     /// @copydoc    AH::DotBarDisplayLEDs::setMode
     170             :     void setMode(AH::DotBarMode mode) { this->callback.setMode(mode); }
     171             : };
     172             : 
     173             : } // namespace Bankable
     174             : 
     175             : END_CS_NAMESPACE

Generated by: LCOV version 1.14-5-g4ff2ed6