cs-midi/MIDI_Outputs/Abstract/MIDIButtonLatching.hpp

39 lines
994 B
C++

#pragma once
#include <AH/Hardware/Button.hpp>
#include <Def/Def.hpp>
#include <MIDI_Outputs/Abstract/MIDIOutputElement.hpp>
BEGIN_CS_NAMESPACE
template <class Sender>
class MIDIButtonLatching : public MIDIOutputElement {
protected:
MIDIButtonLatching(pin_t pin, MIDIAddress address, const Sender &sender)
: button(pin), address(address), sender(sender) {}
public:
void begin() override { button.begin(); }
void update() override {
AH::Button::State state = button.update();
if (state == AH::Button::Falling || state == AH::Button::Rising) {
sender.sendOn(address);
sender.sendOff(address);
}
}
AH::Button::State getButtonState() const { return button.getState(); }
MIDIAddress getAddress() const { return this->address; }
void setAddress(MIDIAddress address) { this->address = address; }
private:
AH::Button button;
MIDIAddress address;
public:
Sender sender;
};
END_CS_NAMESPACE