annotate Discovery/Src/motion.c @ 623:ba83a8ef9bad

Improvment frame Handling: In previous version, especially during fast menu operations, from time to time a flicker (in case of cyclic updated views) or corrupted menus appeared. Possible root cause is a interferance in the chain: refresh display (~100ms) => release frame (in parallel to) provide frame (~45ms) => clear frame (~45ms). to improve the behaviour the clear frame loop is not iterated until all bufferes are cleared (before one buffer every~45ms). getFrame() does now iterate through all frame buffers instead reusing the first possible (to avoid ghoust views and to provide more time to housekeeping function for cleanup)
author Ideenmodellierer
date Sun, 07 Feb 2021 22:04:43 +0100
parents 6826731ff2be
children 028d8f3a9410
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.c
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 #include <stdint.h>
4258ea9b67fa Added new files for motion detection (shaking) detection
ideenmodellierer
parents:
diff changeset
9 #include <string.h>
373
7b981f8bdd41 Add scroll event by pitch angle detection:
ideenmodellierer
parents: 371
diff changeset
10 #include <stdlib.h>
359
4258ea9b67fa Added new files for motion detection (shaking) detection
ideenmodellierer
parents:
diff changeset
11 #include <math.h>
4258ea9b67fa Added new files for motion detection (shaking) detection
ideenmodellierer
parents:
diff changeset
12 #include "motion.h"
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
13 #include "data_central.h"
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
14 #include "t7.h"
384
427ae9f8e28e Consider number of available t3 views in sector handling:
ideenmodellierer
parents: 383
diff changeset
15 #include "t3.h"
371
fca370f847f8 Added parameter for number of sectors to be defined
ideenmodellierer
parents: 370
diff changeset
16 #include "settings.h"
592
f52bc70e380f MotionCtrl - Sectorview Map sectors directly to custom views:
Ideenmodellierer
parents: 585
diff changeset
17 #include "base.h"
359
4258ea9b67fa Added new files for motion detection (shaking) detection
ideenmodellierer
parents:
diff changeset
18
4258ea9b67fa Added new files for motion detection (shaking) detection
ideenmodellierer
parents:
diff changeset
19 #define STABLE_STATE_COUNT 2 /* number of count to declare a state as stable (at the moment based on 100ms) */
363
bdf978d2a5d4 Reworked detection function
ideenmodellierer
parents: 362
diff changeset
20 #define STABLE_STATE_TIMEOUT 5 /* Detection shall be aborted if a movement state is stable for more than 500ms */
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
585
4dfdf230d8ba Reduced view angle and number of vusiualized custom views in setor mode:
Ideenmodellierer
parents: 578
diff changeset
22 #define SECTOR_WINDOW 30.0 /* Pitch window which is used for custom view projection */
381
695434a6dcf6 Simplified pitch detection state machine:
ideenmodellierer
parents: 378
diff changeset
23 #define SECTOR_WINDOW_MAX 120.0 /* Pitch window which will be greater than the divers field of view */
385
0cd862e501f6 Finetune parameter for detection of small sectors as used for the pitch detection
ideenmodellierer
parents: 384
diff changeset
24 #define SECTOR_HYSTERY 2 /* Additional offset to avoid fast changing displays */
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
25 #define SECTOR_BORDER 400.0 /* Define a value which is out of limit to avoid not wanted key events */
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
26 #define SECTOR_FILTER 10 /* Define speed for calculated angle to follow real value */
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
27
385
0cd862e501f6 Finetune parameter for detection of small sectors as used for the pitch detection
ideenmodellierer
parents: 384
diff changeset
28 #define SECTOR_MAX 24 /* maximum number of sectors */
378
834e087505ec Incremented "idle window" for scroll detection
ideenmodellierer
parents: 373
diff changeset
29 #define SECTOR_SCROLL 7 /* number of sectors used for scroll detection */
592
f52bc70e380f MotionCtrl - Sectorview Map sectors directly to custom views:
Ideenmodellierer
parents: 585
diff changeset
30 #define SECTOR_MAX_CNT 5 /* max number of views used for sector control */
359
4258ea9b67fa Added new files for motion detection (shaking) detection
ideenmodellierer
parents:
diff changeset
31
551
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
32 #define MOTION_DELTA_STABLE 0
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
33 #define MOTION_DELTA_JITTER 1
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
34 #define MOTION_DELTA_RAISE 2
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
35 #define MOTION_DELTA_FALL 3
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
36
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
37 #define MOTION_DELTA_JITTER_LEVEL 3.0 /* lower values are considered as stable */
574
01ee21dd311f Improved focus detection:
Ideenmodellierer
parents: 551
diff changeset
38 #define MOTION_DELTA_RAISE_LEVEL 6.0 /* Movement causing a significant change detected */
551
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
39 #define MOTION_DELTA_FALL_LEVEL -6.0 /* Movement causing a significant change detected */
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
40
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
41 #define MOTION_DELTA_HISTORY_SIZE 20 /* Number of history data sets */
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
42
385
0cd862e501f6 Finetune parameter for detection of small sectors as used for the pitch detection
ideenmodellierer
parents: 384
diff changeset
43 detectionState_t detectionState = DETECT_NOTHING;
0cd862e501f6 Finetune parameter for detection of small sectors as used for the pitch detection
ideenmodellierer
parents: 384
diff changeset
44 SSector sectorDetection;
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
45
551
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
46 static uint8_t motionDeltaHistory[3][MOTION_DELTA_HISTORY_SIZE]; /* Change history of roll, pitch and yaw */
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
47 static uint8_t motionDeltaHistoryIdx; /* Current index of history data */
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
48
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
49 static uint8_t focusCnt = 0;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
50 static uint8_t inFocus = 0;
592
f52bc70e380f MotionCtrl - Sectorview Map sectors directly to custom views:
Ideenmodellierer
parents: 585
diff changeset
51 static uint8_t sectorMap[SECTOR_MAX_CNT];
551
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
52
611
916998f90e39 Suspend MotionDetection events while diver is operationg the OSTC:
Ideenmodellierer
parents: 595
diff changeset
53 static uint8_t suspendMotionDetectionSec = 0;
916998f90e39 Suspend MotionDetection events while diver is operationg the OSTC:
Ideenmodellierer
parents: 595
diff changeset
54
551
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
55 void resetMotionDeltaHistory()
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
56 {
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
57 motionDeltaHistoryIdx = 0;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
58 memset(motionDeltaHistory, 0, sizeof(motionDeltaHistory));
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
59 }
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
60
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
61 void evaluateMotionDelta(float roll, float pitch, float yaw)
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
62 {
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
63 static float lastValue[3] = {0.0,0.0,0.0};
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
64 uint8_t nextIndex = motionDeltaHistoryIdx + 1;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
65 uint8_t axis;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
66 float curValue;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
67
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
68 if(nextIndex == MOTION_DELTA_HISTORY_SIZE)
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
69 {
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
70 nextIndex = 0;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
71 }
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
72 for(axis=0; axis < 3; axis++)
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
73 {
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
74 switch(axis)
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
75 {
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
76 case MOTION_HISTORY_ROLL: curValue = roll;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
77 break;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
78 case MOTION_HISTORY_PITCH: curValue = pitch;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
79 break;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
80 default:
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
81 case MOTION_HISTORY_YAW: if((yaw < 90) && (lastValue[MOTION_HISTORY_YAW] > 270.0)) /* transition 360 => 0 */
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
82 {
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
83 lastValue[MOTION_HISTORY_YAW] -= 360;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
84 }
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
85 else if((yaw > 270) && (lastValue[MOTION_HISTORY_YAW] < 90.0)) /* transition 0 => 360 */
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
86 {
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
87 lastValue[MOTION_HISTORY_YAW] += 360;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
88 }
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
89 curValue = yaw;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
90 break;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
91 }
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
92 if(curValue - lastValue[axis] > MOTION_DELTA_RAISE_LEVEL)
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
93 {
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
94 motionDeltaHistory[axis][nextIndex] = MOTION_DELTA_RAISE;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
95 }
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
96 if(fabsf(curValue - lastValue[axis]) < MOTION_DELTA_RAISE_LEVEL)
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
97 {
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
98 motionDeltaHistory[axis][nextIndex] = MOTION_DELTA_JITTER;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
99 }
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
100 if(fabsf(curValue - lastValue[axis]) < MOTION_DELTA_JITTER_LEVEL)
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
101 {
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
102 motionDeltaHistory[axis][nextIndex] = MOTION_DELTA_STABLE;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
103 }
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
104 if(curValue - lastValue[axis] < MOTION_DELTA_FALL_LEVEL)
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
105 {
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
106 motionDeltaHistory[axis][nextIndex] = MOTION_DELTA_FALL;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
107 }
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
108 lastValue[axis] = curValue;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
109 }
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
110 motionDeltaHistoryIdx = nextIndex;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
111 }
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
112
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
113 SDeltaHistory GetDeltaHistory(uint8_t stepback)
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
114 {
578
beb4d47542f1 Rework pitch detection:
Ideenmodellierer
parents: 574
diff changeset
115 uint8_t loop;
551
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
116 uint8_t index = motionDeltaHistoryIdx;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
117
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
118 SDeltaHistory result = {0,0,0};
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
119
578
beb4d47542f1 Rework pitch detection:
Ideenmodellierer
parents: 574
diff changeset
120 stepback++; /* motionDeltaHistoryIdx is pointing to future entry => step back one to get the latest */
beb4d47542f1 Rework pitch detection:
Ideenmodellierer
parents: 574
diff changeset
121 loop = stepback;
551
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
122 if(stepback < MOTION_DELTA_HISTORY_SIZE)
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
123 {
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
124 while(loop != 0) /* find requested entry */
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
125 {
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
126 loop--;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
127 index--;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
128 if(index == 0)
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
129 {
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
130 index = MOTION_DELTA_HISTORY_SIZE - 1;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
131 }
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
132 }
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
133 result.roll = motionDeltaHistory[MOTION_HISTORY_ROLL][index];
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
134 result.pitch = motionDeltaHistory[MOTION_HISTORY_PITCH][index];
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
135 result.yaw = motionDeltaHistory[MOTION_HISTORY_YAW][index];
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
136 }
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
137 return result;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
138 }
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
139
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
140 uint8_t GetSectorForPitch(float pitch)
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
141 {
383
49a02dea8ae3 Combine variables in a structure to improve readability of code
ideenmodellierer
parents: 381
diff changeset
142 static uint8_t lastsector = 0;
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
143 float newPitch;
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
144 uint8_t sector = 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
145
383
49a02dea8ae3 Combine variables in a structure to improve readability of code
ideenmodellierer
parents: 381
diff changeset
146 newPitch = pitch + sectorDetection.offset + sectorDetection.center; /* do not use negative values and consider offset to center position */
381
695434a6dcf6 Simplified pitch detection state machine:
ideenmodellierer
parents: 378
diff changeset
147 if (newPitch < 0.0) /* clip value */
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
148 {
381
695434a6dcf6 Simplified pitch detection state machine:
ideenmodellierer
parents: 378
diff changeset
149 newPitch = 0.0;
695434a6dcf6 Simplified pitch detection state machine:
ideenmodellierer
parents: 378
diff changeset
150 }
383
49a02dea8ae3 Combine variables in a structure to improve readability of code
ideenmodellierer
parents: 381
diff changeset
151 if (newPitch > sectorDetection.window) /* clip value */
381
695434a6dcf6 Simplified pitch detection state machine:
ideenmodellierer
parents: 378
diff changeset
152 {
383
49a02dea8ae3 Combine variables in a structure to improve readability of code
ideenmodellierer
parents: 381
diff changeset
153 newPitch = sectorDetection.window;
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
154 }
381
695434a6dcf6 Simplified pitch detection state machine:
ideenmodellierer
parents: 378
diff changeset
155
695434a6dcf6 Simplified pitch detection state machine:
ideenmodellierer
parents: 378
diff changeset
156 /* switch to other sector? */
383
49a02dea8ae3 Combine variables in a structure to improve readability of code
ideenmodellierer
parents: 381
diff changeset
157 if((newPitch > sectorDetection.upperborder) || (newPitch <= sectorDetection.lowerborder))
381
695434a6dcf6 Simplified pitch detection state machine:
ideenmodellierer
parents: 378
diff changeset
158 {
383
49a02dea8ae3 Combine variables in a structure to improve readability of code
ideenmodellierer
parents: 381
diff changeset
159 sector = (uint16_t) newPitch / sectorDetection.size;
49a02dea8ae3 Combine variables in a structure to improve readability of code
ideenmodellierer
parents: 381
diff changeset
160 sectorDetection.lowerborder = sector * sectorDetection.size - SECTOR_HYSTERY;
49a02dea8ae3 Combine variables in a structure to improve readability of code
ideenmodellierer
parents: 381
diff changeset
161 sectorDetection.upperborder = (sector + 1) * sectorDetection.size + SECTOR_HYSTERY;
381
695434a6dcf6 Simplified pitch detection state machine:
ideenmodellierer
parents: 378
diff changeset
162 lastsector = sector;
695434a6dcf6 Simplified pitch detection state machine:
ideenmodellierer
parents: 378
diff changeset
163 }
695434a6dcf6 Simplified pitch detection state machine:
ideenmodellierer
parents: 378
diff changeset
164
695434a6dcf6 Simplified pitch detection state machine:
ideenmodellierer
parents: 378
diff changeset
165 return lastsector;
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
166 }
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
167
371
fca370f847f8 Added parameter for number of sectors to be defined
ideenmodellierer
parents: 370
diff changeset
168 void DefinePitchSectors(float centerPitch,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
169 {
371
fca370f847f8 Added parameter for number of sectors to be defined
ideenmodellierer
parents: 370
diff changeset
170 if(numOfSectors == CUSTOMER_DEFINED_VIEWS)
fca370f847f8 Added parameter for number of sectors to be defined
ideenmodellierer
parents: 370
diff changeset
171 {
384
427ae9f8e28e Consider number of available t3 views in sector handling:
ideenmodellierer
parents: 383
diff changeset
172 if(settingsGetPointer()->design == 3) /* Big font view ? */
427ae9f8e28e Consider number of available t3 views in sector handling:
ideenmodellierer
parents: 383
diff changeset
173 {
427ae9f8e28e Consider number of available t3 views in sector handling:
ideenmodellierer
parents: 383
diff changeset
174 sectorDetection.count = t3_GetEnabled_customviews();
427ae9f8e28e Consider number of available t3 views in sector handling:
ideenmodellierer
parents: 383
diff changeset
175 }
427ae9f8e28e Consider number of available t3 views in sector handling:
ideenmodellierer
parents: 383
diff changeset
176 else
427ae9f8e28e Consider number of available t3 views in sector handling:
ideenmodellierer
parents: 383
diff changeset
177 {
427ae9f8e28e Consider number of available t3 views in sector handling:
ideenmodellierer
parents: 383
diff changeset
178 sectorDetection.count = t7_GetEnabled_customviews();
427ae9f8e28e Consider number of available t3 views in sector handling:
ideenmodellierer
parents: 383
diff changeset
179 }
592
f52bc70e380f MotionCtrl - Sectorview Map sectors directly to custom views:
Ideenmodellierer
parents: 585
diff changeset
180 if(sectorDetection.count > SECTOR_MAX_CNT)
371
fca370f847f8 Added parameter for number of sectors to be defined
ideenmodellierer
parents: 370
diff changeset
181 {
592
f52bc70e380f MotionCtrl - Sectorview Map sectors directly to custom views:
Ideenmodellierer
parents: 585
diff changeset
182 sectorDetection.count = SECTOR_MAX_CNT; /* more views are hard to manually control */
371
fca370f847f8 Added parameter for number of sectors to be defined
ideenmodellierer
parents: 370
diff changeset
183 }
fca370f847f8 Added parameter for number of sectors to be defined
ideenmodellierer
parents: 370
diff changeset
184 }
fca370f847f8 Added parameter for number of sectors to be defined
ideenmodellierer
parents: 370
diff changeset
185 else
373
7b981f8bdd41 Add scroll event by pitch angle detection:
ideenmodellierer
parents: 371
diff changeset
186 if(numOfSectors != CUSTOMER_KEEP_LAST_SECTORS)
371
fca370f847f8 Added parameter for number of sectors to be defined
ideenmodellierer
parents: 370
diff changeset
187 {
383
49a02dea8ae3 Combine variables in a structure to improve readability of code
ideenmodellierer
parents: 381
diff changeset
188 sectorDetection.count = numOfSectors;
371
fca370f847f8 Added parameter for number of sectors to be defined
ideenmodellierer
parents: 370
diff changeset
189 }
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
190
383
49a02dea8ae3 Combine variables in a structure to improve readability of code
ideenmodellierer
parents: 381
diff changeset
191 if(sectorDetection.count == SECTOR_MAX)
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
192 {
383
49a02dea8ae3 Combine variables in a structure to improve readability of code
ideenmodellierer
parents: 381
diff changeset
193 sectorDetection.window = SECTOR_WINDOW_MAX;
381
695434a6dcf6 Simplified pitch detection state machine:
ideenmodellierer
parents: 378
diff changeset
194 }
695434a6dcf6 Simplified pitch detection state machine:
ideenmodellierer
parents: 378
diff changeset
195 else
695434a6dcf6 Simplified pitch detection state machine:
ideenmodellierer
parents: 378
diff changeset
196 {
383
49a02dea8ae3 Combine variables in a structure to improve readability of code
ideenmodellierer
parents: 381
diff changeset
197 sectorDetection.window = SECTOR_WINDOW;
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
198 }
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
199
383
49a02dea8ae3 Combine variables in a structure to improve readability of code
ideenmodellierer
parents: 381
diff changeset
200 sectorDetection.offset = (centerPitch - (sectorDetection.window / 2)) * -1.0;
49a02dea8ae3 Combine variables in a structure to improve readability of code
ideenmodellierer
parents: 381
diff changeset
201 sectorDetection.size = sectorDetection.window / sectorDetection.count;
49a02dea8ae3 Combine variables in a structure to improve readability of code
ideenmodellierer
parents: 381
diff changeset
202 sectorDetection.center = 0;
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
203
383
49a02dea8ae3 Combine variables in a structure to improve readability of code
ideenmodellierer
parents: 381
diff changeset
204 /* reset border values */
49a02dea8ae3 Combine variables in a structure to improve readability of code
ideenmodellierer
parents: 381
diff changeset
205 sectorDetection.lowerborder = SECTOR_BORDER;
49a02dea8ae3 Combine variables in a structure to improve readability of code
ideenmodellierer
parents: 381
diff changeset
206 sectorDetection.upperborder = SECTOR_BORDER * -1.0;
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
207 /* get the current sector */
383
49a02dea8ae3 Combine variables in a structure to improve readability of code
ideenmodellierer
parents: 381
diff changeset
208 sectorDetection.current = GetSectorForPitch(stateRealGetPointer()->lifeData.compass_pitch);
49a02dea8ae3 Combine variables in a structure to improve readability of code
ideenmodellierer
parents: 381
diff changeset
209 sectorDetection.target = sectorDetection.current;
49a02dea8ae3 Combine variables in a structure to improve readability of code
ideenmodellierer
parents: 381
diff changeset
210 /* do a small adjustment to center pitch to make sure the actual pitch is in the center of the current sector */
49a02dea8ae3 Combine variables in a structure to improve readability of code
ideenmodellierer
parents: 381
diff changeset
211 sectorDetection.center = (sectorDetection.upperborder) - ((sectorDetection.size + 2 *SECTOR_HYSTERY) / 2.0) - (centerPitch + sectorDetection.offset);
49a02dea8ae3 Combine variables in a structure to improve readability of code
ideenmodellierer
parents: 381
diff changeset
212
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
213 }
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
214
592
f52bc70e380f MotionCtrl - Sectorview Map sectors directly to custom views:
Ideenmodellierer
parents: 585
diff changeset
215
f52bc70e380f MotionCtrl - Sectorview Map sectors directly to custom views:
Ideenmodellierer
parents: 585
diff changeset
216 uint8_t GetCVForSector(uint8_t selSector)
f52bc70e380f MotionCtrl - Sectorview Map sectors directly to custom views:
Ideenmodellierer
parents: 585
diff changeset
217 {
f52bc70e380f MotionCtrl - Sectorview Map sectors directly to custom views:
Ideenmodellierer
parents: 585
diff changeset
218 if(selSector < sectorDetection.count)
f52bc70e380f MotionCtrl - Sectorview Map sectors directly to custom views:
Ideenmodellierer
parents: 585
diff changeset
219 {
f52bc70e380f MotionCtrl - Sectorview Map sectors directly to custom views:
Ideenmodellierer
parents: 585
diff changeset
220 return sectorMap[selSector];
f52bc70e380f MotionCtrl - Sectorview Map sectors directly to custom views:
Ideenmodellierer
parents: 585
diff changeset
221 }
f52bc70e380f MotionCtrl - Sectorview Map sectors directly to custom views:
Ideenmodellierer
parents: 585
diff changeset
222 else
f52bc70e380f MotionCtrl - Sectorview Map sectors directly to custom views:
Ideenmodellierer
parents: 585
diff changeset
223 {
f52bc70e380f MotionCtrl - Sectorview Map sectors directly to custom views:
Ideenmodellierer
parents: 585
diff changeset
224 return 0;
f52bc70e380f MotionCtrl - Sectorview Map sectors directly to custom views:
Ideenmodellierer
parents: 585
diff changeset
225 }
f52bc70e380f MotionCtrl - Sectorview Map sectors directly to custom views:
Ideenmodellierer
parents: 585
diff changeset
226 }
f52bc70e380f MotionCtrl - Sectorview Map sectors directly to custom views:
Ideenmodellierer
parents: 585
diff changeset
227 void MapCVToSector()
f52bc70e380f MotionCtrl - Sectorview Map sectors directly to custom views:
Ideenmodellierer
parents: 585
diff changeset
228 {
f52bc70e380f MotionCtrl - Sectorview Map sectors directly to custom views:
Ideenmodellierer
parents: 585
diff changeset
229 uint8_t centerView = 0;
f52bc70e380f MotionCtrl - Sectorview Map sectors directly to custom views:
Ideenmodellierer
parents: 585
diff changeset
230
f52bc70e380f MotionCtrl - Sectorview Map sectors directly to custom views:
Ideenmodellierer
parents: 585
diff changeset
231 memset(sectorMap, 0, sizeof(sectorMap));
f52bc70e380f MotionCtrl - Sectorview Map sectors directly to custom views:
Ideenmodellierer
parents: 585
diff changeset
232
f52bc70e380f MotionCtrl - Sectorview Map sectors directly to custom views:
Ideenmodellierer
parents: 585
diff changeset
233 switch(sectorDetection.count)
f52bc70e380f MotionCtrl - Sectorview Map sectors directly to custom views:
Ideenmodellierer
parents: 585
diff changeset
234 {
f52bc70e380f MotionCtrl - Sectorview Map sectors directly to custom views:
Ideenmodellierer
parents: 585
diff changeset
235 case 1: centerView = 0; break;
f52bc70e380f MotionCtrl - Sectorview Map sectors directly to custom views:
Ideenmodellierer
parents: 585
diff changeset
236 case 2: centerView = 0; break;
f52bc70e380f MotionCtrl - Sectorview Map sectors directly to custom views:
Ideenmodellierer
parents: 585
diff changeset
237 case 3: centerView = 1; break;
f52bc70e380f MotionCtrl - Sectorview Map sectors directly to custom views:
Ideenmodellierer
parents: 585
diff changeset
238 case 4: centerView = 1; break;
f52bc70e380f MotionCtrl - Sectorview Map sectors directly to custom views:
Ideenmodellierer
parents: 585
diff changeset
239 case 5: centerView = 2; break;
f52bc70e380f MotionCtrl - Sectorview Map sectors directly to custom views:
Ideenmodellierer
parents: 585
diff changeset
240 default: centerView = sectorDetection.count / 2 - 1;
f52bc70e380f MotionCtrl - Sectorview Map sectors directly to custom views:
Ideenmodellierer
parents: 585
diff changeset
241 break;
f52bc70e380f MotionCtrl - Sectorview Map sectors directly to custom views:
Ideenmodellierer
parents: 585
diff changeset
242 }
f52bc70e380f MotionCtrl - Sectorview Map sectors directly to custom views:
Ideenmodellierer
parents: 585
diff changeset
243 if(settingsGetPointer()->design == 3) /* Big font view ? */
f52bc70e380f MotionCtrl - Sectorview Map sectors directly to custom views:
Ideenmodellierer
parents: 585
diff changeset
244 {
595
fd0b60dee6f3 Bugfix Selection of primary view:
Ideenmodellierer
parents: 592
diff changeset
245 t3_set_customview_to_primary();
fd0b60dee6f3 Bugfix Selection of primary view:
Ideenmodellierer
parents: 592
diff changeset
246 sectorMap[centerView] = t3_change_customview(ACTION_END);
592
f52bc70e380f MotionCtrl - Sectorview Map sectors directly to custom views:
Ideenmodellierer
parents: 585
diff changeset
247 }
f52bc70e380f MotionCtrl - Sectorview Map sectors directly to custom views:
Ideenmodellierer
parents: 585
diff changeset
248 else
f52bc70e380f MotionCtrl - Sectorview Map sectors directly to custom views:
Ideenmodellierer
parents: 585
diff changeset
249 {
595
fd0b60dee6f3 Bugfix Selection of primary view:
Ideenmodellierer
parents: 592
diff changeset
250 t7_set_customview_to_primary();
fd0b60dee6f3 Bugfix Selection of primary view:
Ideenmodellierer
parents: 592
diff changeset
251 sectorMap[centerView] = t7_change_customview(ACTION_END);
fd0b60dee6f3 Bugfix Selection of primary view:
Ideenmodellierer
parents: 592
diff changeset
252
592
f52bc70e380f MotionCtrl - Sectorview Map sectors directly to custom views:
Ideenmodellierer
parents: 585
diff changeset
253 }
f52bc70e380f MotionCtrl - Sectorview Map sectors directly to custom views:
Ideenmodellierer
parents: 585
diff changeset
254
f52bc70e380f MotionCtrl - Sectorview Map sectors directly to custom views:
Ideenmodellierer
parents: 585
diff changeset
255 centerView++;
f52bc70e380f MotionCtrl - Sectorview Map sectors directly to custom views:
Ideenmodellierer
parents: 585
diff changeset
256 while(sectorMap[centerView] == 0)
f52bc70e380f MotionCtrl - Sectorview Map sectors directly to custom views:
Ideenmodellierer
parents: 585
diff changeset
257 {
f52bc70e380f MotionCtrl - Sectorview Map sectors directly to custom views:
Ideenmodellierer
parents: 585
diff changeset
258 if(settingsGetPointer()->design == 3) /* Big font view ? */
f52bc70e380f MotionCtrl - Sectorview Map sectors directly to custom views:
Ideenmodellierer
parents: 585
diff changeset
259 {
f52bc70e380f MotionCtrl - Sectorview Map sectors directly to custom views:
Ideenmodellierer
parents: 585
diff changeset
260 sectorMap[centerView] = t3_change_customview(ACTION_BUTTON_ENTER);
f52bc70e380f MotionCtrl - Sectorview Map sectors directly to custom views:
Ideenmodellierer
parents: 585
diff changeset
261 }
f52bc70e380f MotionCtrl - Sectorview Map sectors directly to custom views:
Ideenmodellierer
parents: 585
diff changeset
262 else
f52bc70e380f MotionCtrl - Sectorview Map sectors directly to custom views:
Ideenmodellierer
parents: 585
diff changeset
263 {
f52bc70e380f MotionCtrl - Sectorview Map sectors directly to custom views:
Ideenmodellierer
parents: 585
diff changeset
264 sectorMap[centerView] = t7_change_customview(ACTION_BUTTON_ENTER);
f52bc70e380f MotionCtrl - Sectorview Map sectors directly to custom views:
Ideenmodellierer
parents: 585
diff changeset
265 }
f52bc70e380f MotionCtrl - Sectorview Map sectors directly to custom views:
Ideenmodellierer
parents: 585
diff changeset
266 centerView++;
f52bc70e380f MotionCtrl - Sectorview Map sectors directly to custom views:
Ideenmodellierer
parents: 585
diff changeset
267 if(centerView == sectorDetection.count)
f52bc70e380f MotionCtrl - Sectorview Map sectors directly to custom views:
Ideenmodellierer
parents: 585
diff changeset
268 {
f52bc70e380f MotionCtrl - Sectorview Map sectors directly to custom views:
Ideenmodellierer
parents: 585
diff changeset
269 centerView = 0;
f52bc70e380f MotionCtrl - Sectorview Map sectors directly to custom views:
Ideenmodellierer
parents: 585
diff changeset
270 }
f52bc70e380f MotionCtrl - Sectorview Map sectors directly to custom views:
Ideenmodellierer
parents: 585
diff changeset
271 }
f52bc70e380f MotionCtrl - Sectorview Map sectors directly to custom views:
Ideenmodellierer
parents: 585
diff changeset
272
f52bc70e380f MotionCtrl - Sectorview Map sectors directly to custom views:
Ideenmodellierer
parents: 585
diff changeset
273 }
f52bc70e380f MotionCtrl - Sectorview Map sectors directly to custom views:
Ideenmodellierer
parents: 585
diff changeset
274
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
275 void InitMotionDetection(void)
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
276 {
621
6826731ff2be Use roll and pitch agles in 0-360 format:
Ideenmodellierer
parents: 618
diff changeset
277 float sensorPitch = settingsGetPointer()->viewPitch - 180.0; /* calib values are stored as 360° values. Sensor uses +/- 180° */
383
49a02dea8ae3 Combine variables in a structure to improve readability of code
ideenmodellierer
parents: 381
diff changeset
278 sectorDetection.target = 0;
49a02dea8ae3 Combine variables in a structure to improve readability of code
ideenmodellierer
parents: 381
diff changeset
279 sectorDetection.current = 0;
49a02dea8ae3 Combine variables in a structure to improve readability of code
ideenmodellierer
parents: 381
diff changeset
280 sectorDetection.size = 0;
49a02dea8ae3 Combine variables in a structure to improve readability of code
ideenmodellierer
parents: 381
diff changeset
281 sectorDetection.count = 0;
371
fca370f847f8 Added parameter for number of sectors to be defined
ideenmodellierer
parents: 370
diff changeset
282
fca370f847f8 Added parameter for number of sectors to be defined
ideenmodellierer
parents: 370
diff changeset
283 switch(settingsGetPointer()->MotionDetection)
fca370f847f8 Added parameter for number of sectors to be defined
ideenmodellierer
parents: 370
diff changeset
284 {
621
6826731ff2be Use roll and pitch agles in 0-360 format:
Ideenmodellierer
parents: 618
diff changeset
285 case MOTION_DETECT_SECTOR: DefinePitchSectors(sensorPitch,CUSTOMER_DEFINED_VIEWS);
592
f52bc70e380f MotionCtrl - Sectorview Map sectors directly to custom views:
Ideenmodellierer
parents: 585
diff changeset
286 MapCVToSector();
371
fca370f847f8 Added parameter for number of sectors to be defined
ideenmodellierer
parents: 370
diff changeset
287 break;
621
6826731ff2be Use roll and pitch agles in 0-360 format:
Ideenmodellierer
parents: 618
diff changeset
288 case MOTION_DETECT_MOVE: DefinePitchSectors(sensorPitch,SECTOR_MAX);
371
fca370f847f8 Added parameter for number of sectors to be defined
ideenmodellierer
parents: 370
diff changeset
289 break;
621
6826731ff2be Use roll and pitch agles in 0-360 format:
Ideenmodellierer
parents: 618
diff changeset
290 case MOTION_DETECT_SCROLL: DefinePitchSectors(sensorPitch,SECTOR_SCROLL);
373
7b981f8bdd41 Add scroll event by pitch angle detection:
ideenmodellierer
parents: 371
diff changeset
291 break;
371
fca370f847f8 Added parameter for number of sectors to be defined
ideenmodellierer
parents: 370
diff changeset
292 default:
fca370f847f8 Added parameter for number of sectors to be defined
ideenmodellierer
parents: 370
diff changeset
293 break;
fca370f847f8 Added parameter for number of sectors to be defined
ideenmodellierer
parents: 370
diff changeset
294 }
fca370f847f8 Added parameter for number of sectors to be defined
ideenmodellierer
parents: 370
diff changeset
295
551
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
296 resetMotionDeltaHistory();
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
297 }
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
298
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
299 /* Map the current pitch value to a sector and create button event in case the sector is left */
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
300 detectionState_t detectSectorButtonEvent(float curPitch)
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
301 {
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
302 uint8_t newTargetSector;
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
303
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
304 newTargetSector = GetSectorForPitch(stateRealGetPointer()->lifeData.compass_pitch);
592
f52bc70e380f MotionCtrl - Sectorview Map sectors directly to custom views:
Ideenmodellierer
parents: 585
diff changeset
305
f52bc70e380f MotionCtrl - Sectorview Map sectors directly to custom views:
Ideenmodellierer
parents: 585
diff changeset
306 if(settingsGetPointer()->design == 3) /* Big font view ? */
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
307 {
592
f52bc70e380f MotionCtrl - Sectorview Map sectors directly to custom views:
Ideenmodellierer
parents: 585
diff changeset
308 t3_select_customview(GetCVForSector(newTargetSector));
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
309 }
592
f52bc70e380f MotionCtrl - Sectorview Map sectors directly to custom views:
Ideenmodellierer
parents: 585
diff changeset
310 else
f52bc70e380f MotionCtrl - Sectorview Map sectors directly to custom views:
Ideenmodellierer
parents: 585
diff changeset
311 {
f52bc70e380f MotionCtrl - Sectorview Map sectors directly to custom views:
Ideenmodellierer
parents: 585
diff changeset
312 t7_select_customview(GetCVForSector(newTargetSector));
f52bc70e380f MotionCtrl - Sectorview Map sectors directly to custom views:
Ideenmodellierer
parents: 585
diff changeset
313 }
f52bc70e380f MotionCtrl - Sectorview Map sectors directly to custom views:
Ideenmodellierer
parents: 585
diff changeset
314
f52bc70e380f MotionCtrl - Sectorview Map sectors directly to custom views:
Ideenmodellierer
parents: 585
diff changeset
315 return DETECT_NOTHING;
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
316 }
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
317
373
7b981f8bdd41 Add scroll event by pitch angle detection:
ideenmodellierer
parents: 371
diff changeset
318 /* Check if pitch is not in center position and trigger a button action if needed */
7b981f8bdd41 Add scroll event by pitch angle detection:
ideenmodellierer
parents: 371
diff changeset
319 detectionState_t detectScrollButtonEvent(float curPitch)
7b981f8bdd41 Add scroll event by pitch angle detection:
ideenmodellierer
parents: 371
diff changeset
320 {
378
834e087505ec Incremented "idle window" for scroll detection
ideenmodellierer
parents: 373
diff changeset
321 static uint8_t delayscroll = 0; /* slow down the number of scroll events */
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
322
373
7b981f8bdd41 Add scroll event by pitch angle detection:
ideenmodellierer
parents: 371
diff changeset
323 uint8_t PitchEvent = DETECT_NOTHING;
7b981f8bdd41 Add scroll event by pitch angle detection:
ideenmodellierer
parents: 371
diff changeset
324 uint8_t newSector;
7b981f8bdd41 Add scroll event by pitch angle detection:
ideenmodellierer
parents: 371
diff changeset
325
7b981f8bdd41 Add scroll event by pitch angle detection:
ideenmodellierer
parents: 371
diff changeset
326 if(delayscroll == 0)
7b981f8bdd41 Add scroll event by pitch angle detection:
ideenmodellierer
parents: 371
diff changeset
327 {
7b981f8bdd41 Add scroll event by pitch angle detection:
ideenmodellierer
parents: 371
diff changeset
328 newSector = GetSectorForPitch(stateRealGetPointer()->lifeData.compass_pitch);
551
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
329 /* for scroll detection the motion window is split into 6 sectors => set event accoring to the sector number*/
373
7b981f8bdd41 Add scroll event by pitch angle detection:
ideenmodellierer
parents: 371
diff changeset
330 switch(newSector)
7b981f8bdd41 Add scroll event by pitch angle detection:
ideenmodellierer
parents: 371
diff changeset
331 {
574
01ee21dd311f Improved focus detection:
Ideenmodellierer
parents: 551
diff changeset
332 case 0: PitchEvent = DETECT_POS_PITCH;
373
7b981f8bdd41 Add scroll event by pitch angle detection:
ideenmodellierer
parents: 371
diff changeset
333 break;
378
834e087505ec Incremented "idle window" for scroll detection
ideenmodellierer
parents: 373
diff changeset
334 case 6: PitchEvent = DETECT_NEG_PITCH;
373
7b981f8bdd41 Add scroll event by pitch angle detection:
ideenmodellierer
parents: 371
diff changeset
335 break;
7b981f8bdd41 Add scroll event by pitch angle detection:
ideenmodellierer
parents: 371
diff changeset
336 default:
7b981f8bdd41 Add scroll event by pitch angle detection:
ideenmodellierer
parents: 371
diff changeset
337 break;
7b981f8bdd41 Add scroll event by pitch angle detection:
ideenmodellierer
parents: 371
diff changeset
338 }
7b981f8bdd41 Add scroll event by pitch angle detection:
ideenmodellierer
parents: 371
diff changeset
339 if(PitchEvent != DETECT_NOTHING)
7b981f8bdd41 Add scroll event by pitch angle detection:
ideenmodellierer
parents: 371
diff changeset
340 {
574
01ee21dd311f Improved focus detection:
Ideenmodellierer
parents: 551
diff changeset
341 delayscroll = 7;
373
7b981f8bdd41 Add scroll event by pitch angle detection:
ideenmodellierer
parents: 371
diff changeset
342 }
7b981f8bdd41 Add scroll event by pitch angle detection:
ideenmodellierer
parents: 371
diff changeset
343 }
7b981f8bdd41 Add scroll event by pitch angle detection:
ideenmodellierer
parents: 371
diff changeset
344 else
7b981f8bdd41 Add scroll event by pitch angle detection:
ideenmodellierer
parents: 371
diff changeset
345 {
7b981f8bdd41 Add scroll event by pitch angle detection:
ideenmodellierer
parents: 371
diff changeset
346 delayscroll--;
7b981f8bdd41 Add scroll event by pitch angle detection:
ideenmodellierer
parents: 371
diff changeset
347 }
7b981f8bdd41 Add scroll event by pitch angle detection:
ideenmodellierer
parents: 371
diff changeset
348 return PitchEvent;
7b981f8bdd41 Add scroll event by pitch angle detection:
ideenmodellierer
parents: 371
diff changeset
349 }
7b981f8bdd41 Add scroll event by pitch angle detection:
ideenmodellierer
parents: 371
diff changeset
350
7b981f8bdd41 Add scroll event by pitch angle detection:
ideenmodellierer
parents: 371
diff changeset
351
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
352 /* Detect if user is generating an pitch including return to starting position */
359
4258ea9b67fa Added new files for motion detection (shaking) detection
ideenmodellierer
parents:
diff changeset
353 /* This is done by feeding the past movements value per value into a state machine */
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
354 detectionState_t detectPitch(float currentPitch)
359
4258ea9b67fa Added new files for motion detection (shaking) detection
ideenmodellierer
parents:
diff changeset
355 {
578
beb4d47542f1 Rework pitch detection:
Ideenmodellierer
parents: 574
diff changeset
356 static int8_t lastStart = 0;
551
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
357 uint8_t exit = 0;
578
beb4d47542f1 Rework pitch detection:
Ideenmodellierer
parents: 574
diff changeset
358 int8_t step = 0;
574
01ee21dd311f Improved focus detection:
Ideenmodellierer
parents: 551
diff changeset
359 uint8_t duration = 0;
551
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
360 SDeltaHistory test;
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
361
578
beb4d47542f1 Rework pitch detection:
Ideenmodellierer
parents: 574
diff changeset
362 if(lastStart < 0)
beb4d47542f1 Rework pitch detection:
Ideenmodellierer
parents: 574
diff changeset
363 {
beb4d47542f1 Rework pitch detection:
Ideenmodellierer
parents: 574
diff changeset
364 detectionState = DETECT_NOTHING;
beb4d47542f1 Rework pitch detection:
Ideenmodellierer
parents: 574
diff changeset
365 lastStart = 0;
beb4d47542f1 Rework pitch detection:
Ideenmodellierer
parents: 574
diff changeset
366 }
beb4d47542f1 Rework pitch detection:
Ideenmodellierer
parents: 574
diff changeset
367 else
beb4d47542f1 Rework pitch detection:
Ideenmodellierer
parents: 574
diff changeset
368 {
beb4d47542f1 Rework pitch detection:
Ideenmodellierer
parents: 574
diff changeset
369 detectionState = DETECT_START;
beb4d47542f1 Rework pitch detection:
Ideenmodellierer
parents: 574
diff changeset
370 }
beb4d47542f1 Rework pitch detection:
Ideenmodellierer
parents: 574
diff changeset
371 step = lastStart;
beb4d47542f1 Rework pitch detection:
Ideenmodellierer
parents: 574
diff changeset
372 do
551
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
373 {
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
374 test = GetDeltaHistory(step);
574
01ee21dd311f Improved focus detection:
Ideenmodellierer
parents: 551
diff changeset
375 duration++;
551
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
376 switch (detectionState)
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
377 {
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
378 case DETECT_NOTHING: if(test.pitch > MOTION_DELTA_STABLE)
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
379 {
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
380 exit = 1;
578
beb4d47542f1 Rework pitch detection:
Ideenmodellierer
parents: 574
diff changeset
381 lastStart = -2;
551
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
382 }
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
383 else
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
384 {
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
385 detectionState = DETECT_START;
578
beb4d47542f1 Rework pitch detection:
Ideenmodellierer
parents: 574
diff changeset
386 lastStart = -1;
551
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
387 }
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
388 break;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
389 case DETECT_START: if(test.pitch == MOTION_DELTA_RAISE)
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
390 {
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
391 detectionState = DETECT_POS_MOVE;
578
beb4d47542f1 Rework pitch detection:
Ideenmodellierer
parents: 574
diff changeset
392 lastStart = step;
551
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
393 }
578
beb4d47542f1 Rework pitch detection:
Ideenmodellierer
parents: 574
diff changeset
394 else
551
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
395 if(test.pitch == MOTION_DELTA_FALL)
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
396 {
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
397 detectionState = DETECT_NEG_MOVE;
578
beb4d47542f1 Rework pitch detection:
Ideenmodellierer
parents: 574
diff changeset
398 lastStart = step;
beb4d47542f1 Rework pitch detection:
Ideenmodellierer
parents: 574
diff changeset
399 }
beb4d47542f1 Rework pitch detection:
Ideenmodellierer
parents: 574
diff changeset
400 else
beb4d47542f1 Rework pitch detection:
Ideenmodellierer
parents: 574
diff changeset
401 {
beb4d47542f1 Rework pitch detection:
Ideenmodellierer
parents: 574
diff changeset
402 lastStart = -1;
551
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
403 }
574
01ee21dd311f Improved focus detection:
Ideenmodellierer
parents: 551
diff changeset
404 duration = 0;
551
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
405 break;
578
beb4d47542f1 Rework pitch detection:
Ideenmodellierer
parents: 574
diff changeset
406 case DETECT_NEG_MOVE: if((test.pitch <= MOTION_DELTA_JITTER) || (test.pitch == MOTION_DELTA_RAISE))
beb4d47542f1 Rework pitch detection:
Ideenmodellierer
parents: 574
diff changeset
407 {
beb4d47542f1 Rework pitch detection:
Ideenmodellierer
parents: 574
diff changeset
408 detectionState++;
beb4d47542f1 Rework pitch detection:
Ideenmodellierer
parents: 574
diff changeset
409 }
beb4d47542f1 Rework pitch detection:
Ideenmodellierer
parents: 574
diff changeset
410 break;
beb4d47542f1 Rework pitch detection:
Ideenmodellierer
parents: 574
diff changeset
411 case DETECT_POS_MOVE: if((test.pitch <= MOTION_DELTA_JITTER) || (test.pitch == MOTION_DELTA_FALL))
551
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
412 {
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
413 detectionState++;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
414 }
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
415 break;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
416 case DETECT_MAXIMA: if(test.pitch == MOTION_DELTA_FALL)
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
417 {
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
418 detectionState = DETECT_FALLBACK;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
419 }
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
420 break;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
421 case DETECT_MINIMA: if(test.pitch == MOTION_DELTA_RAISE)
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
422 {
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
423 detectionState = DETECT_RISEBACK;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
424 }
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
425 break;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
426 case DETECT_RISEBACK:
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
427 case DETECT_FALLBACK: if(test.pitch == MOTION_DELTA_STABLE)
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
428 {
578
beb4d47542f1 Rework pitch detection:
Ideenmodellierer
parents: 574
diff changeset
429 if(duration > 4) /* avoid detection triggered by short moves */
574
01ee21dd311f Improved focus detection:
Ideenmodellierer
parents: 551
diff changeset
430 {
01ee21dd311f Improved focus detection:
Ideenmodellierer
parents: 551
diff changeset
431 detectionState++;
01ee21dd311f Improved focus detection:
Ideenmodellierer
parents: 551
diff changeset
432 }
578
beb4d47542f1 Rework pitch detection:
Ideenmodellierer
parents: 574
diff changeset
433 exit = 1;
beb4d47542f1 Rework pitch detection:
Ideenmodellierer
parents: 574
diff changeset
434 lastStart = -2;
551
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
435 }
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
436 break;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
437 default:
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
438 detectionState = DETECT_NOTHING;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
439 exit = 1;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
440 break;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
441 }
578
beb4d47542f1 Rework pitch detection:
Ideenmodellierer
parents: 574
diff changeset
442 step--;
beb4d47542f1 Rework pitch detection:
Ideenmodellierer
parents: 574
diff changeset
443 } while((step >= 0) && (!exit));
beb4d47542f1 Rework pitch detection:
Ideenmodellierer
parents: 574
diff changeset
444
beb4d47542f1 Rework pitch detection:
Ideenmodellierer
parents: 574
diff changeset
445 if((lastStart < MOTION_DELTA_HISTORY_SIZE))
beb4d47542f1 Rework pitch detection:
Ideenmodellierer
parents: 574
diff changeset
446 {
beb4d47542f1 Rework pitch detection:
Ideenmodellierer
parents: 574
diff changeset
447 lastStart++; /* prepare value for next iteration (history index will be increased) */
beb4d47542f1 Rework pitch detection:
Ideenmodellierer
parents: 574
diff changeset
448 }
beb4d47542f1 Rework pitch detection:
Ideenmodellierer
parents: 574
diff changeset
449 else
beb4d47542f1 Rework pitch detection:
Ideenmodellierer
parents: 574
diff changeset
450 {
beb4d47542f1 Rework pitch detection:
Ideenmodellierer
parents: 574
diff changeset
451 lastStart = -1;
551
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
452 }
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
453 if((detectionState != DETECT_POS_PITCH) && (detectionState != DETECT_NEG_PITCH)) /* nothing found */
359
4258ea9b67fa Added new files for motion detection (shaking) detection
ideenmodellierer
parents:
diff changeset
454 {
4258ea9b67fa Added new files for motion detection (shaking) detection
ideenmodellierer
parents:
diff changeset
455 detectionState = DETECT_NOTHING;
4258ea9b67fa Added new files for motion detection (shaking) detection
ideenmodellierer
parents:
diff changeset
456 }
551
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
457 else /* dont detect the same event twice */
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
458 {
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
459 resetMotionDeltaHistory();
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
460 }
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
461 return detectionState;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
462 }
363
bdf978d2a5d4 Reworked detection function
ideenmodellierer
parents: 362
diff changeset
463
551
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
464 void anglesToCoord(float roll, float pitch, float yaw, SCoord *pCoord)
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
465 {
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
466 pCoord->x = ((cosf(yaw) * cosf(pitch)) * pCoord->x + (cosf(yaw)*sinf(pitch)*sinf(roll) - (sinf(yaw)* cosf(roll))) * pCoord->y + (cosf(yaw)*sinf(pitch)*cosf(roll) + sinf(yaw)*sinf(roll)) * pCoord->z);
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
467 pCoord->y = ((sinf(yaw) * cosf(pitch)) * pCoord->x + (sinf(yaw)*sinf(pitch)*sinf(roll) + cosf(yaw) * cosf(roll)) * pCoord->y + ( sinf(yaw) * sinf(pitch) * cosf(roll) - cosf(yaw) * sinf(roll))* pCoord->z);
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
468 pCoord->z = ((-1*sinf(pitch)) * pCoord->x + (cosf(pitch) *sinf(roll)) * pCoord->y + (cosf(pitch) * cosf(roll))* pCoord->z);
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
469 }
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
470
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
471 SCoord CoordAdd(SCoord cA, SCoord cB)
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
472 {
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
473 SCoord result;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
474
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
475 result.x = cA.x + cB.x;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
476 result.y = cA.y + cB.y;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
477 result.z = cA.z + cB.z;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
478 return result;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
479 }
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
480
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
481 SCoord CoordSub(SCoord cA, SCoord cB)
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
482 {
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
483 SCoord result;
373
7b981f8bdd41 Add scroll event by pitch angle detection:
ideenmodellierer
parents: 371
diff changeset
484
551
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
485 result.x = cA.x - cB.x;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
486 result.y = cA.y - cB.y;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
487 result.z = cA.z - cB.z;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
488 return result;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
489 }
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
490
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
491 SCoord CoordCross(SCoord cA, SCoord cB)
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
492 {
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
493 SCoord result;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
494
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
495 result.x = (cA.y * cB.z) - (cA.z * cB.y);
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
496 result.y = (cA.z * cB.x) - (cA.x * cB.z);
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
497 result.z = (cA.x * cB.y) - (cA.y * cB.x);
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
498
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
499 return result;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
500
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
501 }
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
502
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
503 SCoord CoordMulF(SCoord op, float factor)
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
504 {
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
505 SCoord result;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
506 result.x = (op.x * factor);
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
507 result.y = (op.y * factor);
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
508 result.z = (op.z * factor);
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
509
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
510 return result;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
511 }
373
7b981f8bdd41 Add scroll event by pitch angle detection:
ideenmodellierer
parents: 371
diff changeset
512
551
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
513 SCoord CoordDivF(SCoord op, float factor)
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
514 {
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
515 SCoord result;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
516 result.x = (op.x / factor);
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
517 result.y = (op.y / factor);
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
518 result.z = (op.z / factor);
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
519
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
520 return result;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
521 }
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
522
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
523 float CoordDot(SCoord cA, SCoord cB)
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
524 {
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
525 float result;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
526
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
527 result = cA.x * cB.x + cA.y * cB.y + cB.z*cA.z;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
528 return result;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
529 }
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
530
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
531 void calibrateViewport(float roll, float pitch, float yaw)
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
532 {
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
533 SSettings* pSettings = settingsGetPointer();
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
534
621
6826731ff2be Use roll and pitch agles in 0-360 format:
Ideenmodellierer
parents: 618
diff changeset
535 pSettings->viewPitch = pitch + 180;
6826731ff2be Use roll and pitch agles in 0-360 format:
Ideenmodellierer
parents: 618
diff changeset
536 pSettings->viewRoll = roll+ 180;
551
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
537 pSettings->viewYaw = yaw;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
538 }
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
539
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
540
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
541 float checkViewport(float roll, float pitch, float yaw)
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
542 {
574
01ee21dd311f Improved focus detection:
Ideenmodellierer
parents: 551
diff changeset
543 static float freezeRoll = 0;
01ee21dd311f Improved focus detection:
Ideenmodellierer
parents: 551
diff changeset
544 static float freezeYaw = 0;
01ee21dd311f Improved focus detection:
Ideenmodellierer
parents: 551
diff changeset
545
551
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
546 uint8_t retval = 0;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
547 float angleYaw;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
548 float anglePitch;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
549 float angleRoll;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
550 float distance = 0;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
551 float _a, _b;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
552 SCoord u,v,n;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
553 float r;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
554
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
555 SCoord refVec;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
556 SCoord axis_1;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
557 SCoord axis_2;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
558 SCoord curVec;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
559 SCoord resultVec;
574
01ee21dd311f Improved focus detection:
Ideenmodellierer
parents: 551
diff changeset
560 SDeltaHistory test;
551
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
561
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
562 SSettings* pSettings = settingsGetPointer();
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
563
621
6826731ff2be Use roll and pitch agles in 0-360 format:
Ideenmodellierer
parents: 618
diff changeset
564 roll += 180;
6826731ff2be Use roll and pitch agles in 0-360 format:
Ideenmodellierer
parents: 618
diff changeset
565 pitch += 180;
6826731ff2be Use roll and pitch agles in 0-360 format:
Ideenmodellierer
parents: 618
diff changeset
566
551
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
567 /* calculate base vector taking calibration delta into account yaw (heading) */
621
6826731ff2be Use roll and pitch agles in 0-360 format:
Ideenmodellierer
parents: 618
diff changeset
568 float compYaw;
574
01ee21dd311f Improved focus detection:
Ideenmodellierer
parents: 551
diff changeset
569
01ee21dd311f Improved focus detection:
Ideenmodellierer
parents: 551
diff changeset
570 compYaw = 360.0 - yaw; /* turn to 0° */
01ee21dd311f Improved focus detection:
Ideenmodellierer
parents: 551
diff changeset
571 compYaw += pSettings->viewYaw; /* consider calib yaw value */
01ee21dd311f Improved focus detection:
Ideenmodellierer
parents: 551
diff changeset
572 compYaw += yaw;
01ee21dd311f Improved focus detection:
Ideenmodellierer
parents: 551
diff changeset
573
551
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
574 if (compYaw < 0.0)
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
575 {
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
576 compYaw = 360.0 + compYaw;
381
695434a6dcf6 Simplified pitch detection state machine:
ideenmodellierer
parents: 378
diff changeset
577 }
551
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
578
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
579 if (compYaw > 360.0)
381
695434a6dcf6 Simplified pitch detection state machine:
ideenmodellierer
parents: 378
diff changeset
580 {
574
01ee21dd311f Improved focus detection:
Ideenmodellierer
parents: 551
diff changeset
581 compYaw = compYaw - 360.0;
373
7b981f8bdd41 Add scroll event by pitch angle detection:
ideenmodellierer
parents: 371
diff changeset
582 }
574
01ee21dd311f Improved focus detection:
Ideenmodellierer
parents: 551
diff changeset
583 if (compYaw > 360.0)
01ee21dd311f Improved focus detection:
Ideenmodellierer
parents: 551
diff changeset
584 {
01ee21dd311f Improved focus detection:
Ideenmodellierer
parents: 551
diff changeset
585 compYaw = compYaw - 360.0;
01ee21dd311f Improved focus detection:
Ideenmodellierer
parents: 551
diff changeset
586 }
01ee21dd311f Improved focus detection:
Ideenmodellierer
parents: 551
diff changeset
587 angleYaw = pSettings->viewYaw * M_PI / 180.0;
551
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
588 anglePitch = pSettings->viewPitch * M_PI / 180.0;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
589 angleRoll = pSettings->viewRoll * M_PI / 180.0;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
590
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
591 refVec.x = 0;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
592 refVec.y = 0;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
593 refVec.z = 1.0;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
594
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
595 anglesToCoord(angleRoll,anglePitch,angleYaw, &refVec);
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
596
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
597 anglePitch = pitch * M_PI / 180.0;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
598 angleRoll = roll * M_PI / 180.0;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
599 angleYaw = yaw * M_PI / 180.0;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
600
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
601 /* assume x = 0 and y = 1 => find matching vector so axis_1 is 90° to axis_2 */
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
602 axis_1.x = 0;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
603 if(refVec.y >=0)
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
604 {
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
605 axis_2.y = 1; /* => Spawn y == refVec y */
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
606 }
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
607 else axis_1.y = -1;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
608 axis_1.z = -1.0 * refVec.y / refVec.z;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
609 axis_2 = CoordCross(refVec, axis_1); /* Cross is 90° to refVec and Spawn as well => Plane Spawn / cross */
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
610
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
611 /* check if detection plane is correct */
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
612 u = CoordSub(axis_1,refVec);
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
613 v = CoordSub(axis_2,refVec);
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
614 n = CoordCross(u,v);
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
615
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
616 if((fabsf(n.x) <= 0.0001) && (fabsf(n.y) <= 0.0001) && (fabsf(n.z) <= 0.0001))
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
617 {
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
618 retval = 2;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
619 }
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
620 else
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
621 {
574
01ee21dd311f Improved focus detection:
Ideenmodellierer
parents: 551
diff changeset
622 angleYaw = compYaw * M_PI / 180.0;
551
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
623 anglePitch = pitch * M_PI / 180.0;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
624 angleRoll = roll * M_PI / 180.0;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
625 curVec.x = 0;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
626 curVec.y = 0;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
627 curVec.z = 1.0;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
628 anglesToCoord(angleRoll,anglePitch,angleYaw, &curVec);
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
629
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
630 _a = CoordDot(curVec,n);
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
631 _b = CoordDot(refVec,n);
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
632
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
633 if(_b>=(-0.0001)&&_b<=0.0001) /* Check if view port is parallel (no matchpoint) */
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
634 {
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
635 retval = 3;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
636 }
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
637 else
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
638 {
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
639 r=_a/_b;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
640 if(r<0.00||r>1.40) /* are we looking into wrong direction? */
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
641 {
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
642 retval = 4;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
643 }
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
644 }
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
645 distance = retval * 1.0; /* just for debugging */
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
646 if(retval == 0)
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
647 {
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
648
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
649 /* start calculating the matchpoint */
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
650 curVec = CoordMulF(curVec,r);
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
651 resultVec = CoordSub(refVec,curVec);
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
652
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
653 /* calculate the distance between reference and actual vector */
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
654 resultVec.x = resultVec.x * resultVec.x;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
655 resultVec.y = resultVec.y * resultVec.y;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
656 resultVec.z = resultVec.z * resultVec.z;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
657
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
658 if((resultVec.x == 0) && (resultVec.y == 0) && (resultVec.z == 0))
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
659 {
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
660 distance = 0.0;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
661 }
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
662 else
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
663 {
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
664 distance = sqrtf((resultVec.x + resultVec.y + resultVec.z));
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
665 }
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
666 }
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
667 }
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
668
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
669 if(distance < 0.5) /* handle focus counter to avoid fast in/out focus changes */
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
670 {
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
671 if(focusCnt < 10)
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
672 {
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
673 if((focusCnt == 9) && (inFocus == 0)) /* we will get into focus */
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
674 {
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
675 resetMotionDeltaHistory();
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
676 }
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
677 focusCnt++;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
678 }
574
01ee21dd311f Improved focus detection:
Ideenmodellierer
parents: 551
diff changeset
679 if((focusCnt == 10) && (inFocus == 0))
551
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
680 {
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
681 inFocus = 1;
574
01ee21dd311f Improved focus detection:
Ideenmodellierer
parents: 551
diff changeset
682 freezeRoll = roll;
01ee21dd311f Improved focus detection:
Ideenmodellierer
parents: 551
diff changeset
683 freezeYaw = yaw;
551
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
684 }
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
685 }
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
686 else
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
687 {
574
01ee21dd311f Improved focus detection:
Ideenmodellierer
parents: 551
diff changeset
688 if(focusCnt >= 5) /* Reset focus faster then setting focus */
551
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
689 {
574
01ee21dd311f Improved focus detection:
Ideenmodellierer
parents: 551
diff changeset
690 if(pSettings->MotionDetection != MOTION_DETECT_MOVE) /* only apply extended focus for methods using absolute pitch values */
01ee21dd311f Improved focus detection:
Ideenmodellierer
parents: 551
diff changeset
691 {
01ee21dd311f Improved focus detection:
Ideenmodellierer
parents: 551
diff changeset
692 test = GetDeltaHistory(0);
01ee21dd311f Improved focus detection:
Ideenmodellierer
parents: 551
diff changeset
693 if((test.yaw == MOTION_DELTA_STABLE) && (test.roll == MOTION_DELTA_STABLE))
01ee21dd311f Improved focus detection:
Ideenmodellierer
parents: 551
diff changeset
694 {
01ee21dd311f Improved focus detection:
Ideenmodellierer
parents: 551
diff changeset
695 if((fabsf(freezeRoll - roll) < MOTION_DELTA_JITTER_LEVEL) && (fabsf(freezeYaw - yaw) < MOTION_DELTA_JITTER_LEVEL))
01ee21dd311f Improved focus detection:
Ideenmodellierer
parents: 551
diff changeset
696 {
01ee21dd311f Improved focus detection:
Ideenmodellierer
parents: 551
diff changeset
697 focusCnt++;
01ee21dd311f Improved focus detection:
Ideenmodellierer
parents: 551
diff changeset
698 }
01ee21dd311f Improved focus detection:
Ideenmodellierer
parents: 551
diff changeset
699 }
01ee21dd311f Improved focus detection:
Ideenmodellierer
parents: 551
diff changeset
700 else
01ee21dd311f Improved focus detection:
Ideenmodellierer
parents: 551
diff changeset
701 {
01ee21dd311f Improved focus detection:
Ideenmodellierer
parents: 551
diff changeset
702 if(freezeRoll != 0.0)
01ee21dd311f Improved focus detection:
Ideenmodellierer
parents: 551
diff changeset
703 {
01ee21dd311f Improved focus detection:
Ideenmodellierer
parents: 551
diff changeset
704 focusCnt = 1;
01ee21dd311f Improved focus detection:
Ideenmodellierer
parents: 551
diff changeset
705 }
01ee21dd311f Improved focus detection:
Ideenmodellierer
parents: 551
diff changeset
706 }
01ee21dd311f Improved focus detection:
Ideenmodellierer
parents: 551
diff changeset
707 }
551
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
708 focusCnt--;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
709 }
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
710 else
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
711 {
574
01ee21dd311f Improved focus detection:
Ideenmodellierer
parents: 551
diff changeset
712 focusCnt = 0;
551
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
713 inFocus = 0;
574
01ee21dd311f Improved focus detection:
Ideenmodellierer
parents: 551
diff changeset
714 freezeRoll = 0;
01ee21dd311f Improved focus detection:
Ideenmodellierer
parents: 551
diff changeset
715 freezeYaw = 0;
551
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
716 }
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
717 }
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
718 return distance;
359
4258ea9b67fa Added new files for motion detection (shaking) detection
ideenmodellierer
parents:
diff changeset
719 }
551
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
720 uint8_t viewInFocus(void)
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
721 {
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
722 return inFocus;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
723 }
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
724 void resetFocusState(void)
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
725 {
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
726 inFocus = 0;
e3237f580ae9 Added viewport functionality:
Ideenmodellierer
parents: 385
diff changeset
727 }
611
916998f90e39 Suspend MotionDetection events while diver is operationg the OSTC:
Ideenmodellierer
parents: 595
diff changeset
728
916998f90e39 Suspend MotionDetection events while diver is operationg the OSTC:
Ideenmodellierer
parents: 595
diff changeset
729 void suspendMotionDetection(uint8_t seconds)
916998f90e39 Suspend MotionDetection events while diver is operationg the OSTC:
Ideenmodellierer
parents: 595
diff changeset
730 {
916998f90e39 Suspend MotionDetection events while diver is operationg the OSTC:
Ideenmodellierer
parents: 595
diff changeset
731 suspendMotionDetectionSec = seconds * 10; /* detection function is called every 100ms */
916998f90e39 Suspend MotionDetection events while diver is operationg the OSTC:
Ideenmodellierer
parents: 595
diff changeset
732 }
916998f90e39 Suspend MotionDetection events while diver is operationg the OSTC:
Ideenmodellierer
parents: 595
diff changeset
733
916998f90e39 Suspend MotionDetection events while diver is operationg the OSTC:
Ideenmodellierer
parents: 595
diff changeset
734 void HandleMotionDetection(void)
916998f90e39 Suspend MotionDetection events while diver is operationg the OSTC:
Ideenmodellierer
parents: 595
diff changeset
735 {
916998f90e39 Suspend MotionDetection events while diver is operationg the OSTC:
Ideenmodellierer
parents: 595
diff changeset
736 detectionState_t pitchstate = DETECT_NOTHING;
618
96af74455420 Development bugfix: focus state not remembered:
Ideenmodellierer
parents: 611
diff changeset
737 static uint8_t wasInFocus = 0;
611
916998f90e39 Suspend MotionDetection events while diver is operationg the OSTC:
Ideenmodellierer
parents: 595
diff changeset
738
916998f90e39 Suspend MotionDetection events while diver is operationg the OSTC:
Ideenmodellierer
parents: 595
diff changeset
739 evaluateMotionDelta(stateUsed->lifeData.compass_roll, stateUsed->lifeData.compass_pitch, stateUsed->lifeData.compass_heading);
916998f90e39 Suspend MotionDetection events while diver is operationg the OSTC:
Ideenmodellierer
parents: 595
diff changeset
740 checkViewport(stateUsed->lifeData.compass_roll, stateUsed->lifeData.compass_pitch, stateUsed->lifeData.compass_heading);
916998f90e39 Suspend MotionDetection events while diver is operationg the OSTC:
Ideenmodellierer
parents: 595
diff changeset
741
916998f90e39 Suspend MotionDetection events while diver is operationg the OSTC:
Ideenmodellierer
parents: 595
diff changeset
742 if(viewInFocus())
916998f90e39 Suspend MotionDetection events while diver is operationg the OSTC:
Ideenmodellierer
parents: 595
diff changeset
743 {
916998f90e39 Suspend MotionDetection events while diver is operationg the OSTC:
Ideenmodellierer
parents: 595
diff changeset
744 wasInFocus = 1;
916998f90e39 Suspend MotionDetection events while diver is operationg the OSTC:
Ideenmodellierer
parents: 595
diff changeset
745 set_Backlight_Boost(settingsGetPointer()->viewPortMode & 0x03);
916998f90e39 Suspend MotionDetection events while diver is operationg the OSTC:
Ideenmodellierer
parents: 595
diff changeset
746
916998f90e39 Suspend MotionDetection events while diver is operationg the OSTC:
Ideenmodellierer
parents: 595
diff changeset
747 if(suspendMotionDetectionSec == 0) /* suspend detection while diver is manually operating the OSTC */
916998f90e39 Suspend MotionDetection events while diver is operationg the OSTC:
Ideenmodellierer
parents: 595
diff changeset
748 {
916998f90e39 Suspend MotionDetection events while diver is operationg the OSTC:
Ideenmodellierer
parents: 595
diff changeset
749 switch(settingsGetPointer()->MotionDetection)
916998f90e39 Suspend MotionDetection events while diver is operationg the OSTC:
Ideenmodellierer
parents: 595
diff changeset
750 {
916998f90e39 Suspend MotionDetection events while diver is operationg the OSTC:
Ideenmodellierer
parents: 595
diff changeset
751 case MOTION_DETECT_MOVE: pitchstate = detectPitch(stateRealGetPointer()->lifeData.compass_pitch);
916998f90e39 Suspend MotionDetection events while diver is operationg the OSTC:
Ideenmodellierer
parents: 595
diff changeset
752 break;
916998f90e39 Suspend MotionDetection events while diver is operationg the OSTC:
Ideenmodellierer
parents: 595
diff changeset
753 case MOTION_DETECT_SECTOR: pitchstate = detectSectorButtonEvent(stateRealGetPointer()->lifeData.compass_pitch);
916998f90e39 Suspend MotionDetection events while diver is operationg the OSTC:
Ideenmodellierer
parents: 595
diff changeset
754 break;
916998f90e39 Suspend MotionDetection events while diver is operationg the OSTC:
Ideenmodellierer
parents: 595
diff changeset
755 case MOTION_DETECT_SCROLL: pitchstate = detectScrollButtonEvent(stateRealGetPointer()->lifeData.compass_pitch);
916998f90e39 Suspend MotionDetection events while diver is operationg the OSTC:
Ideenmodellierer
parents: 595
diff changeset
756 break;
916998f90e39 Suspend MotionDetection events while diver is operationg the OSTC:
Ideenmodellierer
parents: 595
diff changeset
757 default:
916998f90e39 Suspend MotionDetection events while diver is operationg the OSTC:
Ideenmodellierer
parents: 595
diff changeset
758 pitchstate = DETECT_NOTHING;
916998f90e39 Suspend MotionDetection events while diver is operationg the OSTC:
Ideenmodellierer
parents: 595
diff changeset
759 break;
916998f90e39 Suspend MotionDetection events while diver is operationg the OSTC:
Ideenmodellierer
parents: 595
diff changeset
760 }
916998f90e39 Suspend MotionDetection events while diver is operationg the OSTC:
Ideenmodellierer
parents: 595
diff changeset
761 }
916998f90e39 Suspend MotionDetection events while diver is operationg the OSTC:
Ideenmodellierer
parents: 595
diff changeset
762
916998f90e39 Suspend MotionDetection events while diver is operationg the OSTC:
Ideenmodellierer
parents: 595
diff changeset
763 if(DETECT_NEG_PITCH == pitchstate)
916998f90e39 Suspend MotionDetection events while diver is operationg the OSTC:
Ideenmodellierer
parents: 595
diff changeset
764 {
916998f90e39 Suspend MotionDetection events while diver is operationg the OSTC:
Ideenmodellierer
parents: 595
diff changeset
765 StoreButtonAction((uint8_t)ACTION_PITCH_NEG);
916998f90e39 Suspend MotionDetection events while diver is operationg the OSTC:
Ideenmodellierer
parents: 595
diff changeset
766 }
916998f90e39 Suspend MotionDetection events while diver is operationg the OSTC:
Ideenmodellierer
parents: 595
diff changeset
767 if(DETECT_POS_PITCH == pitchstate)
916998f90e39 Suspend MotionDetection events while diver is operationg the OSTC:
Ideenmodellierer
parents: 595
diff changeset
768 {
916998f90e39 Suspend MotionDetection events while diver is operationg the OSTC:
Ideenmodellierer
parents: 595
diff changeset
769 StoreButtonAction((uint8_t)ACTION_PITCH_POS);
916998f90e39 Suspend MotionDetection events while diver is operationg the OSTC:
Ideenmodellierer
parents: 595
diff changeset
770 }
916998f90e39 Suspend MotionDetection events while diver is operationg the OSTC:
Ideenmodellierer
parents: 595
diff changeset
771 }
916998f90e39 Suspend MotionDetection events while diver is operationg the OSTC:
Ideenmodellierer
parents: 595
diff changeset
772 else
916998f90e39 Suspend MotionDetection events while diver is operationg the OSTC:
Ideenmodellierer
parents: 595
diff changeset
773 {
916998f90e39 Suspend MotionDetection events while diver is operationg the OSTC:
Ideenmodellierer
parents: 595
diff changeset
774 if(wasInFocus)
916998f90e39 Suspend MotionDetection events while diver is operationg the OSTC:
Ideenmodellierer
parents: 595
diff changeset
775 {
916998f90e39 Suspend MotionDetection events while diver is operationg the OSTC:
Ideenmodellierer
parents: 595
diff changeset
776 wasInFocus = 0;
916998f90e39 Suspend MotionDetection events while diver is operationg the OSTC:
Ideenmodellierer
parents: 595
diff changeset
777 if(suspendMotionDetectionSec == 0)
916998f90e39 Suspend MotionDetection events while diver is operationg the OSTC:
Ideenmodellierer
parents: 595
diff changeset
778 {
916998f90e39 Suspend MotionDetection events while diver is operationg the OSTC:
Ideenmodellierer
parents: 595
diff changeset
779 if(settingsGetPointer()->design == 7)
916998f90e39 Suspend MotionDetection events while diver is operationg the OSTC:
Ideenmodellierer
parents: 595
diff changeset
780 {
916998f90e39 Suspend MotionDetection events while diver is operationg the OSTC:
Ideenmodellierer
parents: 595
diff changeset
781 t7_set_customview_to_primary();
916998f90e39 Suspend MotionDetection events while diver is operationg the OSTC:
Ideenmodellierer
parents: 595
diff changeset
782 }
916998f90e39 Suspend MotionDetection events while diver is operationg the OSTC:
Ideenmodellierer
parents: 595
diff changeset
783 else
916998f90e39 Suspend MotionDetection events while diver is operationg the OSTC:
Ideenmodellierer
parents: 595
diff changeset
784 {
916998f90e39 Suspend MotionDetection events while diver is operationg the OSTC:
Ideenmodellierer
parents: 595
diff changeset
785 t3_set_customview_to_primary();
916998f90e39 Suspend MotionDetection events while diver is operationg the OSTC:
Ideenmodellierer
parents: 595
diff changeset
786 }
916998f90e39 Suspend MotionDetection events while diver is operationg the OSTC:
Ideenmodellierer
parents: 595
diff changeset
787 }
916998f90e39 Suspend MotionDetection events while diver is operationg the OSTC:
Ideenmodellierer
parents: 595
diff changeset
788 }
916998f90e39 Suspend MotionDetection events while diver is operationg the OSTC:
Ideenmodellierer
parents: 595
diff changeset
789 set_Backlight_Boost(0);
916998f90e39 Suspend MotionDetection events while diver is operationg the OSTC:
Ideenmodellierer
parents: 595
diff changeset
790 }
916998f90e39 Suspend MotionDetection events while diver is operationg the OSTC:
Ideenmodellierer
parents: 595
diff changeset
791 if(suspendMotionDetectionSec != 0)
916998f90e39 Suspend MotionDetection events while diver is operationg the OSTC:
Ideenmodellierer
parents: 595
diff changeset
792 {
916998f90e39 Suspend MotionDetection events while diver is operationg the OSTC:
Ideenmodellierer
parents: 595
diff changeset
793 suspendMotionDetectionSec--;
916998f90e39 Suspend MotionDetection events while diver is operationg the OSTC:
Ideenmodellierer
parents: 595
diff changeset
794 }
916998f90e39 Suspend MotionDetection events while diver is operationg the OSTC:
Ideenmodellierer
parents: 595
diff changeset
795 }
916998f90e39 Suspend MotionDetection events while diver is operationg the OSTC:
Ideenmodellierer
parents: 595
diff changeset
796
916998f90e39 Suspend MotionDetection events while diver is operationg the OSTC:
Ideenmodellierer
parents: 595
diff changeset
797