diff options
Diffstat (limited to 'src/components/motion')
-rw-r--r-- | src/components/motion/MotionController.cpp | 33 | ||||
-rw-r--r-- | src/components/motion/MotionController.h | 26 |
2 files changed, 59 insertions, 0 deletions
diff --git a/src/components/motion/MotionController.cpp b/src/components/motion/MotionController.cpp new file mode 100644 index 00000000..bad9d45f --- /dev/null +++ b/src/components/motion/MotionController.cpp @@ -0,0 +1,33 @@ +#include "MotionController.h" + +using namespace Pinetime::Controllers; + +void MotionController::Update(int16_t x, int16_t y, int16_t z, uint32_t nbSteps) { + this->x = x; + this->y = y; + this->z = z; + this->nbSteps = nbSteps; +} + +bool MotionController::ShouldWakeUp(bool isSleeping) { + if ((x + 335) <= 670 && z < 0) { + if (not isSleeping) { + if (y <= 0) { + return false; + } else { + lastYForWakeUp = 0; + return false; + } + } + + if (y >= 0) { + lastYForWakeUp = 0; + return false; + } + if (y + 230 < lastYForWakeUp) { + lastYForWakeUp = y; + return true; + } + } + return false; +} diff --git a/src/components/motion/MotionController.h b/src/components/motion/MotionController.h new file mode 100644 index 00000000..dbbbf910 --- /dev/null +++ b/src/components/motion/MotionController.h @@ -0,0 +1,26 @@ +#pragma once + +#include <cstdint> + +namespace Pinetime { + namespace Controllers { + class MotionController { + public: + void Update(int16_t x, int16_t y, int16_t z, uint32_t nbSteps); + + uint16_t X() const { return x; } + uint16_t Y() const { return y; } + uint16_t Z() const { return z; } + uint32_t NbSteps() const { return nbSteps; } + bool ShouldWakeUp(bool isSleeping); + + private: + uint32_t nbSteps; + int16_t x; + int16_t y; + int16_t z; + int16_t lastYForWakeUp = 0; + + }; + } +}
\ No newline at end of file |