-
Notifications
You must be signed in to change notification settings - Fork 14
Expand file tree
/
Copy pathEncPlexBase.h
More file actions
78 lines (66 loc) · 2.33 KB
/
Copy pathEncPlexBase.h
File metadata and controls
78 lines (66 loc) · 2.33 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#pragma once
#include "EncoderBase.h"
#include "config.h"
namespace EncoderTool
{
template <typename counter_t>
class EncPlexBase
{
public:
#if defined(PLAIN_ENC_CALLBACK)
using allCallback_t = stdext::inplace_function<void(uint_fast8_t channel, counter_t value, counter_t delta)>; // all encoder values
using allBtnCallback_t = stdext::inplace_function<void(uint_fast8_t channel, int_fast8_t state)>; // all encoder buttons
#else
using allCallback_t = void (*)(uint_fast8_t channel, counter_t value, counter_t delta);
using allBtnCallback_t = void (*)(uint_fast8_t channel, int_fast8_t state);
#endif
void attachCallback(allCallback_t callback);
void attachBtnCallback(allBtnCallback_t btnCallback);
EncoderBase<counter_t>& operator[](size_t idx);
protected:
EncPlexBase(unsigned EncoderCount);
~EncPlexBase();
void begin(CountMode mode = CountMode::quarter);
void begin(allCallback_t, CountMode mode = CountMode::quarter);
void begin(allCallback_t, allBtnCallback_t, CountMode mode = CountMode::quarter);
const size_t encoderCount;
EncoderBase<counter_t>* encoders;
allCallback_t callback = nullptr;
allBtnCallback_t btnCallback = nullptr;
counter_t c;
};
template <typename counter_t>
EncPlexBase<counter_t>::EncPlexBase(unsigned eCnt)
: encoderCount(eCnt)
{
encoders = new EncoderBase<counter_t>[eCnt];
}
template <typename counter_t>
void EncPlexBase<counter_t>::begin(CountMode mode)
{
for (unsigned i = 0; i < encoderCount; i++)
{
encoders[i].setCountMode(mode);
}
}
template <typename counter_t>
EncPlexBase<counter_t>::~EncPlexBase()
{
delete[] encoders;
}
template <typename counter_t>
EncoderBase<counter_t>& EncPlexBase<counter_t>::operator[](size_t idx)
{
return idx < encoderCount ? encoders[idx] : encoders[encoderCount - 1];
}
template <typename counter_t>
void EncPlexBase<counter_t>::attachCallback(allCallback_t _callback)
{
callback = _callback;
}
template <typename counter_t>
void EncPlexBase<counter_t>::attachBtnCallback(allBtnCallback_t _btnCallback)
{
btnCallback = _btnCallback;
}
}