Line data Source code
1 : #pragma once
2 :
3 : #include <AH/Hardware/ExtendedInputOutput/ExtendedInputOutput.hpp>
4 : #include <Def/Def.hpp>
5 : #include <Selectors/Selector.hpp>
6 :
7 : BEGIN_CS_NAMESPACE
8 :
9 : template <setting_t N>
10 : class SelectorLEDsCallback {
11 : public:
12 5 : SelectorLEDsCallback(const PinList<N> &ledPins) : ledPins{ledPins} {}
13 :
14 : /// Initialize.
15 0 : void begin() {
16 0 : for (pin_t pin : ledPins) {
17 0 : AH::ExtIO::pinMode(pin, OUTPUT);
18 0 : AH::ExtIO::digitalWrite(pin, LOW);
19 0 : }
20 0 : }
21 :
22 : /// Refresh, called periodically.
23 0 : void update() {}
24 :
25 : /// Called when the setting changes.
26 0 : void update(setting_t oldSetting, setting_t newSetting) {
27 0 : AH::ExtIO::digitalWrite(ledPins[oldSetting], LOW);
28 0 : AH::ExtIO::digitalWrite(ledPins[newSetting], HIGH);
29 0 : }
30 :
31 : private:
32 : PinList<N> ledPins;
33 : };
34 :
35 : class SelectorSingleLEDCallback {
36 : public:
37 1 : SelectorSingleLEDCallback(pin_t ledPin) : ledPin{ledPin} {}
38 :
39 : /// Initialize.
40 0 : void begin() { AH::ExtIO::pinMode(ledPin, OUTPUT); }
41 :
42 : /// Refresh, called periodically.
43 0 : void update() {}
44 :
45 : /// Called when the setting changes.
46 0 : void update(setting_t oldSetting, setting_t newSetting) {
47 : (void)oldSetting;
48 0 : AH::ExtIO::digitalWrite(ledPin, newSetting == 0 ? LOW : HIGH);
49 0 : }
50 :
51 : private:
52 : pin_t ledPin;
53 : };
54 :
55 : END_CS_NAMESPACE
56 :
57 : // -------------------------------------------------------------------------- //
58 :
59 : #if defined(Encoder_h_) || defined(IDE)
60 : #include <Selectors/EncoderSelector.hpp>
61 :
62 : BEGIN_CS_NAMESPACE
63 :
64 : /**
65 : * @brief @copybrief EncoderSelector
66 : * This version displays the setting using LEDs.
67 : * @details @copydetails EncoderSelector
68 : * @ingroup SelectorsLEDs
69 : */
70 : template <setting_t N>
71 1 : class EncoderSelectorLEDs
72 : : public GenericEncoderSelector<N, SelectorLEDsCallback<N>> {
73 : public:
74 1 : EncoderSelectorLEDs(Selectable<N> &selectable,
75 : const EncoderSwitchPinList &pins,
76 : const PinList<N> &ledPins, int8_t pulsesPerStep = 4,
77 : Wrap wrap = Wrap::Wrap)
78 1 : : GenericEncoderSelector<N, SelectorLEDsCallback<N>>{
79 1 : selectable, {ledPins}, pins, pulsesPerStep, wrap,
80 2 : } {}
81 : };
82 :
83 : END_CS_NAMESPACE
84 : #endif
85 :
86 : // -------------------------------------------------------------------------- //
87 :
88 : #include <Selectors/IncrementDecrementSelector.hpp>
89 :
90 : BEGIN_CS_NAMESPACE
91 :
92 : /**
93 : * @brief @copybrief IncrementDecrementSelector
94 : * This version displays the setting using LEDs.
95 : * @details @copydetails IncrementDecrementSelector
96 : * @ingroup SelectorsLEDs
97 : */
98 : template <setting_t N>
99 1 : class IncrementDecrementSelectorLEDs
100 : : public GenericIncrementDecrementSelector<N, SelectorLEDsCallback<N>> {
101 : public:
102 1 : IncrementDecrementSelectorLEDs(Selectable<N> &selectable,
103 : const AH::IncrementDecrementButtons &buttons,
104 : const PinList<N> &ledPins,
105 : Wrap wrap = Wrap::Wrap)
106 1 : : GenericIncrementDecrementSelector<N, SelectorLEDsCallback<N>>{
107 1 : selectable,
108 1 : {ledPins},
109 1 : buttons,
110 1 : wrap,
111 2 : } {}
112 : };
113 :
114 : END_CS_NAMESPACE
115 :
116 : // -------------------------------------------------------------------------- //
117 :
118 : #include <Selectors/IncrementSelector.hpp>
119 :
120 : BEGIN_CS_NAMESPACE
121 :
122 : /**
123 : * @brief @copybrief IncrementSelector
124 : * This version displays the setting using LEDs.
125 : * @details @copydetails IncrementSelector
126 : * @ingroup SelectorsLEDs
127 : */
128 : template <setting_t N>
129 1 : class IncrementSelectorLEDs
130 : : public GenericIncrementSelector<N, SelectorLEDsCallback<N>> {
131 : public:
132 1 : IncrementSelectorLEDs(Selectable<N> &selectable, const AH::Button &button,
133 : const PinList<N> &ledPins)
134 1 : : GenericIncrementSelector<N, SelectorLEDsCallback<N>>{
135 2 : selectable, {ledPins}, button} {}
136 : };
137 :
138 : END_CS_NAMESPACE
139 :
140 : // -------------------------------------------------------------------------- //
141 :
142 : #include <Selectors/ManyButtonsSelector.hpp>
143 :
144 : BEGIN_CS_NAMESPACE
145 :
146 : /**
147 : * @brief @copybrief ManyButtonsSelector
148 : * This version displays the setting using LEDs.
149 : * @details @copydetails ManyButtonsSelector
150 : * @ingroup SelectorsLEDs
151 : */
152 : template <setting_t N>
153 1 : class ManyButtonsSelectorLEDs
154 : : public GenericManyButtonsSelector<N, SelectorLEDsCallback<N>> {
155 : public:
156 1 : ManyButtonsSelectorLEDs(Selectable<N> &selectable,
157 : const PinList<N> &buttonPins,
158 : const PinList<N> &ledPins)
159 1 : : GenericManyButtonsSelector<N, SelectorLEDsCallback<N>>{
160 1 : selectable,
161 1 : {ledPins},
162 1 : buttonPins,
163 2 : } {}
164 : };
165 :
166 : END_CS_NAMESPACE
167 :
168 : // -------------------------------------------------------------------------- //
169 :
170 : #include <Selectors/ProgramChangeSelector.hpp>
171 :
172 : BEGIN_CS_NAMESPACE
173 :
174 : /**
175 : * @brief @copybrief ProgramChangeSelector
176 : * This version displays the setting using LEDs.
177 : * @details @copydetails ProgramChangeSelector
178 : * @ingroup SelectorsLEDs
179 : */
180 : template <setting_t N>
181 1 : class ProgramChangeSelectorLEDs
182 : : public GenericProgramChangeSelector<N, SelectorLEDsCallback<N>> {
183 : public:
184 1 : ProgramChangeSelectorLEDs(Selectable<N> &selectable,
185 : const MIDIChannelCN &address,
186 : const PinList<N> &ledPins)
187 1 : : GenericProgramChangeSelector<N, SelectorLEDsCallback<N>>{
188 1 : selectable,
189 1 : {ledPins},
190 1 : address,
191 2 : } {}
192 : };
193 :
194 : END_CS_NAMESPACE
195 :
196 : // -------------------------------------------------------------------------- //
197 :
198 : #include <Selectors/SwitchSelector.hpp>
199 :
200 : BEGIN_CS_NAMESPACE
201 :
202 : /**
203 : * @brief @copybrief SwitchSelector
204 : * This version displays the setting using LEDs.
205 : * @details @copydetails SwitchSelector
206 : * @ingroup SelectorsLEDs
207 : */
208 1 : class SwitchSelectorLED
209 : : public GenericSwitchSelector<SelectorSingleLEDCallback> {
210 : public:
211 1 : SwitchSelectorLED(Selectable<2> &selectable, const AH::Button &button,
212 : pin_t ledPin)
213 1 : : GenericSwitchSelector<SelectorSingleLEDCallback>{
214 1 : selectable,
215 1 : {ledPin},
216 1 : button,
217 2 : } {}
218 : };
219 :
220 : END_CS_NAMESPACE
|