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 / 128.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 : MIDIAddress 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 : MIDIAddress 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(BankConfig<BankSize> config, 122 : const AH::DotBarDisplayLEDs<NumLEDs> &leds, 123 : const MIDIAddress &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(BankConfig<BankSize> config, 156 : const AH::DotBarDisplayLEDs<NumLEDs> &leds, 157 : const MIDIAddress &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