Line data Source code
1 : #pragma once
2 :
3 : #include "Selector.hpp"
4 : #include <AH/Hardware/Button.hpp>
5 :
6 : BEGIN_CS_NAMESPACE
7 :
8 : template <class Callback = EmptySelectorCallback>
9 : class GenericSwitchSelector : public GenericSelector<2, Callback> {
10 : using Parent = GenericSelector<2, Callback>;
11 :
12 : public:
13 2 : GenericSwitchSelector(Selectable<2> &selectable, const Callback &callback,
14 : const AH::Button &button)
15 2 : : GenericSelector<2, Callback>(selectable, callback), button(button) {}
16 :
17 0 : void begin() override {
18 0 : Parent::begin();
19 0 : button.begin();
20 0 : }
21 :
22 0 : void update() override {
23 0 : Parent::update();
24 0 : AH::Button::State state = button.update();
25 0 : if (state == AH::Button::Falling)
26 0 : this->set(1);
27 0 : else if (state == AH::Button::Rising)
28 0 : this->set(0);
29 0 : }
30 :
31 : AH::Button::State getButtonState() const { return button.getState(); }
32 :
33 : /// @see @ref AH::Button::invert()
34 : void invert() { button.invert(); }
35 :
36 : private:
37 : AH::Button button;
38 : };
39 :
40 : /**
41 : * @brief Selector that selects one of two settings, based on the state of a
42 : * toggle or momentary switch.
43 : *
44 : * @htmlonly
45 : * <object type="image/svg+xml" data="../../selector-one-toggle-switch-LED.svg"></object>
46 : * @endhtmlonly
47 : *
48 : * @ingroup Selectors
49 : */
50 : class SwitchSelector : public GenericSwitchSelector<> {
51 : public:
52 1 : SwitchSelector(Selectable<2> &selectable, const AH::Button &button)
53 1 : : GenericSwitchSelector<> {
54 : selectable,
55 : {},
56 : button,
57 1 : } {}
58 : };
59 :
60 : END_CS_NAMESPACE
|