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 : private:
28 : const AH::DotBarDisplayLEDs<NumLEDs> leds;
29 :
30 : /// @see doc/VU-LED-mapping.ods
31 : constexpr static uint8_t FLOOR_CORRECTION = 5;
32 : };
33 :
34 : template <uint8_t NumLEDs>
35 : class VULEDs : public GenericVU<VULEDsCallback<NumLEDs>> {
36 : public:
37 : VULEDs(const PinList<NumLEDs> &ledPins, uint8_t track,
38 : unsigned int decayTime = VUDecay::Default)
39 : : GenericVU<VULEDsCallback<NumLEDs>>{
40 : track,
41 : CHANNEL_1,
42 : decayTime,
43 : {ledPins},
44 : } {}
45 :
46 : VULEDs(const PinList<NumLEDs> &ledPins, uint8_t track,
47 : MIDICNChannel channelCN, unsigned int decayTime = VUDecay::Default)
48 : : GenericVU<VULEDsCallback<NumLEDs>>{
49 : track,
50 : channelCN,
51 : decayTime,
52 : {ledPins},
53 : } {}
54 : };
55 :
56 : namespace Bankable {
57 :
58 : template <uint8_t NumBanks, uint8_t NumLEDs>
59 1 : class VULEDs : public GenericVU<NumBanks, VULEDsCallback<NumLEDs>> {
60 : public:
61 : VULEDs(BankConfig<NumBanks> config, const PinList<NumLEDs> &ledPins,
62 : uint8_t track, unsigned int decayTime = VUDecay::Default)
63 : : GenericVU<NumBanks, VULEDsCallback<NumLEDs>>{
64 : config, track, CHANNEL_1, decayTime, {ledPins},
65 : } {}
66 :
67 1 : VULEDs(BankConfig<NumBanks> config, const PinList<NumLEDs> &ledPins,
68 : uint8_t track, MIDICNChannel channelCN,
69 : unsigned int decayTime = VUDecay::Default)
70 1 : : GenericVU<NumBanks, VULEDsCallback<NumLEDs>>{
71 1 : config, track, channelCN, decayTime, {ledPins},
72 2 : } {}
73 : };
74 :
75 : } // namespace Bankable
76 :
77 : } // namespace MCU
78 :
79 : END_CS_NAMESPACE
|