Control Surface
main
MIDI Control Surface library for Arduino
Toggle main menu visibility
Loading...
Searching...
No Matches
src
Banks
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
9
BEGIN_CS_NAMESPACE
10
15
class
OutputBankableMIDIAddress_Base
{
16
protected
:
23
OutputBankableMIDIAddress_Base
(
const
OutputBank
&
bank
) :
bank
(
bank
) {}
24
25
public
:
30
setting_t
getRawBankSetting
()
const
{
return
bank
.getSelection(); }
31
38
setting_t
getSelection
()
const
{
39
return
lockedSetting
==
Unlocked
?
getRawBankSetting
() :
lockedSetting
;
40
}
41
48
void
lock
() {
49
if
(
lockedSetting
==
Unlocked
)
50
lockedSetting
=
getRawBankSetting
();
51
}
52
59
void
unlock
() {
lockedSetting
=
Unlocked
; }
60
61
protected
:
62
const
OutputBank
&
bank
;
63
64
private
:
65
constexpr
static
setting_t
Unlocked
=
NoSetting
;
66
setting_t
lockedSetting
=
Unlocked
;
67
};
68
85
class
OutputBankableMIDIAddress
:
public
OutputBankableMIDIAddress_Base
{
86
public
:
95
OutputBankableMIDIAddress
(
const
OutputBank
&
bank
,
BankType
type
)
96
:
OutputBankableMIDIAddress_Base
(
bank
),
type
(
type
) {}
97
106
OutputBankableMIDIAddress
(
BaseOutputBankConfig
config)
107
:
OutputBankableMIDIAddress
(config.
bank
, config.
type
) {}
108
112
RelativeMIDIAddress
getAddressOffset
(
setting_t
bankindex)
const
{
113
int8_t offset =
bank
.getOffsetOfSetting(bankindex);
114
switch
(
type
) {
115
case
ChangeAddress
:
return
{offset, 0, 0};
116
case
ChangeChannel
:
return
{0, offset, 0};
117
case
ChangeCable
:
return
{0, 0, offset};
118
default
:
return
{};
119
}
120
}
121
124
RelativeMIDIAddress
getAddressOffset
()
const
{
125
return
getAddressOffset
(
getSelection
());
126
}
127
128
private
:
129
const
BankType
type
;
130
};
131
150
class
ManyAddresses_Base
:
public
OutputBankableMIDIAddress_Base
{
151
public
:
160
template
<u
int
8_t NumBanks>
161
ManyAddresses_Base
(
const
Bank<NumBanks>
&
bank
)
162
:
OutputBankableMIDIAddress_Base
(
bank
) {}
163
};
164
165
END_CS_NAMESPACE
BankConfig.hpp
BankType
BankType
An enumeration of the different bank types.
Definition
BankConfig.hpp:12
ChangeAddress
@ ChangeAddress
Change the offset of the address (i.e.
Definition
BankConfig.hpp:17
ChangeCable
@ ChangeCable
Change the offset of the cable number of the element.
Definition
BankConfig.hpp:27
ChangeChannel
@ ChangeChannel
Change the offset of the channel number of the element.
Definition
BankConfig.hpp:22
Bank.hpp
NoSetting
constexpr setting_t NoSetting
A special setting that indicates an unused or invalid setting.
Definition
Def.hpp:55
setting_t
uint8_t setting_t
The type used for Selectors.
Definition
Def.hpp:53
MIDIAddress.hpp
END_CS_NAMESPACE
#define END_CS_NAMESPACE
Definition
Settings/NamespaceSettings.hpp:14
BEGIN_CS_NAMESPACE
#define BEGIN_CS_NAMESPACE
Definition
Settings/NamespaceSettings.hpp:11
Bank
A class that groups Bankable MIDI Output Elements and Bankable MIDI Input Elements,...
Definition
Bank.hpp:94
BaseOutputBankConfig
A struct for selecting the bank of BankableMIDIOutputs and the bank type.
Definition
BankConfig.hpp:63
ManyAddresses_Base::ManyAddresses_Base
ManyAddresses_Base(const Bank< NumBanks > &bank)
Constructor.
Definition
BankableAddresses.hpp:161
OutputBank
A class for changing the address of BankableMIDIOutputs.
Definition
Bank.hpp:16
OutputBankableMIDIAddress_Base::getSelection
setting_t getSelection() const
Get the bank setting.
Definition
BankableAddresses.hpp:38
OutputBankableMIDIAddress_Base::bank
const OutputBank & bank
Definition
BankableAddresses.hpp:62
OutputBankableMIDIAddress_Base::OutputBankableMIDIAddress_Base
OutputBankableMIDIAddress_Base(const OutputBank &bank)
Constructor.
Definition
BankableAddresses.hpp:23
OutputBankableMIDIAddress_Base::getRawBankSetting
setting_t getRawBankSetting() const
Get the actual bank setting (no matter whether the element is locked or not).
Definition
BankableAddresses.hpp:30
OutputBankableMIDIAddress_Base::lockedSetting
setting_t lockedSetting
Definition
BankableAddresses.hpp:66
OutputBankableMIDIAddress_Base::unlock
void unlock()
Unlock the bank setting.
Definition
BankableAddresses.hpp:59
OutputBankableMIDIAddress_Base::lock
void lock()
Lock the bank setting.
Definition
BankableAddresses.hpp:48
OutputBankableMIDIAddress_Base::Unlocked
static constexpr setting_t Unlocked
Definition
BankableAddresses.hpp:65
OutputBankableMIDIAddress::OutputBankableMIDIAddress
OutputBankableMIDIAddress(const OutputBank &bank, BankType type)
Create a new OutputBankableMIDIAddress object.
Definition
BankableAddresses.hpp:95
OutputBankableMIDIAddress::getAddressOffset
RelativeMIDIAddress getAddressOffset() const
Get the offset relative to the base address for the active bank.
Definition
BankableAddresses.hpp:124
OutputBankableMIDIAddress::OutputBankableMIDIAddress
OutputBankableMIDIAddress(BaseOutputBankConfig config)
Create a new OutputBankableMIDIAddress object.
Definition
BankableAddresses.hpp:106
OutputBankableMIDIAddress::type
const BankType type
Definition
BankableAddresses.hpp:129
OutputBankableMIDIAddress::getAddressOffset
RelativeMIDIAddress getAddressOffset(setting_t bankindex) const
Get the offset relative to the base address.
Definition
BankableAddresses.hpp:112
RelativeMIDIAddress
A class for saving an offset to a MIDI address.
Definition
MIDIAddress.hpp:113
Generated by
1.17.0