1515
1616#include < cmath>
1717
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>
2019inline uint8_t
21- modm::BitBangEncoderInput<SignalA, SignalB, POSTSCALER , DeltaType>::getRaw()
20+ modm::BitBangEncoderInput<SignalA, SignalB, PRESCALER , DeltaType>::getRaw()
2221{
2322 const uint8_t read = Signals::read ();
2423 // convert graycode to binary
@@ -28,42 +27,40 @@ modm::BitBangEncoderInput<SignalA, SignalB, POSTSCALER, DeltaType>::getRaw()
2827 return raw;
2928}
3029
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>
3331inline 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+ )
3535{
36- Signals::setInput (::Gpio::InputType::PullUp );
36+ Signals::setInput (inputType );
3737
3838 // Tare power-on state
3939 modm::delay (10us);
4040 raw_last = getRaw ();
4141}
4242
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>
4544inline void
46- modm::BitBangEncoderInput<SignalA, SignalB, POSTSCALER , DeltaType>::update()
45+ modm::BitBangEncoderInput<SignalA, SignalB, PRESCALER , DeltaType>::update()
4746{
48- uint8_t raw = getRaw ();
47+ const uint8_t raw = getRaw ();
4948 const uint8_t diff = raw_last - raw;
49+
5050 if (diff & 0b01 )
5151 {
5252 raw_last = raw;
5353 delta += (diff & 0b10 ) - 1 ; // bit 1 = direction (+/-)
5454 }
5555}
5656
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>
5958DeltaType
60- modm::BitBangEncoderInput<SignalA, SignalB, POSTSCALER , DeltaType>::getIncrement ()
59+ modm::BitBangEncoderInput<SignalA, SignalB, PRESCALER , DeltaType>::getDelta ()
6160{
6261 ::modm::atomic::Lock _;
63- DeltaType val = delta;
64-
65- delta &= (POSTSCALER - 1 ); // mask out higher bits
6662
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
6966}
0 commit comments