prova
Dependencies: X_NUCLEO_53L0A1 mbed
Fork of 53L0A1_HandGestureRecognition by
Diff: Middlewares/ST/Gestures/GesturesDetect/Inc/tof_gestures_DIRSWIPE_1.h
- Revision:
- 7:d79cbeda2982
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Middlewares/ST/Gestures/GesturesDetect/Inc/tof_gestures_DIRSWIPE_1.h Fri Dec 15 14:16:16 2017 +0000 @@ -0,0 +1,110 @@ +/******************************************************************************* +Copyright © 2015, STMicroelectronics International N.V. +All rights reserved. + +Use and Redistribution are permitted only in accordance with licensing terms +available at www.st.com under software reference X-CUBE-6180XA1, and provided +that the following conditions are met: +* Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. +* Neither the name of STMicroelectronics nor the +names of its contributors may be used to endorse or promote products +derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROTECTED BY STMICROELECTRONICS PATENTS AND COPYRIGHTS. +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND +NON-INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS ARE DISCLAIMED. +IN NO EVENT SHALL STMICROELECTRONICS INTERNATIONAL N.V. BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +********************************************************************************/ + +/* + * @file tof_gestures_DIRSWIPE_1.h + * $Date: 2015-11-10 11:21:53 +0100 (Tue, 10 Nov 2015) $ + * $Revision: 2612 $ + */ + +#ifndef TOF_GESTURES_DIRSWIPE_1_H_ +#define TOF_GESTURES_DIRSWIPE_1_H_ + +#include "tof_gestures_platform.h" +#include "tof_motion.h" + + +#ifdef __cplusplus +extern "C" { +#endif + +/** @defgroup tof_gestures_DIRSWIPE_1 Directional SWIPE (1) + * @brief Directional (left/right) Swipe gesture detection based on motion detector (dual ToF devices) + @par Description + This tof_gestures module allows to detect a directional swipe (from left to right or from right to left) using + two ToF devices (left and right). It is based on the tof_motion module with simple threshold and timing considerations. + It returns one of the following gestures codes : ::GESTURES_SWIPE_LEFT_RIGHT, ::GESTURES_SWIPE_RIGHT_LEFT when gesture is detected + or ::GESTURES_NULL, ::GESTURES_DISCARDED_TOO_SLOW or ::GESTURES_DISCARDED_TOO_FAST when no gesture is detected. + @par Known Limitations + None (very fast swipes can be detected) + * @ingroup tof_gestures + * @{ + */ + + +/** Codes used to detect directional swipes (internal state machine) + */ +enum Gestures_DirSwipe1_Code_t{ + GESTURES_DIRSWIPE_1_START = 0, /*!< Ready to detect gesture start */ + GESTURES_DIRSWIPE_1_END = 1, /*!< Ready to detect gesture end */ +}; + +/** + * @struct Gesture_DIRSWIPE_1_Data_t + * @brief Data structure for directional swipes detection (using two ranging devices) + */ +typedef struct { + int minSwipeDuration; /*!< Input : Minimum duration of a swipe to be detected */ + int maxSwipeDuration; /*!< Input : Maximum duration of a swipe to be detected */ + bool handMustCoverBoth; /*!< Input : If set to true, hand must cover both devices at some point to get a detected swipes */ + MotionData_t motionDetectorLeft; /*!< Private : Motion detector associated to the left ranging device */ + MotionData_t motionDetectorRight; /*!< Private : Motion detector associated to the right ranging device */ + int state; /*!< Private : Internal state machine */ + bool gesture_start_from_right; /*!< Private : Obvious */ + int timestamp; /*!< Private : Obvious */ +} Gesture_DIRSWIPE_1_Data_t; + +/** + * @brief Initialize gesture data + * @param threshold Distance below which a SWIPE may be detected. All distances above this threshold are not considered. + * @param minSwipeDuration Minimum duration of a swipe. Set to 0 if no minimum speed is required. + * @param maxSwipeDuration Maximum swipe duration. If a swipe is too slow, it is discarded. + * @param handMustCoverBoth If set to true, hand must cover both devices at some point to validate a swipe. + * This may be useful to get a more robust swipe detection but this requires both sensors to not be too far away from each other. + * If both devices are too far from each other, it is necessary to set this flag to false to detect swipes. + * @return 0 on success + */ +int tof_gestures_initDIRSWIPE_1(int32_t threshold, int minSipeDuration, int maxSwipeDuration, bool handMustCoverBoth, Gesture_DIRSWIPE_1_Data_t *data); + +/** + * @brief Detect gesture + * @param left_range_mm Ranging distance in mm from left device + * @param right_range_mm Ranging distance in mm from right device + * @return One of these gestures code from ::Gestures_Code_t : ::GESTURES_SWIPE_LEFT_RIGHT, ::GESTURES_SWIPE_RIGHT_LEFT, ::GESTURES_NULL, ::GESTURES_DISCARDED_TOO_SLOW or ::GESTURES_DISCARDED_TOO_FAST + */ +int tof_gestures_detectDIRSWIPE_1(int32_t left_range_mm, int32_t right_range_mm, Gesture_DIRSWIPE_1_Data_t *data); + + /** @} */ + +#ifdef __cplusplus +} +#endif +#endif /* TOF_GESTURES_DIRSWIPE_1_H_ */ +