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