15
15
16
16
#include < cmath>
17
17
18
- template <typename SignalA, typename SignalB, uint8_t POSTSCALER,
19
- std::signed_integral DeltaType>
18
+ template <typename SignalA, typename SignalB, uint8_t PRESCALER, std::signed_integral DeltaType>
20
19
inline uint8_t
21
- modm::BitBangEncoderInput<SignalA, SignalB, POSTSCALER , DeltaType>::getRaw()
20
+ modm::BitBangEncoderInput<SignalA, SignalB, PRESCALER , DeltaType>::getRaw()
22
21
{
23
22
const uint8_t read = Signals::read ();
24
23
// convert graycode to binary
@@ -28,42 +27,40 @@ modm::BitBangEncoderInput<SignalA, SignalB, POSTSCALER, DeltaType>::getRaw()
28
27
return raw;
29
28
}
30
29
31
- template <typename SignalA, typename SignalB, uint8_t POSTSCALER,
32
- std::signed_integral DeltaType>
30
+ template <typename SignalA, typename SignalB, uint8_t PRESCALER, std::signed_integral DeltaType>
33
31
inline void
34
- modm::BitBangEncoderInput<SignalA, SignalB, POSTSCALER, DeltaType>::connect()
32
+ modm::BitBangEncoderInput<SignalA, SignalB, PRESCALER, DeltaType>::initialize(
33
+ const modm::platform::Gpio::InputType inputType
34
+ )
35
35
{
36
- Signals::setInput (::Gpio::InputType::PullUp );
36
+ Signals::setInput (inputType );
37
37
38
38
// Tare power-on state
39
39
modm::delay (10us);
40
40
raw_last = getRaw ();
41
41
}
42
42
43
- template <typename SignalA, typename SignalB, uint8_t POSTSCALER,
44
- std::signed_integral DeltaType>
43
+ template <typename SignalA, typename SignalB, uint8_t PRESCALER, std::signed_integral DeltaType>
45
44
inline void
46
- modm::BitBangEncoderInput<SignalA, SignalB, POSTSCALER , DeltaType>::update()
45
+ modm::BitBangEncoderInput<SignalA, SignalB, PRESCALER , DeltaType>::update()
47
46
{
48
- uint8_t raw = getRaw ();
47
+ const uint8_t raw = getRaw ();
49
48
const uint8_t diff = raw_last - raw;
49
+
50
50
if (diff & 0b01 )
51
51
{
52
52
raw_last = raw;
53
53
delta += (diff & 0b10 ) - 1 ; // bit 1 = direction (+/-)
54
54
}
55
55
}
56
56
57
- template <typename SignalA, typename SignalB, uint8_t POSTSCALER,
58
- std::signed_integral DeltaType>
57
+ template <typename SignalA, typename SignalB, uint8_t PRESCALER, std::signed_integral DeltaType>
59
58
DeltaType
60
- modm::BitBangEncoderInput<SignalA, SignalB, POSTSCALER , DeltaType>::getIncrement ()
59
+ modm::BitBangEncoderInput<SignalA, SignalB, PRESCALER , DeltaType>::getDelta ()
61
60
{
62
61
::modm::atomic::Lock _;
63
- DeltaType val = delta;
64
-
65
- delta &= (POSTSCALER - 1 ); // mask out higher bits
66
62
67
- constexpr uint8_t shift = std::log2 (POSTSCALER); // Number of fraction bits
68
- return val >> shift; // return whats left without fractions
63
+ DeltaType ret = delta;
64
+ delta &= (PRESCALER - 1 ); // Only keep prescaler fraction
65
+ return ret >> int (std::log2 (PRESCALER)); // return delta without prescaler fraction
69
66
}
0 commit comments