Control Surface  1.1.1
MIDI Control Surface library for Arduino
Bankable/Abstract/MIDIButtons.hpp
Go to the documentation of this file.
1 #pragma once
2 
3 #include <AH/Hardware/Button.hpp>
5 #include <Def/Def.hpp>
8 
10 
11 namespace Bankable {
12 
22 template <class Sender, uint8_t NUMBER_OF_BUTTONS>
24  protected:
34  const Sender &sender)
38 
39  public:
40  void begin() final override {
41  for (auto &button : buttons)
42  button.begin();
43  }
44  void update() final override {
46  for (auto &button : buttons) {
47  AH::Button::State state = button.update();
48  if (state == AH::Button::Falling) {
49  if (!activeButtons)
50  lock(); // Don't allow changing of the bank setting
51  MIDICNChannelAddress sendAddress = address + getAddressOffset();
52  activeButtons++;
53  sender.sendOn(sendAddress);
54  } else if (state == AH::Button::Rising) {
55  MIDICNChannelAddress sendAddress = address + getAddressOffset();
56  sender.sendOff(sendAddress);
57  activeButtons--;
58  if (!activeButtons)
59  unlock();
60  }
61  address += incrementAddress;
62  }
63  }
64 
65 #ifdef AH_INDIVIDUAL_BUTTON_INVERT
66  void invert() {
67  for (auto &button : buttons)
68  button.invert();
69  }
70 #endif
71 
72  AH::Button::State getButtonState(size_t index) const {
73  return buttons[index].getState();
74  }
75 
76  private:
80  uint8_t activeButtons = 0;
81 
82  public:
83  Sender sender;
84 };
85 
86 } // namespace Bankable
87 
AH::Updatable<>
BankableMIDIOutput.hpp
Bankable
A namespace for MIDI elements that can be added to a Bank, to change their address or channel.
Definition: BankAddresses.hpp:7
Button.hpp
AH::Button::Falling
Input went from high to low (1,0)
Definition: Button.hpp:56
BankableMIDIOutput_Base::lock
void lock()
Lock the bank setting.
Definition: BankableMIDIOutput.hpp:44
AH::Button::State
State
An enumeration of the different states a button can be in.
Definition: Button.hpp:53
Bankable::MIDIButtons::buttons
Array< AH::Button, NUMBER_OF_BUTTONS > buttons
Definition: Bankable/Abstract/MIDIButtons.hpp:77
BankableMIDIOutput_Base::unlock
void unlock()
Unlock the bank setting.
Definition: BankableMIDIOutput.hpp:55
MIDIOutputElement.hpp
Def.hpp
BEGIN_CS_NAMESPACE
#define BEGIN_CS_NAMESPACE
Definition: Settings/NamespaceSettings.hpp:9
Bankable::MIDIButtons::getButtonState
AH::Button::State getButtonState(size_t index) const
Definition: Bankable/Abstract/MIDIButtons.hpp:72
RelativeMIDICNChannelAddress
A class for saving an offset to a MIDI address.
Definition: MIDICNChannelAddress.hpp:58
Bankable::MIDIButtons::MIDIButtons
MIDIButtons(const OutputBankConfig &config, const Array< AH::Button, NUMBER_OF_BUTTONS > &buttons, const MIDICNChannelAddress &baseAddress, const RelativeMIDICNChannelAddress &incrementAddress, const Sender &sender)
Construct a new MIDIButtons.
Definition: Bankable/Abstract/MIDIButtons.hpp:30
Bankable::MIDIButtons::activeButtons
uint8_t activeButtons
Definition: Bankable/Abstract/MIDIButtons.hpp:80
END_CS_NAMESPACE
#define END_CS_NAMESPACE
Definition: Settings/NamespaceSettings.hpp:10
Array.hpp
MIDICNChannelAddress
A type-safe utility class for saving a MIDI address consisting of a 7-bit address,...
Definition: MIDICNChannelAddress.hpp:82
AH::Array
An array wrapper for easy copying, comparing, and iterating.
Definition: Array.hpp:36
AH::Button::Rising
Input went from low to high (0,1)
Definition: Button.hpp:57
Bankable::MIDIButtons::sender
Sender sender
Definition: Bankable/Abstract/MIDIButtons.hpp:83
Bankable::MIDIButtons::baseAddress
const MIDICNChannelAddress baseAddress
Definition: Bankable/Abstract/MIDIButtons.hpp:78
Bankable::MIDIButtons::begin
void begin() final override
Initialize this updatable.
Definition: Bankable/Abstract/MIDIButtons.hpp:40
BankableMIDIOutput::getAddressOffset
RelativeMIDICNChannelAddress getAddressOffset() const
Get the offset relative to the base address.
Definition: BankableMIDIOutput.hpp:111
OutputBankConfig
A struct for selecting the bank of BankableMIDIOutputs and the bank type.
Definition: BankConfig.hpp:50
Bankable::MIDIButtons::invert
void invert()
Definition: Bankable/Abstract/MIDIButtons.hpp:66
BankableMIDIOutput
A base class for all MIDIOutputElements that can be banked.
Definition: BankableMIDIOutput.hpp:84
Bankable::MIDIButtons::update
void update() final override
Update this updatable.
Definition: Bankable/Abstract/MIDIButtons.hpp:44
Bankable::MIDIButtons::incrementAddress
const RelativeMIDICNChannelAddress incrementAddress
Definition: Bankable/Abstract/MIDIButtons.hpp:79
Bankable::MIDIButtons
An abstract class for momentary push buttons that send MIDI events.
Definition: Bankable/Abstract/MIDIButtons.hpp:23