Control Surface
main
MIDI Control Surface library for Arduino
Toggle main menu visibility
Loading...
Searching...
No Matches
src
MIDI_Outputs
Abstract
Abstract/MIDIRotaryEncoder.hpp
Go to the documentation of this file.
1
#pragma once
2
3
#include <AH/STL/utility>
// std::forward
4
#include <
Def/Def.hpp
>
5
#include <
Def/TypeTraits.hpp
>
6
#include <
MIDI_Outputs/Abstract/EncoderState.hpp
>
7
#include <
MIDI_Outputs/Abstract/MIDIOutputElement.hpp
>
8
9
#ifdef ARDUINO
10
#include <
Submodules/Encoder/AHEncoder.hpp
>
11
#else
12
#include <Encoder.h>
// Mock
13
#endif
14
15
BEGIN_CS_NAMESPACE
16
20
template
<
class
Enc,
class
Sender>
21
class
GenericMIDIRotaryEncoder
:
public
MIDIOutputElement
{
22
public
:
28
GenericMIDIRotaryEncoder
(Enc &&
encoder
,
MIDIAddress
address
,
29
int16_t speedMultiply, uint8_t pulsesPerStep,
30
const
Sender &
sender
)
31
:
encoder
(std::forward<Enc>(
encoder
)),
address
(
address
),
32
encstate
(speedMultiply, pulsesPerStep),
sender
(
sender
) {}
33
34
void
begin
()
override
{
begin_if_possible
(
encoder
); }
35
36
void
update
()
override
{
37
auto
encval =
encoder
.read();
38
if
(int16_t delta =
encstate
.update(encval)) {
39
sender
.send(delta,
address
);
40
}
41
}
42
43
void
setSpeedMultiply
(int16_t speedMultiply) {
44
encstate
.setSpeedMultiply(speedMultiply);
45
}
46
int16_t
getSpeedMultiply
()
const
{
return
encstate
.getSpeedMultiply(); }
47
49
MIDIAddress
getAddress
()
const
{
return
this->
address
; }
51
void
setAddress
(
MIDIAddress
address
) { this->address =
address
; }
52
53
int16_t
resetPositionOffset
() {
54
auto
encval =
encoder
.read();
55
return
encstate
.update(encval);
56
}
57
58
private
:
59
Enc
encoder
;
60
MIDIAddress
address
;
61
EncoderState
<
decltype
(
encoder
.read())>
encstate
;
62
63
public
:
64
Sender
sender
;
65
};
66
67
template
<
class
Sender>
68
using
MIDIRotaryEncoder
=
GenericMIDIRotaryEncoder<AHEncoder, Sender>
;
69
70
template
<
class
Sender>
71
using
BorrowedMIDIRotaryEncoder
=
GenericMIDIRotaryEncoder<AHEncoder &, Sender>
;
72
73
END_CS_NAMESPACE
AHEncoder.hpp
BorrowedMIDIRotaryEncoder
GenericMIDIRotaryEncoder< AHEncoder &, Sender > BorrowedMIDIRotaryEncoder
Definition
Abstract/MIDIRotaryEncoder.hpp:71
MIDIRotaryEncoder
GenericMIDIRotaryEncoder< AHEncoder, Sender > MIDIRotaryEncoder
Definition
Abstract/MIDIRotaryEncoder.hpp:68
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
EncoderState
Class to keep track of relative position changes of rotary encoders.
Definition
EncoderState.hpp:11
GenericMIDIRotaryEncoder
An abstract class for rotary encoders that send MIDI events.
Definition
Abstract/MIDIRotaryEncoder.hpp:21
GenericMIDIRotaryEncoder::resetPositionOffset
int16_t resetPositionOffset()
Definition
Abstract/MIDIRotaryEncoder.hpp:53
GenericMIDIRotaryEncoder< AHEncoder, Sender >::address
MIDIAddress address
Definition
Abstract/MIDIRotaryEncoder.hpp:60
GenericMIDIRotaryEncoder::setAddress
void setAddress(MIDIAddress address)
Set the MIDI address.
Definition
Abstract/MIDIRotaryEncoder.hpp:51
GenericMIDIRotaryEncoder::getSpeedMultiply
int16_t getSpeedMultiply() const
Definition
Abstract/MIDIRotaryEncoder.hpp:46
GenericMIDIRotaryEncoder::setSpeedMultiply
void setSpeedMultiply(int16_t speedMultiply)
Definition
Abstract/MIDIRotaryEncoder.hpp:43
GenericMIDIRotaryEncoder< AHEncoder, Sender >::sender
Sender sender
Definition
Abstract/MIDIRotaryEncoder.hpp:64
GenericMIDIRotaryEncoder::update
void update() override
Update this updatable.
Definition
Abstract/MIDIRotaryEncoder.hpp:36
GenericMIDIRotaryEncoder::begin
void begin() override
Initialize this updatable.
Definition
Abstract/MIDIRotaryEncoder.hpp:34
GenericMIDIRotaryEncoder::getAddress
MIDIAddress getAddress() const
Get the MIDI address.
Definition
Abstract/MIDIRotaryEncoder.hpp:49
GenericMIDIRotaryEncoder::GenericMIDIRotaryEncoder
GenericMIDIRotaryEncoder(Enc &&encoder, MIDIAddress address, int16_t speedMultiply, uint8_t pulsesPerStep, const Sender &sender)
Construct a new MIDIRotaryEncoder.
Definition
Abstract/MIDIRotaryEncoder.hpp:28
GenericMIDIRotaryEncoder< AHEncoder, Sender >::encoder
AHEncoder encoder
Definition
Abstract/MIDIRotaryEncoder.hpp:59
GenericMIDIRotaryEncoder< AHEncoder, Sender >::encstate
EncoderState< decltype(encoder.read())> encstate
Definition
Abstract/MIDIRotaryEncoder.hpp:61
MIDIAddress
A type-safe utility class for saving a MIDI address consisting of a 7-bit address,...
Definition
MIDIAddress.hpp:145
Generated by
1.17.0