annotate Discovery/Inc/motion.h @ 642:c737cf5d9067

Do not show focus indicator in case motion detection is suspended: Motion detection will be suspended in case the diver is operating the OSTC using the buttons. In previous versions the focus indicator was shown even the motion detection was not active => may cause confusion. The indicator is now only shown in case the detection is active Added hystresis for switching between sector views: In previous versions small jitter at the angle signal could cause fast switching of the custom view. An offset has now been added to avoid this scenario
author Ideenmodellierer
date Wed, 24 Mar 2021 21:28:41 +0100
parents 028d8f3a9410
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
359
4258ea9b67fa Added new files for motion detection (shaking) detection
ideenmodellierer
parents:
diff changeset
1 /*
4258ea9b67fa Added new files for motion detection (shaking) detection
ideenmodellierer
parents:
diff changeset
2 * motion.h
4258ea9b67fa Added new files for motion detection (shaking) detection
ideenmodellierer
parents:
diff changeset
3 *
4258ea9b67fa Added new files for motion detection (shaking) detection
ideenmodellierer
parents:
diff changeset
4 * Created on: 20.05.2019
4258ea9b67fa Added new files for motion detection (shaking) detection
ideenmodellierer
parents:
diff changeset
5 * Author: Thorsten Sonntag
4258ea9b67fa Added new files for motion detection (shaking) detection
ideenmodellierer
parents:
diff changeset
6 */
4258ea9b67fa Added new files for motion detection (shaking) detection
ideenmodellierer
parents:
diff changeset
7
4258ea9b67fa Added new files for motion detection (shaking) detection
ideenmodellierer
parents:
diff changeset
8 #ifndef INC_MOTION_H_
4258ea9b67fa Added new files for motion detection (shaking) detection
ideenmodellierer
parents:
diff changeset
9 #define INC_MOTION_H_
4258ea9b67fa Added new files for motion detection (shaking) detection
ideenmodellierer
parents:
diff changeset
10
4258ea9b67fa Added new files for motion detection (shaking) detection
ideenmodellierer
parents:
diff changeset
11
4258ea9b67fa Added new files for motion detection (shaking) detection
ideenmodellierer
parents:
diff changeset
12 /* exported data types */
373
7b981f8bdd41 Add scroll event by pitch angle detection:
ideenmodellierer
parents: 371
diff changeset
13 #define CUSTOMER_DEFINED_VIEWS (100u) /* value will cause the function to detect the number of selected views */
7b981f8bdd41 Add scroll event by pitch angle detection:
ideenmodellierer
parents: 371
diff changeset
14 #define CUSTOMER_KEEP_LAST_SECTORS (200u) /* do not update number of sectors, just define the new center position */
370
77cdfbdaca8c Changed function names from shake to pitch and improved detection function: Shake might be confusing for people reading the code because pitch values are ased for calculation => changed name to pitch to be more transparent
ideenmodellierer
parents: 363
diff changeset
15
625
028d8f3a9410 Switch Sector / Scroll detection to vector implementation:
Ideenmodellierer
parents: 611
diff changeset
16 #define MOTION_ENABLE_ROLL (0x01u)
028d8f3a9410 Switch Sector / Scroll detection to vector implementation:
Ideenmodellierer
parents: 611
diff changeset
17 #define MOTION_ENABLE_PITCH (0x02u)
028d8f3a9410 Switch Sector / Scroll detection to vector implementation:
Ideenmodellierer
parents: 611
diff changeset
18 #define MOTION_ENABLE_YAW (0x04u)
028d8f3a9410 Switch Sector / Scroll detection to vector implementation:
Ideenmodellierer
parents: 611
diff changeset
19 #define MOTION_ENABLE_ALL (MOTION_ENABLE_ROLL | MOTION_ENABLE_PITCH | MOTION_ENABLE_YAW)
028d8f3a9410 Switch Sector / Scroll detection to vector implementation:
Ideenmodellierer
parents: 611
diff changeset
20
370
77cdfbdaca8c Changed function names from shake to pitch and improved detection function: Shake might be confusing for people reading the code because pitch values are ased for calculation => changed name to pitch to be more transparent
ideenmodellierer
parents: 363
diff changeset
21 typedef enum
77cdfbdaca8c Changed function names from shake to pitch and improved detection function: Shake might be confusing for people reading the code because pitch values are ased for calculation => changed name to pitch to be more transparent
ideenmodellierer
parents: 363
diff changeset
22 {
77cdfbdaca8c Changed function names from shake to pitch and improved detection function: Shake might be confusing for people reading the code because pitch values are ased for calculation => changed name to pitch to be more transparent
ideenmodellierer
parents: 363
diff changeset
23 MOTION_DETECT_OFF = 0,
77cdfbdaca8c Changed function names from shake to pitch and improved detection function: Shake might be confusing for people reading the code because pitch values are ased for calculation => changed name to pitch to be more transparent
ideenmodellierer
parents: 363
diff changeset
24 MOTION_DETECT_SECTOR,
373
7b981f8bdd41 Add scroll event by pitch angle detection:
ideenmodellierer
parents: 371
diff changeset
25 MOTION_DETECT_MOVE,
375
4bb5ceebfaf9 Use Enum values for initialization and setting check:
ideenmodellierer
parents: 373
diff changeset
26 MOTION_DETECT_SCROLL,
4bb5ceebfaf9 Use Enum values for initialization and setting check:
ideenmodellierer
parents: 373
diff changeset
27 MOTION_DETECT_END
370
77cdfbdaca8c Changed function names from shake to pitch and improved detection function: Shake might be confusing for people reading the code because pitch values are ased for calculation => changed name to pitch to be more transparent
ideenmodellierer
parents: 363
diff changeset
28 } MotionDetectMethod_t;
77cdfbdaca8c Changed function names from shake to pitch and improved detection function: Shake might be confusing for people reading the code because pitch values are ased for calculation => changed name to pitch to be more transparent
ideenmodellierer
parents: 363
diff changeset
29
359
4258ea9b67fa Added new files for motion detection (shaking) detection
ideenmodellierer
parents:
diff changeset
30 typedef enum
4258ea9b67fa Added new files for motion detection (shaking) detection
ideenmodellierer
parents:
diff changeset
31 {
4258ea9b67fa Added new files for motion detection (shaking) detection
ideenmodellierer
parents:
diff changeset
32 DETECT_START = 0,
4258ea9b67fa Added new files for motion detection (shaking) detection
ideenmodellierer
parents:
diff changeset
33 DETECT_POS_MOVE,
363
bdf978d2a5d4 Reworked detection function
ideenmodellierer
parents: 359
diff changeset
34 DETECT_MAXIMA,
bdf978d2a5d4 Reworked detection function
ideenmodellierer
parents: 359
diff changeset
35 DETECT_FALLBACK,
370
77cdfbdaca8c Changed function names from shake to pitch and improved detection function: Shake might be confusing for people reading the code because pitch values are ased for calculation => changed name to pitch to be more transparent
ideenmodellierer
parents: 363
diff changeset
36 DETECT_POS_PITCH,
359
4258ea9b67fa Added new files for motion detection (shaking) detection
ideenmodellierer
parents:
diff changeset
37 DETECT_NEG_MOVE,
4258ea9b67fa Added new files for motion detection (shaking) detection
ideenmodellierer
parents:
diff changeset
38 DETECT_MINIMA,
4258ea9b67fa Added new files for motion detection (shaking) detection
ideenmodellierer
parents:
diff changeset
39 DETECT_RISEBACK,
370
77cdfbdaca8c Changed function names from shake to pitch and improved detection function: Shake might be confusing for people reading the code because pitch values are ased for calculation => changed name to pitch to be more transparent
ideenmodellierer
parents: 363
diff changeset
40 DETECT_NEG_PITCH,
359
4258ea9b67fa Added new files for motion detection (shaking) detection
ideenmodellierer
parents:
diff changeset
41 DETECT_NOTHING
4258ea9b67fa Added new files for motion detection (shaking) detection
ideenmodellierer
parents:
diff changeset
42 } detectionState_t;
4258ea9b67fa Added new files for motion detection (shaking) detection
ideenmodellierer
parents:
diff changeset
43
370
77cdfbdaca8c Changed function names from shake to pitch and improved detection function: Shake might be confusing for people reading the code because pitch values are ased for calculation => changed name to pitch to be more transparent
ideenmodellierer
parents: 363
diff changeset
44 typedef struct
77cdfbdaca8c Changed function names from shake to pitch and improved detection function: Shake might be confusing for people reading the code because pitch values are ased for calculation => changed name to pitch to be more transparent
ideenmodellierer
parents: 363
diff changeset
45 {
383
49a02dea8ae3 Combine variables in a structure to improve readability of code
ideenmodellierer
parents: 375
diff changeset
46 float upperborder; /* current sector is changed if pitch exceeds these borders */
49a02dea8ae3 Combine variables in a structure to improve readability of code
ideenmodellierer
parents: 375
diff changeset
47 float lowerborder;
49a02dea8ae3 Combine variables in a structure to improve readability of code
ideenmodellierer
parents: 375
diff changeset
48
49a02dea8ae3 Combine variables in a structure to improve readability of code
ideenmodellierer
parents: 375
diff changeset
49 uint8_t current; /* number of the current visible sector */
49a02dea8ae3 Combine variables in a structure to improve readability of code
ideenmodellierer
parents: 375
diff changeset
50 uint8_t target; /* used for sector switch => number of the sector which shall be finnaly displayed */
49a02dea8ae3 Combine variables in a structure to improve readability of code
ideenmodellierer
parents: 375
diff changeset
51
49a02dea8ae3 Combine variables in a structure to improve readability of code
ideenmodellierer
parents: 375
diff changeset
52 float offset; /* offset to adjust minimum pitch value used for detection to zero */
49a02dea8ae3 Combine variables in a structure to improve readability of code
ideenmodellierer
parents: 375
diff changeset
53 float size; /* delta of upper and lower boarder defining the sector in degree */
49a02dea8ae3 Combine variables in a structure to improve readability of code
ideenmodellierer
parents: 375
diff changeset
54 float window; /* defines which range of pitch values are used for detection */
49a02dea8ae3 Combine variables in a structure to improve readability of code
ideenmodellierer
parents: 375
diff changeset
55 float center; /* defines the offset from pitch to middle of active sector (avoid center position is close to the calculated borders) */
49a02dea8ae3 Combine variables in a structure to improve readability of code
ideenmodellierer
parents: 375
diff changeset
56 uint8_t count; /* number of sectors used for detection */
370
77cdfbdaca8c Changed function names from shake to pitch and improved detection function: Shake might be confusing for people reading the code because pitch values are ased for calculation => changed name to pitch to be more transparent
ideenmodellierer
parents: 363
diff changeset
57 } SSector;
77cdfbdaca8c Changed function names from shake to pitch and improved detection function: Shake might be confusing for people reading the code because pitch values are ased for calculation => changed name to pitch to be more transparent
ideenmodellierer
parents: 363
diff changeset
58
551
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 383
diff changeset
59 typedef struct
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 383
diff changeset
60 {
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 383
diff changeset
61 float x;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 383
diff changeset
62 float y;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 383
diff changeset
63 float z;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 383
diff changeset
64 } SCoord;
383
49a02dea8ae3 Combine variables in a structure to improve readability of code
ideenmodellierer
parents: 375
diff changeset
65
551
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 383
diff changeset
66 typedef enum
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 383
diff changeset
67 {
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 383
diff changeset
68 MOTION_HISTORY_ROLL = 0,
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 383
diff changeset
69 MOTION_HISTORY_PITCH,
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 383
diff changeset
70 MOTION_HISTORY_YAW
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 383
diff changeset
71 } MotionHistoryEntry_t;
383
49a02dea8ae3 Combine variables in a structure to improve readability of code
ideenmodellierer
parents: 375
diff changeset
72
551
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 383
diff changeset
73 typedef struct
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 383
diff changeset
74 {
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 383
diff changeset
75 uint8_t roll;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 383
diff changeset
76 uint8_t pitch;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 383
diff changeset
77 uint8_t yaw;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 383
diff changeset
78 } SDeltaHistory;
383
49a02dea8ae3 Combine variables in a structure to improve readability of code
ideenmodellierer
parents: 375
diff changeset
79
370
77cdfbdaca8c Changed function names from shake to pitch and improved detection function: Shake might be confusing for people reading the code because pitch values are ased for calculation => changed name to pitch to be more transparent
ideenmodellierer
parents: 363
diff changeset
80 void InitMotionDetection(void);
611
916998f90e39 Suspend MotionDetection events while diver is operationg the OSTC:
Ideenmodellierer
parents: 597
diff changeset
81 void suspendMotionDetection(uint8_t seconds);
916998f90e39 Suspend MotionDetection events while diver is operationg the OSTC:
Ideenmodellierer
parents: 597
diff changeset
82 void HandleMotionDetection(void);
551
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 383
diff changeset
83 void resetMotionDeltaHistory();
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 383
diff changeset
84 void evaluateMotionDelta(float roll, float pitch, float yaw);
625
028d8f3a9410 Switch Sector / Scroll detection to vector implementation:
Ideenmodellierer
parents: 611
diff changeset
85 void DefineSectorCount(uint8_t numOfSectors);
597
132e7e3d13a7 MotionControl-Sector: Map sectors during switch T7 <=> T3:
Ideenmodellierer
parents: 551
diff changeset
86 void MapCVToSector(void);
370
77cdfbdaca8c Changed function names from shake to pitch and improved detection function: Shake might be confusing for people reading the code because pitch values are ased for calculation => changed name to pitch to be more transparent
ideenmodellierer
parents: 363
diff changeset
87 detectionState_t detectPitch(float currentPitch);
625
028d8f3a9410 Switch Sector / Scroll detection to vector implementation:
Ideenmodellierer
parents: 611
diff changeset
88 detectionState_t detectSectorButtonEvent(float focusOffset);
028d8f3a9410 Switch Sector / Scroll detection to vector implementation:
Ideenmodellierer
parents: 611
diff changeset
89 detectionState_t detectScrollButtonEvent(float focusOffset);
359
4258ea9b67fa Added new files for motion detection (shaking) detection
ideenmodellierer
parents:
diff changeset
90
551
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 383
diff changeset
91 void anglesToCoord(float roll, float pitch, float yaw, SCoord *pCoord);
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 383
diff changeset
92 void calibrateViewport(float roll, float pitch, float yaw);
625
028d8f3a9410 Switch Sector / Scroll detection to vector implementation:
Ideenmodellierer
parents: 611
diff changeset
93 float checkViewport(float roll, float pitch, float yaw, uint8_t enableAxis);
551
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 383
diff changeset
94 uint8_t viewInFocus(void);
642
c737cf5d9067 Do not show focus indicator in case motion detection is suspended:
Ideenmodellierer
parents: 625
diff changeset
95 uint8_t viewDetectionSuspended(void);
551
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 383
diff changeset
96 void resetFocusState(void);
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 383
diff changeset
97
359
4258ea9b67fa Added new files for motion detection (shaking) detection
ideenmodellierer
parents:
diff changeset
98 #endif /* INC_MOTION_H_ */