Control Surface
main
MIDI Control Surface library for Arduino
Toggle main menu visibility
Loading...
Searching...
No Matches
src
MIDI_Outputs
Bankable
Abstract
Bankable/Abstract/MIDIRotaryEncoder.hpp
Go to the documentation of this file.
1
#pragma once
2
3
#include <AH/STL/utility>
// std::forward
4
#include <
Banks/BankableAddresses.hpp
>
5
#include <
Def/Def.hpp
>
6
#include <
Def/TypeTraits.hpp
>
7
#include <
MIDI_Outputs/Abstract/EncoderState.hpp
>
8
#include <
MIDI_Outputs/Abstract/MIDIOutputElement.hpp
>
9
10
#ifdef ARDUINO
11
#include <
Submodules/Encoder/AHEncoder.hpp
>
12
#else
13
#include <Encoder.h>
// Mock
14
#endif
15
16
BEGIN_CS_NAMESPACE
17
18
namespace
Bankable
{
19
24
template
<
class
Enc,
class
BankAddress,
class
Sender>
25
class
GenericMIDIRotaryEncoder
:
public
MIDIOutputElement
{
26
protected
:
32
GenericMIDIRotaryEncoder
(BankAddress bankAddress, Enc &&
encoder
,
33
int16_t speedMultiply, uint8_t pulsesPerStep,
34
const
Sender &
sender
)
35
:
address
(bankAddress),
encoder
(std::forward<Enc>(
encoder
)),
36
encstate
(speedMultiply, pulsesPerStep),
sender
(
sender
) {}
37
38
public
:
39
void
begin
()
override
{
begin_if_possible
(
encoder
); }
40
41
void
update
()
override
{
42
auto
encval =
encoder
.read();
43
if
(int16_t delta =
encstate
.update(encval)) {
44
sender
.send(delta,
address
.getActiveAddress());
45
}
46
}
47
48
void
setSpeedMultiply
(int16_t speedMultiply) {
49
encstate
.setSpeedMultiply(speedMultiply);
50
}
51
int16_t
getSpeedMultiply
()
const
{
return
encstate
.getSpeedMultiply(); }
52
53
int16_t
resetPositionOffset
() {
54
auto
encval =
encoder
.read();
55
return
encstate
.update(encval);
56
}
57
58
protected
:
59
BankAddress
address
;
60
Enc
encoder
;
61
EncoderState
<
decltype
(
encoder
.read())>
encstate
;
62
63
public
:
64
Sender
sender
;
65
};
66
67
template
<
class
BankAddress,
class
Sender>
68
using
MIDIRotaryEncoder
=
69
GenericMIDIRotaryEncoder<AHEncoder, BankAddress, Sender>
;
70
71
template
<
class
BankAddress,
class
Sender>
72
using
BorrowedMIDIRotaryEncoder
=
73
GenericMIDIRotaryEncoder<AHEncoder &, BankAddress, Sender>
;
74
75
}
// namespace Bankable
76
77
END_CS_NAMESPACE
AHEncoder.hpp
BankableAddresses.hpp
Def.hpp
EncoderState.hpp
MIDIOutputElement.hpp
MIDIOutputElement
AH::Updatable<> MIDIOutputElement
Definition
MIDIOutputElement.hpp:9
END_CS_NAMESPACE
#define END_CS_NAMESPACE
Definition
Settings/NamespaceSettings.hpp:14
BEGIN_CS_NAMESPACE
#define BEGIN_CS_NAMESPACE
Definition
Settings/NamespaceSettings.hpp:11
TypeTraits.hpp
begin_if_possible
std::enable_if< has_method_begin< T >::value >::type begin_if_possible(T &t)
Calls the begin() method of t if that method exists.
Definition
TypeTraits.hpp:23
Bankable::GenericMIDIRotaryEncoder
An abstract class for rotary encoders that send MIDI events and that can be added to a Bank.
Definition
Bankable/Abstract/MIDIRotaryEncoder.hpp:25
Bankable::GenericMIDIRotaryEncoder::resetPositionOffset
int16_t resetPositionOffset()
Definition
Bankable/Abstract/MIDIRotaryEncoder.hpp:53
Bankable::GenericMIDIRotaryEncoder< AHEncoder, BankAddress, Sender >::address
BankAddress address
Definition
Bankable/Abstract/MIDIRotaryEncoder.hpp:59
Bankable::GenericMIDIRotaryEncoder::getSpeedMultiply
int16_t getSpeedMultiply() const
Definition
Bankable/Abstract/MIDIRotaryEncoder.hpp:51
Bankable::GenericMIDIRotaryEncoder::setSpeedMultiply
void setSpeedMultiply(int16_t speedMultiply)
Definition
Bankable/Abstract/MIDIRotaryEncoder.hpp:48
Bankable::GenericMIDIRotaryEncoder< AHEncoder, BankAddress, Sender >::sender
Sender sender
Definition
Bankable/Abstract/MIDIRotaryEncoder.hpp:64
Bankable::GenericMIDIRotaryEncoder::update
void update() override
Update this updatable.
Definition
Bankable/Abstract/MIDIRotaryEncoder.hpp:41
Bankable::GenericMIDIRotaryEncoder::begin
void begin() override
Initialize this updatable.
Definition
Bankable/Abstract/MIDIRotaryEncoder.hpp:39
Bankable::GenericMIDIRotaryEncoder< AHEncoder, BankAddress, Sender >::encoder
AHEncoder encoder
Definition
Bankable/Abstract/MIDIRotaryEncoder.hpp:60
Bankable::GenericMIDIRotaryEncoder< AHEncoder, BankAddress, Sender >::encstate
EncoderState< decltype(encoder.read())> encstate
Definition
Bankable/Abstract/MIDIRotaryEncoder.hpp:61
Bankable::GenericMIDIRotaryEncoder::GenericMIDIRotaryEncoder
GenericMIDIRotaryEncoder(BankAddress bankAddress, Enc &&encoder, int16_t speedMultiply, uint8_t pulsesPerStep, const Sender &sender)
Construct a new GenericMIDIRotaryEncoder.
Definition
Bankable/Abstract/MIDIRotaryEncoder.hpp:32
EncoderState
Class to keep track of relative position changes of rotary encoders.
Definition
EncoderState.hpp:11
Bankable
A namespace for MIDI elements that can be added to a Bank, to change their address or channel.
Definition
BankAddresses.hpp:7
Bankable::MIDIRotaryEncoder
GenericMIDIRotaryEncoder< AHEncoder, BankAddress, Sender > MIDIRotaryEncoder
Definition
Bankable/Abstract/MIDIRotaryEncoder.hpp:68
Bankable::BorrowedMIDIRotaryEncoder
GenericMIDIRotaryEncoder< AHEncoder &, BankAddress, Sender > BorrowedMIDIRotaryEncoder
Definition
Bankable/Abstract/MIDIRotaryEncoder.hpp:72
Generated by
1.17.0