Control Surface  1.2.0
MIDI Control Surface library for Arduino
BankAddresses.hpp
Go to the documentation of this file.
1 #pragma once
2 
3 #include "BankableAddresses.hpp"
4 
6 
7 namespace Bankable {
8 
10  public:
13 
14  MIDIAddress getBaseAddress() const { return address; }
15 
17  return getBaseAddress() + getAddressOffset();
18  }
19 
20  private:
22 };
23 
24 template <uint8_t N>
26  public:
29  : banks{banks}, address{address} {}
30 
31  MIDIAddress getBaseAddress() const { return address; }
32 
34  auto address = getBaseAddress();
35  for (const OutputBankableMIDIAddress &bank : banks)
36  address += bank.getAddressOffset();
37  return address;
38  }
39 
40  void lock() {
41  for (OutputBankableMIDIAddress &bank : banks)
42  bank.lock();
43  }
44 
45  void unlock() {
46  for (OutputBankableMIDIAddress &bank : banks)
47  bank.unlock();
48  }
49 
50  private:
53 };
54 
56  public:
58  const Array<MIDIAddress, 2> &addresses)
59  : OutputBankableMIDIAddress{config}, first(addresses[0]),
60  second(addresses[1]) {}
61 
64 
67  }
70  }
71 
72  private:
74 };
75 
76 template <uint8_t nb_rows, uint8_t nb_cols>
78  public:
84 
85  uint8_t getBaseAddress(uint8_t row, uint8_t col) const {
86  return addresses[row][col];
87  }
88 
89  MIDIAddress getActiveAddress(uint8_t row, uint8_t col) const {
90  MIDIAddress address = {getBaseAddress(row, col), channelCN};
91  return address + getAddressOffset();
92  }
93 
94  private:
97 };
98 
99 namespace ManyAddresses {
100 
105 template <uint8_t NumBanks>
107  public:
119 
121 
122  private:
124 };
125 
130 template <uint8_t NumBanks>
132  public:
134  const Array2D<MIDIAddress, 2, NumBanks> &addresses)
135  : ManyAddresses_Base{bank}, first{addresses[0]}, second{addresses[1]} {}
136 
139  return second[getSelection()];
140  }
141 
142  private:
144 };
145 
146 template <uint8_t NumBanks, uint8_t nb_rows, uint8_t nb_cols>
148  public:
150  const Bank<NumBanks> &bank,
154  channelCNs} {}
155 
156  MIDIAddress getActiveAddress(uint8_t row, uint8_t col) const {
157  return {addresses[getSelection()][row][col],
159  }
160 
161  private:
164 };
165 
166 } // namespace ManyAddresses
167 } // namespace Bankable
168 
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
OutputBankableMIDIAddress_Base::getSelection
setting_t getSelection() const
Get the bank setting.
Definition: BankableAddresses.hpp:34
MIDIAddress
A type-safe utility class for saving a MIDI address consisting of a 7-bit address,...
Definition: MIDIAddress.hpp:91
Bankable::ManyAddresses::ManyMatrixAddresses
Definition: BankAddresses.hpp:147
Bankable::ManyAddresses::DualManyAddresses::getFirstActiveAddress
MIDIAddress getFirstActiveAddress() const
Definition: BankAddresses.hpp:137
Bankable::DualAddresses::getSecondBaseAddress
MIDIAddress getSecondBaseAddress() const
Definition: BankAddresses.hpp:63
Bankable::SingleAddressMultipleBanks::lock
void lock()
Definition: BankAddresses.hpp:40
Bankable::SingleAddressMultipleBanks
Definition: BankAddresses.hpp:25
Bankable::SingleAddress::address
MIDIAddress address
Definition: BankAddresses.hpp:21
Bankable::ManyAddresses::ManyMatrixAddresses::channelCNs
Array< MIDIChannelCN, NumBanks > channelCNs
Definition: BankAddresses.hpp:163
Bankable
A namespace for MIDI elements that can be added to a Bank, to change their address or channel.
Definition: BankAddresses.hpp:7
Bankable::SingleAddressMultipleBanks::getBaseAddress
MIDIAddress getBaseAddress() const
Definition: BankAddresses.hpp:31
Bankable::DualAddresses::getFirstActiveAddress
MIDIAddress getFirstActiveAddress() const
Definition: BankAddresses.hpp:65
Bankable::ManyAddresses::ManyAddresses
Definition: BankAddresses.hpp:106
Bankable::MatrixAddress::MatrixAddress
MatrixAddress(BaseOutputBankConfig config, const AddressMatrix< nb_rows, nb_cols > &addresses, MIDIChannelCN channelCN)
Definition: BankAddresses.hpp:79
Bankable::MatrixAddress::getBaseAddress
uint8_t getBaseAddress(uint8_t row, uint8_t col) const
Definition: BankAddresses.hpp:85
MIDIChannelCN
A class for saving a MIDI channel and cable number.
Definition: MIDIAddress.hpp:19
BEGIN_CS_NAMESPACE
#define BEGIN_CS_NAMESPACE
Definition: Settings/NamespaceSettings.hpp:9
Bankable::SingleAddressMultipleBanks::address
MIDIAddress address
Definition: BankAddresses.hpp:52
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
Bankable::DualAddresses::first
MIDIAddress first
Definition: BankAddresses.hpp:73
Bankable::DualAddresses::getFirstBaseAddress
MIDIAddress getFirstBaseAddress() const
Definition: BankAddresses.hpp:62
Bankable::MatrixAddress::channelCN
MIDIChannelCN channelCN
Definition: BankAddresses.hpp:96
Bankable::MatrixAddress::getActiveAddress
MIDIAddress getActiveAddress(uint8_t row, uint8_t col) const
Definition: BankAddresses.hpp:89
AH::Array
An array wrapper for easy copying, comparing, and iterating.
Definition: Array.hpp:36
Bankable::ManyAddresses::DualManyAddresses::DualManyAddresses
DualManyAddresses(const Bank< NumBanks > &bank, const Array2D< MIDIAddress, 2, NumBanks > &addresses)
Definition: BankAddresses.hpp:133
Bankable::DualAddresses::getSecondActiveAddress
MIDIAddress getSecondActiveAddress() const
Definition: BankAddresses.hpp:68
Bankable::ManyAddresses::DualManyAddresses::getSecondActiveAddress
MIDIAddress getSecondActiveAddress() const
Definition: BankAddresses.hpp:138
Bankable::ManyAddresses::ManyMatrixAddresses::ManyMatrixAddresses
ManyMatrixAddresses(const Bank< NumBanks > &bank, const Array< AddressMatrix< nb_rows, nb_cols >, NumBanks > &addresses, const Array< MIDIChannelCN, NumBanks > &channelCNs)
Definition: BankAddresses.hpp:149
Bankable::ManyAddresses::ManyMatrixAddresses::getActiveAddress
MIDIAddress getActiveAddress(uint8_t row, uint8_t col) const
Definition: BankAddresses.hpp:156
Bankable::ManyAddresses::ManyAddresses::getActiveAddress
MIDIAddress getActiveAddress() const
Definition: BankAddresses.hpp:120
Bankable::SingleAddressMultipleBanks::getActiveAddress
MIDIAddress getActiveAddress() const
Definition: BankAddresses.hpp:33
Bankable::SingleAddress
Definition: BankAddresses.hpp:9
Bankable::MatrixAddress::addresses
AddressMatrix< nb_rows, nb_cols > addresses
Definition: BankAddresses.hpp:95
Bankable::SingleAddress::SingleAddress
SingleAddress(BaseOutputBankConfig config, MIDIAddress address)
Definition: BankAddresses.hpp:11
AddressMatrix
Array2D< uint8_t, nb_rows, nb_cols > AddressMatrix
Definition: Def.hpp:27
OutputBankableMIDIAddress::getAddressOffset
RelativeMIDIAddress getAddressOffset() const
Get the offset relative to the base address.
Definition: BankableAddresses.hpp:108
Bankable::SingleAddress::getBaseAddress
MIDIAddress getBaseAddress() const
Definition: BankAddresses.hpp:14
Bankable::SingleAddressMultipleBanks::unlock
void unlock()
Definition: BankAddresses.hpp:45
Bankable::SingleAddressMultipleBanks::banks
Array< OutputBankableMIDIAddress, N > banks
Definition: BankAddresses.hpp:51
Bankable::SingleAddressMultipleBanks::SingleAddressMultipleBanks
SingleAddressMultipleBanks(const Array< OutputBankableMIDIAddress, N > &banks, MIDIAddress address)
Definition: BankAddresses.hpp:27
Bankable::ManyAddresses::DualManyAddresses::first
Array< MIDIAddress, NumBanks > first
Definition: BankAddresses.hpp:143
Bankable::DualAddresses::second
MIDIAddress second
Definition: BankAddresses.hpp:73
BaseOutputBankConfig
A struct for selecting the bank of BankableMIDIOutputs and the bank type.
Definition: BankConfig.hpp:60
Bankable::ManyAddresses::ManyAddresses::addresses
Array< MIDIAddress, NumBanks > addresses
Definition: BankAddresses.hpp:123
Bankable::SingleAddress::getActiveAddress
MIDIAddress getActiveAddress() const
Definition: BankAddresses.hpp:16
Bankable::ManyAddresses::ManyMatrixAddresses::addresses
Array< AddressMatrix< nb_rows, nb_cols >, NumBanks > addresses
Definition: BankAddresses.hpp:162
Bankable::DualAddresses
Definition: BankAddresses.hpp:55
Bankable::ManyAddresses::DualManyAddresses::second
Array< MIDIAddress, NumBanks > second
Definition: BankAddresses.hpp:143
Bankable::ManyAddresses::DualManyAddresses
Definition: BankAddresses.hpp:131
BankableAddresses.hpp
Bankable::ManyAddresses::ManyAddresses::ManyAddresses
ManyAddresses(const Bank< NumBanks > &bank, const Array< MIDIAddress, NumBanks > &addresses)
Constructor.
Definition: BankAddresses.hpp:116
Bankable::MatrixAddress
Definition: BankAddresses.hpp:77
Bankable::DualAddresses::DualAddresses
DualAddresses(BaseOutputBankConfig config, const Array< MIDIAddress, 2 > &addresses)
Definition: BankAddresses.hpp:57