annotate Discovery/Inc/motion.h @ 578:beb4d47542f1

Rework pitch detection: To improve separation between pos and neg moves the history memory is now evaluated starting from the last detected start condition. This was needed because a small "overshoot" of the end position causes e.g. a pos event to be detected as negative event.
author Ideenmodellierer
date Sun, 29 Nov 2020 23:02:11 +0100
parents e3237f580ae9
children 132e7e3d13a7
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
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
16 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
17 {
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
18 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
19 MOTION_DETECT_SECTOR,
373
7b981f8bdd41 Add scroll event by pitch angle detection:
ideenmodellierer
parents: 371
diff changeset
20 MOTION_DETECT_MOVE,
375
4bb5ceebfaf9 Use Enum values for initialization and setting check:
ideenmodellierer
parents: 373
diff changeset
21 MOTION_DETECT_SCROLL,
4bb5ceebfaf9 Use Enum values for initialization and setting check:
ideenmodellierer
parents: 373
diff changeset
22 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
23 } 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
24
359
4258ea9b67fa Added new files for motion detection (shaking) detection
ideenmodellierer
parents:
diff changeset
25 typedef enum
4258ea9b67fa Added new files for motion detection (shaking) detection
ideenmodellierer
parents:
diff changeset
26 {
4258ea9b67fa Added new files for motion detection (shaking) detection
ideenmodellierer
parents:
diff changeset
27 DETECT_START = 0,
4258ea9b67fa Added new files for motion detection (shaking) detection
ideenmodellierer
parents:
diff changeset
28 DETECT_POS_MOVE,
363
bdf978d2a5d4 Reworked detection function
ideenmodellierer
parents: 359
diff changeset
29 DETECT_MAXIMA,
bdf978d2a5d4 Reworked detection function
ideenmodellierer
parents: 359
diff changeset
30 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
31 DETECT_POS_PITCH,
359
4258ea9b67fa Added new files for motion detection (shaking) detection
ideenmodellierer
parents:
diff changeset
32 DETECT_NEG_MOVE,
4258ea9b67fa Added new files for motion detection (shaking) detection
ideenmodellierer
parents:
diff changeset
33 DETECT_MINIMA,
4258ea9b67fa Added new files for motion detection (shaking) detection
ideenmodellierer
parents:
diff changeset
34 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
35 DETECT_NEG_PITCH,
359
4258ea9b67fa Added new files for motion detection (shaking) detection
ideenmodellierer
parents:
diff changeset
36 DETECT_NOTHING
4258ea9b67fa Added new files for motion detection (shaking) detection
ideenmodellierer
parents:
diff changeset
37 } detectionState_t;
4258ea9b67fa Added new files for motion detection (shaking) detection
ideenmodellierer
parents:
diff changeset
38
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
39 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
40 {
383
49a02dea8ae3 Combine variables in a structure to improve readability of code
ideenmodellierer
parents: 375
diff changeset
41 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
42 float lowerborder;
49a02dea8ae3 Combine variables in a structure to improve readability of code
ideenmodellierer
parents: 375
diff changeset
43
49a02dea8ae3 Combine variables in a structure to improve readability of code
ideenmodellierer
parents: 375
diff changeset
44 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
45 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
46
49a02dea8ae3 Combine variables in a structure to improve readability of code
ideenmodellierer
parents: 375
diff changeset
47 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
48 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
49 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
50 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
51 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
52 } 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
53
551
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 383
diff changeset
54 typedef struct
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 383
diff changeset
55 {
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 383
diff changeset
56 float x;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 383
diff changeset
57 float y;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 383
diff changeset
58 float z;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 383
diff changeset
59 } SCoord;
383
49a02dea8ae3 Combine variables in a structure to improve readability of code
ideenmodellierer
parents: 375
diff changeset
60
551
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 383
diff changeset
61 typedef enum
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 383
diff changeset
62 {
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 383
diff changeset
63 MOTION_HISTORY_ROLL = 0,
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 383
diff changeset
64 MOTION_HISTORY_PITCH,
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 383
diff changeset
65 MOTION_HISTORY_YAW
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 383
diff changeset
66 } MotionHistoryEntry_t;
383
49a02dea8ae3 Combine variables in a structure to improve readability of code
ideenmodellierer
parents: 375
diff changeset
67
551
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 383
diff changeset
68 typedef struct
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 383
diff changeset
69 {
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 383
diff changeset
70 uint8_t roll;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 383
diff changeset
71 uint8_t pitch;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 383
diff changeset
72 uint8_t yaw;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 383
diff changeset
73 } SDeltaHistory;
383
49a02dea8ae3 Combine variables in a structure to improve readability of code
ideenmodellierer
parents: 375
diff changeset
74
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
75 void InitMotionDetection(void);
551
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 383
diff changeset
76 void resetMotionDeltaHistory();
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 383
diff changeset
77 void evaluateMotionDelta(float roll, float pitch, float yaw);
371
fca370f847f8 Added parameter for number of sectors to be defined
ideenmodellierer
parents: 370
diff changeset
78 void DefinePitchSectors(float centerAngle, uint8_t numOfSectors);
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
79 detectionState_t detectPitch(float currentPitch);
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 detectionState_t detectSectorButtonEvent(float curPitch);
373
7b981f8bdd41 Add scroll event by pitch angle detection:
ideenmodellierer
parents: 371
diff changeset
81 detectionState_t detectScrollButtonEvent(float curPitch);
359
4258ea9b67fa Added new files for motion detection (shaking) detection
ideenmodellierer
parents:
diff changeset
82
551
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 383
diff changeset
83 void anglesToCoord(float roll, float pitch, float yaw, SCoord *pCoord);
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 383
diff changeset
84 void calibrateViewport(float roll, float pitch, float yaw);
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 383
diff changeset
85 float checkViewport(float roll, float pitch, float yaw);
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 383
diff changeset
86 uint8_t viewInFocus(void);
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 383
diff changeset
87 void resetFocusState(void);
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 383
diff changeset
88
359
4258ea9b67fa Added new files for motion detection (shaking) detection
ideenmodellierer
parents:
diff changeset
89 #endif /* INC_MOTION_H_ */