Control Surface  1.2.0
MIDI Control Surface library for Arduino
BankableAddresses.hpp
Go to the documentation of this file.
1 /* ✔ */
2 
3 #pragma once
4 
5 #include "Bank.hpp"
6 #include "BankConfig.hpp"
7 #include <Def/MIDIAddress.hpp>
8 
10 
12  protected:
20 
21  public:
27 
36  }
37 
44  void lock() {
45  if (lockedSetting == UNLOCKED)
47  }
48 
56 
57  protected:
58  const OutputBank &bank;
59 
60  private:
61  constexpr static setting_t UNLOCKED = NO_SETTING;
63 };
64 
82  public:
93 
103  : OutputBankableMIDIAddress(config.bank, config.type) {}
104 
109  int8_t offset = getSelection() * bank.getTracksPerBank();
110  switch (type) {
111  case CHANGE_ADDRESS: return {offset, 0, 0};
112  case CHANGE_CHANNEL: return {0, offset, 0};
113  case CHANGE_CABLENB: return {0, 0, offset};
114  default: return {};
115  }
116  }
117 
118  private:
119  const BankType type;
120 };
121 
141  public:
150  template <uint8_t NumBanks>
153 };
154 
OutputBank::getTracksPerBank
uint8_t getTracksPerBank() const
Get the number of tracks per bank.
Definition: Bank.hpp:53
OutputBank
A class for changing the address of BankableMIDIOutputs.
Definition: Bank.hpp:18
ManyAddresses_Base
A base class for all MIDIOutputElements that can have one of many addresses.
Definition: BankableAddresses.hpp:140
Bank
A class that groups Bankable BankableMIDIOutputs and BankableMIDIInputs, and allows the user to chang...
Definition: Bank.hpp:75
MIDIAddress.hpp
OutputBankableMIDIAddress_Base::getSelection
setting_t getSelection() const
Get the bank setting.
Definition: BankableAddresses.hpp:34
BankConfig.hpp
OutputBankableMIDIAddress_Base::getRawBankSetting
setting_t getRawBankSetting() const
Get the actual bank setting (no matter whether the element is locked or not).
Definition: BankableAddresses.hpp:26
OutputBankableMIDIAddress::OutputBankableMIDIAddress
OutputBankableMIDIAddress(BaseOutputBankConfig config)
Create a new OutputBankableMIDIAddress object.
Definition: BankableAddresses.hpp:102
RelativeMIDIAddress
A class for saving an offset to a MIDI address.
Definition: MIDIAddress.hpp:64
BEGIN_CS_NAMESPACE
#define BEGIN_CS_NAMESPACE
Definition: Settings/NamespaceSettings.hpp:9
OutputBankableMIDIAddress
A base class for all MIDIOutputElements that can be banked.
Definition: BankableAddresses.hpp:81
END_CS_NAMESPACE
#define END_CS_NAMESPACE
Definition: Settings/NamespaceSettings.hpp:10
OutputBankableMIDIAddress_Base::bank
const OutputBank & bank
Definition: BankableAddresses.hpp:58
OutputBankableMIDIAddress::OutputBankableMIDIAddress
OutputBankableMIDIAddress(const OutputBank &bank, BankType type)
Create a new OutputBankableMIDIAddress object.
Definition: BankableAddresses.hpp:91
OutputBankableMIDIAddress_Base
Definition: BankableAddresses.hpp:11
NO_SETTING
constexpr setting_t NO_SETTING
A special setting that indicates an unused or invalid setting.
Definition: Def.hpp:52
CHANGE_CHANNEL
@ CHANGE_CHANNEL
Change the offset of the channel number of the element.
Definition: BankConfig.hpp:21
OutputBankableMIDIAddress::type
const BankType type
Definition: BankableAddresses.hpp:119
OutputBankableMIDIAddress_Base::lock
void lock()
Lock the bank setting.
Definition: BankableAddresses.hpp:44
OutputBank::getSelection
virtual setting_t getSelection() const
Get the current bank setting.
Definition: Bank.hpp:47
CHANGE_CABLENB
@ CHANGE_CABLENB
Change the offset of the cable number of the element.
Definition: BankConfig.hpp:25
OutputBankableMIDIAddress::getAddressOffset
RelativeMIDIAddress getAddressOffset() const
Get the offset relative to the base address.
Definition: BankableAddresses.hpp:108
BankType
BankType
An enumeration of the different bank types.
Definition: BankConfig.hpp:12
BaseOutputBankConfig
A struct for selecting the bank of BankableMIDIOutputs and the bank type.
Definition: BankConfig.hpp:60
ManyAddresses_Base::ManyAddresses_Base
ManyAddresses_Base(const Bank< NumBanks > &bank)
Constructor.
Definition: BankableAddresses.hpp:151
OutputBankableMIDIAddress_Base::UNLOCKED
constexpr static setting_t UNLOCKED
Definition: BankableAddresses.hpp:61
setting_t
uint8_t setting_t
The type used for Selectors.
Definition: Def.hpp:50
Bank.hpp
OutputBankableMIDIAddress_Base::OutputBankableMIDIAddress_Base
OutputBankableMIDIAddress_Base(const OutputBank &bank)
Constructor.
Definition: BankableAddresses.hpp:19
OutputBankableMIDIAddress_Base::unlock
void unlock()
Unlock the bank setting.
Definition: BankableAddresses.hpp:55
OutputBankableMIDIAddress_Base::lockedSetting
setting_t lockedSetting
Definition: BankableAddresses.hpp:62
CHANGE_ADDRESS
@ CHANGE_ADDRESS
Change the offset of the address (i.e.
Definition: BankConfig.hpp:17