Telescope Control Library
GrayAbsEncoder.h@0:6cb2eaf8b133, 2018-08-19 (annotated)
- Committer:
- caoyuan9642
- Date:
- Sun Aug 19 05:21:20 2018 +0000
- Revision:
- 0:6cb2eaf8b133
v0.1
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
caoyuan9642 | 0:6cb2eaf8b133 | 1 | /* |
caoyuan9642 | 0:6cb2eaf8b133 | 2 | * GrayAbsEncoder.h |
caoyuan9642 | 0:6cb2eaf8b133 | 3 | * |
caoyuan9642 | 0:6cb2eaf8b133 | 4 | * Created on: 2018Äê2ÔÂ7ÈÕ |
caoyuan9642 | 0:6cb2eaf8b133 | 5 | * Author: caoyuan9642 |
caoyuan9642 | 0:6cb2eaf8b133 | 6 | */ |
caoyuan9642 | 0:6cb2eaf8b133 | 7 | |
caoyuan9642 | 0:6cb2eaf8b133 | 8 | #ifndef GRAYABSENCODER_H_ |
caoyuan9642 | 0:6cb2eaf8b133 | 9 | |
caoyuan9642 | 0:6cb2eaf8b133 | 10 | #define GRAYABSENCODER_H_ |
caoyuan9642 | 0:6cb2eaf8b133 | 11 | |
caoyuan9642 | 0:6cb2eaf8b133 | 12 | #include <AbsEncoder.h> |
caoyuan9642 | 0:6cb2eaf8b133 | 13 | |
caoyuan9642 | 0:6cb2eaf8b133 | 14 | template<uint8_t N> |
caoyuan9642 | 0:6cb2eaf8b133 | 15 | class GrayAbsEncoder: public AbsEncoder<(1 << N)> |
caoyuan9642 | 0:6cb2eaf8b133 | 16 | { |
caoyuan9642 | 0:6cb2eaf8b133 | 17 | public: |
caoyuan9642 | 0:6cb2eaf8b133 | 18 | GrayAbsEncoder() |
caoyuan9642 | 0:6cb2eaf8b133 | 19 | { |
caoyuan9642 | 0:6cb2eaf8b133 | 20 | } |
caoyuan9642 | 0:6cb2eaf8b133 | 21 | virtual ~GrayAbsEncoder() |
caoyuan9642 | 0:6cb2eaf8b133 | 22 | { |
caoyuan9642 | 0:6cb2eaf8b133 | 23 | } |
caoyuan9642 | 0:6cb2eaf8b133 | 24 | |
caoyuan9642 | 0:6cb2eaf8b133 | 25 | virtual uint32_t readPosGray() = 0; |
caoyuan9642 | 0:6cb2eaf8b133 | 26 | virtual uint32_t readPos() |
caoyuan9642 | 0:6cb2eaf8b133 | 27 | { |
caoyuan9642 | 0:6cb2eaf8b133 | 28 | /*Convert Gray code to Binary code*/ |
caoyuan9642 | 0:6cb2eaf8b133 | 29 | uint32_t grayPos = readPosGray(); |
caoyuan9642 | 0:6cb2eaf8b133 | 30 | uint32_t binPos = grayPos; |
caoyuan9642 | 0:6cb2eaf8b133 | 31 | for (grayPos >>= 1; grayPos; grayPos >>= 1) |
caoyuan9642 | 0:6cb2eaf8b133 | 32 | binPos ^= grayPos; |
caoyuan9642 | 0:6cb2eaf8b133 | 33 | return binPos; |
caoyuan9642 | 0:6cb2eaf8b133 | 34 | } |
caoyuan9642 | 0:6cb2eaf8b133 | 35 | |
caoyuan9642 | 0:6cb2eaf8b133 | 36 | uint8_t getBits() const |
caoyuan9642 | 0:6cb2eaf8b133 | 37 | { |
caoyuan9642 | 0:6cb2eaf8b133 | 38 | return N; |
caoyuan9642 | 0:6cb2eaf8b133 | 39 | } |
caoyuan9642 | 0:6cb2eaf8b133 | 40 | }; |
caoyuan9642 | 0:6cb2eaf8b133 | 41 | |
caoyuan9642 | 0:6cb2eaf8b133 | 42 | #endif /* GRAYABSENCODER_H_ */ |
caoyuan9642 | 0:6cb2eaf8b133 | 43 | |
caoyuan9642 | 0:6cb2eaf8b133 | 44 |