annotate Discovery/Src/data_central.c @ 899:2225c467f1e9 Evo_2_23

Added data path and visualization for position data: The GNSS data exchange is now initialized and triggered on a cyclic basis (once a second). RTE verion has been increased because of interface change. For now only the position data is shown in a T7 surface views. The functionality may be switched on/off using the compile switch ENABLE_GNSS.
author Ideenmodellierer
date Mon, 30 Sep 2024 21:56:05 +0200
parents a7f4451ba69e
children d4622533271d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1 /**
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2 ******************************************************************************
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
3 * @copyright heinrichs weikamp
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
4 * @file data_central.c
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
5 * @author heinrichs weikamp gmbh
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
6 * @date 10-November-2014
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
7 * @version V1.0.2
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
8 * @since 10-Nov-2014
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
9 * @brief All the data EXCEPT
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
10 * - settings (settings.c)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
11 * feste Werte, die nur an der Oberfl�che ge�ndert werden
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
12 * - dataIn and dataOut (data_exchange.h and data_exchange_main.c)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
13 * Austausch mit Small CPU
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
14 * @bug
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
15 * @warning
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
16 @verbatim
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
17 ==============================================================================
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
18 ##### SDiveState Real and Sim #####
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
19 ==============================================================================
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
20 [..] SDiveSettings
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
21 copy of parts of Settings that are necessary during the dive
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
22 and could be modified during the dive without post dive changes.
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
23
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
24 [..] SLifeData
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
25 written in DataEX_copy_to_LifeData();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
26 block 1 "lifedata" set by SmallCPU in stateReal
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
27 block 2 "actualGas" set by main CPU from user input and send to Small CPU
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
28 block 3 "calculated data" set by main CPU based on "lifedata"
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
29
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
30 [..] SVpm
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
31
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
32 [..] SEvents
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
33
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
34 [..] SDecoinfo
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
35
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
36 [..] mode
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
37 set by SmallCPU in stateReal, can be surface, dive, ...
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
39 [..] data_old__lost_connection_to_slave
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
40 set by DataEX_copy_to_LifeData();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
41
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
42 ==============================================================================
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
43 ##### SDiveState Deco #####
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
44 ==============================================================================
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
45 [..] kjbkldafj�lasdfjasdf
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
46
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
47 ==============================================================================
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
48 ##### decoLock #####
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
49 ==============================================================================
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
50 [..] The handler that synchronizes the data between IRQ copy and main deco loop
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
51
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
52
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
53 @endverbatim
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
54 ******************************************************************************
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
55 * @attention
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
56 *
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
57 * <h2><center>&copy; COPYRIGHT(c) 2015 heinrichs weikamp</center></h2>
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
58 *
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
59 ******************************************************************************
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
60 */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
61
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
62 /* Includes ------------------------------------------------------------------*/
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
63 #include <string.h>
539
d784f281833a Added inertia simulation for compass heading:
Ideenmodellierer
parents: 310
diff changeset
64 #include <math.h>
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
65 #include "data_central.h"
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
66 #include "calc_crush.h"
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
67 #include "decom.h"
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
68 #include "stm32f4xx_hal.h"
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
69 #include "settings.h"
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
70 #include "data_exchange_main.h"
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
71 #include "ostc.h" // for button adjust on hw testboard 1
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
72 #include "tCCR.h"
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
73 #include "crcmodel.h"
662
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 539
diff changeset
74 #include "configuration.h"
834
2a8af51ab04d Added event based display changes for big font view:
Ideenmodellierer
parents: 805
diff changeset
75 #include "tHome.h"
2a8af51ab04d Added event based display changes for big font view:
Ideenmodellierer
parents: 805
diff changeset
76 #include "t3.h"
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
77
225
2bb1db22b5f5 cleanup: random set of cleanups
Jan Mulder <jlmulder@xs4all.nl>
parents: 149
diff changeset
78 static SDiveState stateReal = { 0 };
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
79 SDiveState stateSim = { 0 };
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
80 SDiveState stateDeco = { 0 };
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
81
300
5ca177d2df5d cleanup: remove commented/unused code, make static
Jan Mulder <jlmulder@xs4all.nl>
parents: 281
diff changeset
82 static SDevice stateDevice =
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
83 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
84 /* max is 0x7FFFFFFF, min is 0x80000000 but also defined in stdint.h :-) */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
85
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
86 /* count, use 0 */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
87 .batteryChargeCompleteCycles.value_int32 = 0,
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
88 .batteryChargeCycles.value_int32 = 0,
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
89 .diveCycles.value_int32 = 0,
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
90 .hoursOfOperation.value_int32 = 0,
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
91
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
92 /* max values, use min. */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
93 .temperatureMaximum.value_int32 = INT32_MIN,
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
94 .depthMaximum.value_int32 = INT32_MIN,
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
95
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
96 /* min values, use max. */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
97 .temperatureMinimum.value_int32 = INT32_MAX,
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
98 .voltageMinimum.value_int32 = INT32_MAX,
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
99 };
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
100
300
5ca177d2df5d cleanup: remove commented/unused code, make static
Jan Mulder <jlmulder@xs4all.nl>
parents: 281
diff changeset
101 static SVpmRepetitiveData stateVPM =
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
102 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
103 .repetitive_variables_not_valid = 1,
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
104 .is_data_from_RTE_CPU = 0,
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
105 };
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
106
271
1303747b5ba2 cleanup: also write gas and setpoint changes in simulator mode
Jan Mulder <jlmulder@xs4all.nl>
parents: 270
diff changeset
107 const SDiveState *stateUsed = &stateReal;
1303747b5ba2 cleanup: also write gas and setpoint changes in simulator mode
Jan Mulder <jlmulder@xs4all.nl>
parents: 270
diff changeset
108 SDiveState *stateUsedWrite = &stateReal;
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
109
539
d784f281833a Added inertia simulation for compass heading:
Ideenmodellierer
parents: 310
diff changeset
110
d784f281833a Added inertia simulation for compass heading:
Ideenmodellierer
parents: 310
diff changeset
111 #define COMPASS_FRACTION (4.0f) /* delay till value changes to new actual */
d784f281833a Added inertia simulation for compass heading:
Ideenmodellierer
parents: 310
diff changeset
112
d784f281833a Added inertia simulation for compass heading:
Ideenmodellierer
parents: 310
diff changeset
113 static float compass_compensated = 0;
d784f281833a Added inertia simulation for compass heading:
Ideenmodellierer
parents: 310
diff changeset
114
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
115 void set_stateUsedToReal(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
116 {
271
1303747b5ba2 cleanup: also write gas and setpoint changes in simulator mode
Jan Mulder <jlmulder@xs4all.nl>
parents: 270
diff changeset
117 stateUsed = stateUsedWrite = &stateReal;
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
118 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
119
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
120 void set_stateUsedToSim(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
121 {
271
1303747b5ba2 cleanup: also write gas and setpoint changes in simulator mode
Jan Mulder <jlmulder@xs4all.nl>
parents: 270
diff changeset
122 stateUsed = stateUsedWrite = &stateSim;
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
123 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
124
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
125 _Bool is_stateUsedSetToSim(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
126 {
225
2bb1db22b5f5 cleanup: random set of cleanups
Jan Mulder <jlmulder@xs4all.nl>
parents: 149
diff changeset
127 return stateUsed == &stateSim;
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
128 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
129
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
130 const SDiveState * stateRealGetPointer(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
131 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
132 return &stateReal;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
133 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
134
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
135 SDiveState * stateRealGetPointerWrite(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
136 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
137 return &stateReal;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
138 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
139
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
140
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
141 const SDiveState * stateSimGetPointer(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
142 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
143 return &stateSim;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
144 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
145
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
146
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
147 SDiveState * stateSimGetPointerWrite(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
148 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
149 return &stateSim;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
150 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
151
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
152
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
153 const SDevice * stateDeviceGetPointer(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
154 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
155 return &stateDevice;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
156 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
157
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
158
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
159 SDevice * stateDeviceGetPointerWrite(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
160 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
161 return &stateDevice;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
162 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
163
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
164
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
165 const SVpmRepetitiveData * stateVpmRepetitiveDataGetPointer(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
166 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
167 return &stateVPM;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
168 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
169
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
170
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
171 SVpmRepetitiveData * stateVpmRepetitiveDataGetPointerWrite(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
172 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
173 return &stateVPM;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
174 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
175
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
176
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
177 uint32_t time_elapsed_ms(uint32_t ticksstart,uint32_t ticksnow)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
178 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
179 if(ticksstart <= ticksnow)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
180 return ticksnow - ticksstart;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
181 else
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
182 return 0xFFFFFFFF - ticksstart + ticksnow;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
183 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
184
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
185
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
186 uint8_t decoLock = DECO_CALC_undefined;
300
5ca177d2df5d cleanup: remove commented/unused code, make static
Jan Mulder <jlmulder@xs4all.nl>
parents: 281
diff changeset
187
5ca177d2df5d cleanup: remove commented/unused code, make static
Jan Mulder <jlmulder@xs4all.nl>
parents: 281
diff changeset
188 static int descent_rate_meter_per_min = 20;
5ca177d2df5d cleanup: remove commented/unused code, make static
Jan Mulder <jlmulder@xs4all.nl>
parents: 281
diff changeset
189 static int max_depth = 70;
5ca177d2df5d cleanup: remove commented/unused code, make static
Jan Mulder <jlmulder@xs4all.nl>
parents: 281
diff changeset
190 static int bottom_time = 10;
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
191
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
192 _Bool vpm_crush(SDiveState* pDiveState);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
193 void setSimulationValues(int _ascent_rate_meter_per_min, int _descent_rate_meter_per_min, int _max_depth, int _bottom_time )
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
194 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
195 descent_rate_meter_per_min = _descent_rate_meter_per_min;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
196 max_depth = _max_depth;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
197 bottom_time = _bottom_time;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
198 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
199
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
200 int current_second(void) {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
201
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
202 return HAL_GetTick() / 1000;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
203 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
204
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
205 #define OXY_ONE_SIXTIETH_PART 0.0166667f
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
206
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
207 uint8_t calc_MOD(uint8_t gasId)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
208 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
209 int16_t oxygen, maxppO2, result;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
210 SSettings *pSettings;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
211
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
212 pSettings = settingsGetPointer();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
213
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
214 oxygen = (int16_t)(pSettings->gas[gasId].oxygen_percentage);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
215
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
216 if(pSettings->gas[gasId].note.ub.deco > 0)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
217 maxppO2 =(int16_t)(pSettings->ppO2_max_deco);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
218 else
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
219 maxppO2 =(int16_t)(pSettings->ppO2_max_std);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
220
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
221 result = 10 * maxppO2;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
222 result /= oxygen;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
223 result -= 10;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
224
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
225 if(result < 0)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
226 return 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
227
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
228 if(result > 255)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
229 return 255;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
230
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
231 return result;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
232 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
233
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
234 float get_ambiant_pressure_simulation(long dive_time_seconds, float surface_pressure_bar )
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
235 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
236 static
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
237 long descent_time;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
238 float depth_meter;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
239
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
240 descent_time = 60 * max_depth / descent_rate_meter_per_min;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
241
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
242 if(dive_time_seconds <= descent_time)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
243 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
244 depth_meter = ((float)(dive_time_seconds * descent_rate_meter_per_min)) / 60;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
245 return surface_pressure_bar + depth_meter / 10;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
246 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
247 //else if(dive_time_seconds <= (descent_time + bottom_time * 60))
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
248 return surface_pressure_bar + max_depth / 10;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
249
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
250
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
251
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
252 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
253
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
254 void UpdateLifeDataTest(SDiveState * pDiveState)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
255 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
256 static int last_second = -1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
257 int now = current_second();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
258 if(last_second == now)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
259 return;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
260 last_second = now;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
261
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
262 pDiveState->lifeData.dive_time_seconds += 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
263 pDiveState->lifeData.pressure_ambient_bar = get_ambiant_pressure_simulation(pDiveState->lifeData.dive_time_seconds,pDiveState->lifeData.pressure_surface_bar);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
264
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
265 pDiveState->lifeData.depth_meter = (pDiveState->lifeData.pressure_ambient_bar - pDiveState->lifeData.pressure_surface_bar) * 10.0f;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
266 if(pDiveState->lifeData.max_depth_meter < pDiveState->lifeData.depth_meter)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
267 pDiveState->lifeData.max_depth_meter = pDiveState->lifeData.depth_meter;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
268 decom_tissues_exposure(1, &pDiveState->lifeData);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
269 pDiveState->lifeData.ppO2 = decom_calc_ppO2( pDiveState->lifeData.pressure_ambient_bar, &pDiveState->lifeData.actualGas);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
270 decom_oxygen_calculate_cns(& pDiveState->lifeData.cns, pDiveState->lifeData.ppO2);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
271
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
272 vpm_crush(pDiveState);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
273 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
274
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
275
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
276 _Bool vpm_crush(SDiveState* pDiveState)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
277 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
278 int i = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
279 static float starting_ambient_pressure = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
280 static float ending_ambient_pressure = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
281 static float time_calc_begin = -1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
282 static float initial_helium_pressure[16];
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
283 static float initial_nitrogen_pressure[16];
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
284 ending_ambient_pressure = pDiveState->lifeData.pressure_ambient_bar * 10;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
285
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
286 if((pDiveState->lifeData.dive_time_seconds <= 4) || (starting_ambient_pressure >= ending_ambient_pressure))
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
287 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
288 time_calc_begin = pDiveState->lifeData.dive_time_seconds;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
289 starting_ambient_pressure = pDiveState->lifeData.pressure_ambient_bar * 10;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
290 for( i = 0; i < 16; i++)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
291 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
292 initial_helium_pressure[i] = pDiveState->lifeData.tissue_helium_bar[i] * 10;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
293 initial_nitrogen_pressure[i] = pDiveState->lifeData.tissue_nitrogen_bar[i] * 10;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
294 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
295 return false;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
296 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
297 if(pDiveState->lifeData.dive_time_seconds - time_calc_begin >= 4)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
298 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
299 if(ending_ambient_pressure > starting_ambient_pressure + 0.5f)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
300 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
301 float rate = (ending_ambient_pressure - starting_ambient_pressure) * 60 / 4;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
302 calc_crushing_pressure(&pDiveState->lifeData, &pDiveState->vpm, initial_helium_pressure, initial_nitrogen_pressure, starting_ambient_pressure, rate);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
303
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
304 time_calc_begin = pDiveState->lifeData.dive_time_seconds;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
305 starting_ambient_pressure = pDiveState->lifeData.pressure_ambient_bar * 10;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
306 for( i = 0; i < 16; i++)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
307 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
308 initial_helium_pressure[i] = pDiveState->lifeData.tissue_helium_bar[i] * 10;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
309 initial_nitrogen_pressure[i] = pDiveState->lifeData.tissue_nitrogen_bar[i] * 10;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
310 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
311
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
312 return true;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
313 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
314
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
315 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
316 return false;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
317 };
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
318
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
319
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
320 void createDiveSettings(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
321 {
662
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 539
diff changeset
322 int i;
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
323 SSettings* pSettings = settingsGetPointer();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
324
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
325 stateReal.diveSettings.compassHeading = pSettings->compassBearing;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
326 stateReal.diveSettings.ascentRate_meterperminute = 10;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
327
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
328 stateReal.diveSettings.diveMode = pSettings->dive_mode;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
329 stateReal.diveSettings.CCR_Mode = pSettings->CCR_Mode;
662
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 539
diff changeset
330 if((stateReal.diveSettings.diveMode == DIVEMODE_PSCR) && (stateReal.diveSettings.CCR_Mode == CCRMODE_FixedSetpoint))
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 539
diff changeset
331 {
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 539
diff changeset
332 /* TODO: update selection of sensor used on/off (currently sensor/fixpoint). As PSCR has no fixed setpoint change to simulated ppo2 if sensors are not active */
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 539
diff changeset
333 stateReal.diveSettings.CCR_Mode = CCRMODE_Simulation;
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 539
diff changeset
334 }
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 539
diff changeset
335
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 539
diff changeset
336 if(isLoopMode(stateReal.diveSettings.diveMode))
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
337 stateReal.diveSettings.ccrOption = 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
338 else
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
339 stateReal.diveSettings.ccrOption = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
340 memcpy(stateReal.diveSettings.gas, pSettings->gas,sizeof(pSettings->gas));
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
341 memcpy(stateReal.diveSettings.setpoint, pSettings->setpoint,sizeof(pSettings->setpoint));
683
6f5a18bb25be Bugfix: Set actual gas after basic dive settings were created:
Ideenmodellierer
parents: 682
diff changeset
342
6f5a18bb25be Bugfix: Set actual gas after basic dive settings were created:
Ideenmodellierer
parents: 682
diff changeset
343 setActualGasFirst(&stateReal.lifeData);
6f5a18bb25be Bugfix: Set actual gas after basic dive settings were created:
Ideenmodellierer
parents: 682
diff changeset
344
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
345 stateReal.diveSettings.gf_high = pSettings->GF_high;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
346 stateReal.diveSettings.gf_low = pSettings->GF_low;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
347 stateReal.diveSettings.input_next_stop_increment_depth_bar = ((float)pSettings->stop_increment_depth_meter) / 10.0f;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
348 stateReal.diveSettings.last_stop_depth_bar = ((float)pSettings->last_stop_depth_meter) / 10.0f;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
349 stateReal.diveSettings.vpm_conservatism = pSettings->VPM_conservatism.ub.standard;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
350 stateReal.diveSettings.deco_type.uw = pSettings->deco_type.uw;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
351 stateReal.diveSettings.fallbackOption = pSettings->fallbackToFixedSetpoint;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
352 stateReal.diveSettings.ppo2sensors_deactivated = pSettings->ppo2sensors_deactivated;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
353 stateReal.diveSettings.future_TTS_minutes = pSettings->future_TTS;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
354
662
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 539
diff changeset
355 stateReal.diveSettings.pscr_lung_ratio = pSettings->pscr_lung_ratio;
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 539
diff changeset
356 stateReal.diveSettings.pscr_o2_drop = pSettings->pscr_o2_drop;
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 539
diff changeset
357
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 539
diff changeset
358 if(stateReal.diveSettings.diveMode == DIVEMODE_PSCR)
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 539
diff changeset
359 {
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 539
diff changeset
360 for(i=0; i<5; i++)
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 539
diff changeset
361 {
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 539
diff changeset
362 stateReal.diveSettings.decogaslist[i].pscr_factor = 1.0 / stateReal.diveSettings.pscr_lung_ratio * stateReal.diveSettings.pscr_o2_drop;
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 539
diff changeset
363 }
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 539
diff changeset
364 }
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 539
diff changeset
365
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
366 decom_CreateGasChangeList(&stateReal.diveSettings, &stateReal.lifeData); // decogaslist
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
367 stateReal.diveSettings.internal__pressure_first_stop_ambient_bar_as_upper_limit_for_gf_low_otherwise_zero = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
368
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
369 /* for safety */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
370 stateReal.diveSettings.input_second_to_last_stop_depth_bar = stateReal.diveSettings.last_stop_depth_bar + stateReal.diveSettings.input_next_stop_increment_depth_bar;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
371 /* and the proper calc */
662
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 539
diff changeset
372 for(i = 1; i <10; i++)
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
373 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
374 if(stateReal.diveSettings.input_next_stop_increment_depth_bar * i > stateReal.diveSettings.last_stop_depth_bar)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
375 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
376 stateReal.diveSettings.input_second_to_last_stop_depth_bar = stateReal.diveSettings.input_next_stop_increment_depth_bar * i;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
377 break;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
378 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
379 }
834
2a8af51ab04d Added event based display changes for big font view:
Ideenmodellierer
parents: 805
diff changeset
380 /* generate Bitfield of active T3 views */
2a8af51ab04d Added event based display changes for big font view:
Ideenmodellierer
parents: 805
diff changeset
381 stateReal.diveSettings.activeAFViews = 0;
2a8af51ab04d Added event based display changes for big font view:
Ideenmodellierer
parents: 805
diff changeset
382 if(t3_customview_disabled(CVIEW_T3_Navigation) == 0)
2a8af51ab04d Added event based display changes for big font view:
Ideenmodellierer
parents: 805
diff changeset
383 {
2a8af51ab04d Added event based display changes for big font view:
Ideenmodellierer
parents: 805
diff changeset
384 stateReal.diveSettings.activeAFViews |= (1 << CVIEW_T3_Navigation);
2a8af51ab04d Added event based display changes for big font view:
Ideenmodellierer
parents: 805
diff changeset
385 }
838
aed39d19269c Added T3 autofocus for Gas list:
Ideenmodellierer
parents: 834
diff changeset
386 if(t3_customview_disabled(CVIEW_T3_GasList) == 0)
aed39d19269c Added T3 autofocus for Gas list:
Ideenmodellierer
parents: 834
diff changeset
387 {
aed39d19269c Added T3 autofocus for Gas list:
Ideenmodellierer
parents: 834
diff changeset
388 stateReal.diveSettings.activeAFViews |= (1 << CVIEW_T3_GasList);
aed39d19269c Added T3 autofocus for Gas list:
Ideenmodellierer
parents: 834
diff changeset
389 }
841
70092f552f5a Added autofocus for T3_DecoTTS view:
Ideenmodellierer
parents: 838
diff changeset
390 if(t3_customview_disabled(CVIEW_T3_DecoTTS) == 0)
70092f552f5a Added autofocus for T3_DecoTTS view:
Ideenmodellierer
parents: 838
diff changeset
391 {
70092f552f5a Added autofocus for T3_DecoTTS view:
Ideenmodellierer
parents: 838
diff changeset
392 stateReal.diveSettings.activeAFViews |= (1 << CVIEW_T3_DecoTTS);
70092f552f5a Added autofocus for T3_DecoTTS view:
Ideenmodellierer
parents: 838
diff changeset
393 }
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
394 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
395
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
396
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
397 void copyDiveSettingsToSim(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
398 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
399 memcpy(&stateSim, &stateReal, sizeof(stateReal));
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
400 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
401
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
402
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
403 void copyVpmRepetetiveDataToSim(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
404 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
405 SDiveState * pSimData = stateSimGetPointerWrite();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
406 const SVpmRepetitiveData * pVpmData = stateVpmRepetitiveDataGetPointer();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
407
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
408 if(pVpmData->is_data_from_RTE_CPU)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
409 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
410 for(int i=0; i<16;i++)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
411 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
412 pSimData->vpm.adjusted_critical_radius_he[i] = pVpmData->adjusted_critical_radius_he[i];
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
413 pSimData->vpm.adjusted_critical_radius_n2[i] = pVpmData->adjusted_critical_radius_n2[i];
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
414
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
415 pSimData->vpm.adjusted_crushing_pressure_he[i] = pVpmData->adjusted_crushing_pressure_he[i];
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
416 pSimData->vpm.adjusted_crushing_pressure_n2[i] = pVpmData->adjusted_crushing_pressure_n2[i];
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
417
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
418 pSimData->vpm.initial_allowable_gradient_he[i] = pVpmData->initial_allowable_gradient_he[i];
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
419 pSimData->vpm.initial_allowable_gradient_n2[i] = pVpmData->initial_allowable_gradient_n2[i];
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
420
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
421 pSimData->vpm.max_actual_gradient[i] = pVpmData->max_actual_gradient[i];
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
422 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
423 pSimData->vpm.repetitive_variables_not_valid = pVpmData->repetitive_variables_not_valid;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
424 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
425 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
426
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
427
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
428 void updateSetpointStateUsed(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
429 {
682
8775d3dc6325 Bugfix low ppO2 warning in bailout mode:
Ideenmodellierer
parents: 662
diff changeset
430 if(!isLoopMode(stateUsed->diveSettings.diveMode))
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
431 {
271
1303747b5ba2 cleanup: also write gas and setpoint changes in simulator mode
Jan Mulder <jlmulder@xs4all.nl>
parents: 270
diff changeset
432 stateUsedWrite->lifeData.actualGas.setPoint_cbar = 0;
1303747b5ba2 cleanup: also write gas and setpoint changes in simulator mode
Jan Mulder <jlmulder@xs4all.nl>
parents: 270
diff changeset
433 stateUsedWrite->lifeData.ppO2 = decom_calc_ppO2(stateUsed->lifeData.pressure_ambient_bar, &stateUsed->lifeData.actualGas);
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
434 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
435 else
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
436 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
437 if(stateUsed->diveSettings.CCR_Mode == CCRMODE_Sensors)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
438 {
271
1303747b5ba2 cleanup: also write gas and setpoint changes in simulator mode
Jan Mulder <jlmulder@xs4all.nl>
parents: 270
diff changeset
439 stateUsedWrite->lifeData.actualGas.setPoint_cbar = get_ppO2SensorWeightedResult_cbar();
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
440 }
662
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 539
diff changeset
441 #ifdef ENABLE_PSCR_MODE
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 539
diff changeset
442 if(stateUsed->diveSettings.diveMode == DIVEMODE_PSCR) /* calculate a ppO2 value based on assumptions ( transfered approach from hwos code) */
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 539
diff changeset
443 {
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 539
diff changeset
444 stateUsedWrite->lifeData.ppo2Simulated_bar = decom_calc_SimppO2_O2based(stateUsed->lifeData.pressure_ambient_bar, stateReal.diveSettings.gas[stateUsed->lifeData.actualGas.GasIdInSettings].oxygen_percentage, stateUsed->lifeData.actualGas.pscr_factor);
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 539
diff changeset
445 if(stateUsed->diveSettings.CCR_Mode == CCRMODE_Simulation)
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 539
diff changeset
446 {
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 539
diff changeset
447 stateUsedWrite->lifeData.actualGas.setPoint_cbar = stateUsedWrite->lifeData.ppo2Simulated_bar * 100;
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 539
diff changeset
448 }
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 539
diff changeset
449 }
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 539
diff changeset
450 #endif
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 539
diff changeset
451 /* limit calculated value to the physically possible if needed */
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
452 if((stateUsed->lifeData.pressure_ambient_bar * 100) < stateUsed->lifeData.actualGas.setPoint_cbar)
271
1303747b5ba2 cleanup: also write gas and setpoint changes in simulator mode
Jan Mulder <jlmulder@xs4all.nl>
parents: 270
diff changeset
453 stateUsedWrite->lifeData.ppO2 = stateUsed->lifeData.pressure_ambient_bar;
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
454 else
271
1303747b5ba2 cleanup: also write gas and setpoint changes in simulator mode
Jan Mulder <jlmulder@xs4all.nl>
parents: 270
diff changeset
455 stateUsedWrite->lifeData.ppO2 = ((float)stateUsed->lifeData.actualGas.setPoint_cbar) / 100;
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
456 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
457 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
458
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
459 void setActualGasFirst(SLifeData *lifeData)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
460 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
461 SSettings* pSettings = settingsGetPointer();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
462 uint8_t start = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
463 uint8_t gasId = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
464 uint8_t setpoint_cbar = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
465
662
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 539
diff changeset
466 if(isLoopMode(pSettings->dive_mode))
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
467 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
468 setpoint_cbar = pSettings->setpoint[1].setpoint_cbar;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
469 start = NUM_OFFSET_DILUENT+1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
470 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
471 else
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
472 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
473 setpoint_cbar = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
474 start = 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
475 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
476
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
477 gasId = start;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
478 for(int i=start;i<=NUM_GASES+start;i++)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
479 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
480 if(pSettings->gas[i].note.ub.first)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
481 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
482 gasId = i;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
483 break;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
484 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
485 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
486 setActualGas(lifeData, gasId, setpoint_cbar);
788
4abfb8a2a435 Define explicit setpoints for low / high / deco. Add an option to delay the switch to SPlow until all decompression has been cleared. (mikeller)
heinrichsweikamp
parents: 776
diff changeset
487
4abfb8a2a435 Define explicit setpoints for low / high / deco. Add an option to delay the switch to SPlow until all decompression has been cleared. (mikeller)
heinrichsweikamp
parents: 776
diff changeset
488 lifeData->setpointDecoActivated = false;
4abfb8a2a435 Define explicit setpoints for low / high / deco. Add an option to delay the switch to SPlow until all decompression has been cleared. (mikeller)
heinrichsweikamp
parents: 776
diff changeset
489 lifeData->setpointLowDelayed = false;
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
490 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
491
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
492 void setActualGasAir(SLifeData *lifeData)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
493 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
494 uint8_t nitrogen;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
495 nitrogen = 79;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
496 lifeData->actualGas.GasIdInSettings = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
497 lifeData->actualGas.nitrogen_percentage = nitrogen;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
498 lifeData->actualGas.helium_percentage =0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
499 lifeData->actualGas.setPoint_cbar = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
500 lifeData->actualGas.change_during_ascent_depth_meter_otherwise_zero = 0;
662
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 539
diff changeset
501 lifeData->actualGas.AppliedDiveMode = stateUsed->diveSettings.diveMode;
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
502 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
503
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
504
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
505 void setActualGas(SLifeData *lifeData, uint8_t gasId, uint8_t setpoint_cbar)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
506 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
507 SSettings* pSettings = settingsGetPointer();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
508 uint8_t nitrogen;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
509
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
510 nitrogen = 100;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
511 nitrogen -= pSettings->gas[gasId].oxygen_percentage;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
512 nitrogen -= pSettings->gas[gasId].helium_percentage;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
513
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
514 lifeData->actualGas.GasIdInSettings = gasId;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
515 lifeData->actualGas.nitrogen_percentage = nitrogen;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
516 lifeData->actualGas.helium_percentage = pSettings->gas[gasId].helium_percentage;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
517 lifeData->actualGas.setPoint_cbar = setpoint_cbar;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
518 lifeData->actualGas.change_during_ascent_depth_meter_otherwise_zero = 0;
682
8775d3dc6325 Bugfix low ppO2 warning in bailout mode:
Ideenmodellierer
parents: 662
diff changeset
519 lifeData->actualGas.AppliedDiveMode = stateUsed->diveSettings.diveMode;
662
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 539
diff changeset
520 lifeData->actualGas.pscr_factor = 1.0 / pSettings->pscr_lung_ratio * pSettings->pscr_o2_drop;
771
29d9b5bc7946 Revised automatic setpoint change. The proposed approach is essentially the approach used by most controllers of eCCR ('upshift' on descent, 'downshift' on ascent), so that the OSTC4 when used as a backup computer for eCCR will make the changes at the same time as the eCCR itself.
heinrichsweikamp
parents: 736
diff changeset
521 if (isLoopMode(pSettings->dive_mode) && gasId > NUM_OFFSET_DILUENT) {
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
522 lifeData->lastDiluent_GasIdInSettings = gasId;
771
29d9b5bc7946 Revised automatic setpoint change. The proposed approach is essentially the approach used by most controllers of eCCR ('upshift' on descent, 'downshift' on ascent), so that the OSTC4 when used as a backup computer for eCCR will make the changes at the same time as the eCCR itself.
heinrichsweikamp
parents: 736
diff changeset
523 lifeData->lastSetpointChangeDepthM = lifeData->depth_meter;
29d9b5bc7946 Revised automatic setpoint change. The proposed approach is essentially the approach used by most controllers of eCCR ('upshift' on descent, 'downshift' on ascent), so that the OSTC4 when used as a backup computer for eCCR will make the changes at the same time as the eCCR itself.
heinrichsweikamp
parents: 736
diff changeset
524 }
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
525 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
526
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
527
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
528 void setActualGas_DM(SLifeData *lifeData, uint8_t gasId, uint8_t setpoint_cbar)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
529 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
530 if(stateUsed->diveSettings.ccrOption && gasId < 6)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
531 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
532 if(lifeData->actualGas.GasIdInSettings != gasId)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
533 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
534 SSettings* pSettings = settingsGetPointer();
271
1303747b5ba2 cleanup: also write gas and setpoint changes in simulator mode
Jan Mulder <jlmulder@xs4all.nl>
parents: 270
diff changeset
535 stateUsedWrite->events.bailout = 1;
1303747b5ba2 cleanup: also write gas and setpoint changes in simulator mode
Jan Mulder <jlmulder@xs4all.nl>
parents: 270
diff changeset
536 stateUsedWrite->events.info_bailoutO2 = pSettings->gas[gasId].oxygen_percentage;
1303747b5ba2 cleanup: also write gas and setpoint changes in simulator mode
Jan Mulder <jlmulder@xs4all.nl>
parents: 270
diff changeset
537 stateUsedWrite->events.info_bailoutHe = pSettings->gas[gasId].helium_percentage;
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
538 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
539 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
540 else
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
541 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
542 if(lifeData->actualGas.GasIdInSettings != gasId)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
543 {
271
1303747b5ba2 cleanup: also write gas and setpoint changes in simulator mode
Jan Mulder <jlmulder@xs4all.nl>
parents: 270
diff changeset
544 stateUsedWrite->events.gasChange = 1;
1303747b5ba2 cleanup: also write gas and setpoint changes in simulator mode
Jan Mulder <jlmulder@xs4all.nl>
parents: 270
diff changeset
545 stateUsedWrite->events.info_GasChange = gasId;
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
546 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
547 if( lifeData->actualGas.setPoint_cbar != setpoint_cbar)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
548 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
549 // setPoint_cbar = 255 -> change to sensor mode
271
1303747b5ba2 cleanup: also write gas and setpoint changes in simulator mode
Jan Mulder <jlmulder@xs4all.nl>
parents: 270
diff changeset
550 stateUsedWrite->events.setpointChange = 1;
1303747b5ba2 cleanup: also write gas and setpoint changes in simulator mode
Jan Mulder <jlmulder@xs4all.nl>
parents: 270
diff changeset
551 stateUsedWrite->events.info_SetpointChange = setpoint_cbar;
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
552 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
553 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
554 setActualGas(lifeData, gasId, setpoint_cbar);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
555 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
556
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
557 void setActualGas_ExtraGas(SLifeData *lifeData, uint8_t oxygen, uint8_t helium, uint8_t setpoint_cbar)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
558 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
559 uint8_t nitrogen;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
560
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
561 nitrogen = 100;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
562 nitrogen -= oxygen;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
563 nitrogen -= helium;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
564
736
8a2337c7af52 Fixed logbook download after switch from CCR to extra (OC) gas if the extra gas
heinrichsweikamp
parents: 683
diff changeset
565
864
fa431d42b5fb Fix incorrect logging of bailout to Open Circuit when using the best gas.
heinrichsweikamp
parents: 805
diff changeset
566 if ((lifeData->actualGas.nitrogen_percentage != nitrogen) || (lifeData->actualGas.helium_percentage != helium) || lifeData->actualGas.AppliedDiveMode != DIVEMODE_OC)
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
567 {
864
fa431d42b5fb Fix incorrect logging of bailout to Open Circuit when using the best gas.
heinrichsweikamp
parents: 805
diff changeset
568 if (stateUsed->diveSettings.ccrOption) {
fa431d42b5fb Fix incorrect logging of bailout to Open Circuit when using the best gas.
heinrichsweikamp
parents: 805
diff changeset
569 stateUsedWrite->events.bailout = 1;
fa431d42b5fb Fix incorrect logging of bailout to Open Circuit when using the best gas.
heinrichsweikamp
parents: 805
diff changeset
570 stateUsedWrite->events.info_bailoutHe = helium;
fa431d42b5fb Fix incorrect logging of bailout to Open Circuit when using the best gas.
heinrichsweikamp
parents: 805
diff changeset
571 stateUsedWrite->events.info_bailoutO2 = oxygen;
fa431d42b5fb Fix incorrect logging of bailout to Open Circuit when using the best gas.
heinrichsweikamp
parents: 805
diff changeset
572 } else {
fa431d42b5fb Fix incorrect logging of bailout to Open Circuit when using the best gas.
heinrichsweikamp
parents: 805
diff changeset
573 stateUsedWrite->events.manualGasSet = 1;
fa431d42b5fb Fix incorrect logging of bailout to Open Circuit when using the best gas.
heinrichsweikamp
parents: 805
diff changeset
574 stateUsedWrite->events.info_manualGasSetHe = helium;
fa431d42b5fb Fix incorrect logging of bailout to Open Circuit when using the best gas.
heinrichsweikamp
parents: 805
diff changeset
575 stateUsedWrite->events.info_manualGasSetO2 = oxygen;
fa431d42b5fb Fix incorrect logging of bailout to Open Circuit when using the best gas.
heinrichsweikamp
parents: 805
diff changeset
576 }
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
577 }
864
fa431d42b5fb Fix incorrect logging of bailout to Open Circuit when using the best gas.
heinrichsweikamp
parents: 805
diff changeset
578
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
579 if( lifeData->actualGas.setPoint_cbar != setpoint_cbar)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
580 {
271
1303747b5ba2 cleanup: also write gas and setpoint changes in simulator mode
Jan Mulder <jlmulder@xs4all.nl>
parents: 270
diff changeset
581 stateUsedWrite->events.setpointChange = 1;
1303747b5ba2 cleanup: also write gas and setpoint changes in simulator mode
Jan Mulder <jlmulder@xs4all.nl>
parents: 270
diff changeset
582 stateUsedWrite->events.info_SetpointChange = setpoint_cbar;
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
583 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
584 lifeData->actualGas.GasIdInSettings = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
585 lifeData->actualGas.nitrogen_percentage = nitrogen;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
586 lifeData->actualGas.helium_percentage = helium;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
587 lifeData->actualGas.setPoint_cbar = setpoint_cbar;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
588 lifeData->actualGas.change_during_ascent_depth_meter_otherwise_zero = 0;
662
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 539
diff changeset
589 lifeData->actualGas.AppliedDiveMode = stateUsed->diveSettings.diveMode;
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
590 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
591
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
592 void setButtonResponsiveness(uint8_t *ButtonSensitivyList)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
593 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
594 SDataReceiveFromMaster *pDataOut = dataOutGetPointer();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
595
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
596 for(int i=0; i<4; i++)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
597 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
598 pDataOut->data.buttonResponsiveness[i] = settingsHelperButtonSens_translate_percentage_to_hwOS_values(ButtonSensitivyList[i]);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
599 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
600 pDataOut->setButtonSensitivityNow = 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
601 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
602
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
603
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
604 void setDate(RTC_DateTypeDef Sdate)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
605 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
606 SDataReceiveFromMaster *pDataOut = dataOutGetPointer();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
607
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
608 pDataOut->data.newDate = Sdate;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
609 pDataOut->setDateNow = 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
610 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
611
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
612
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
613 void setTime(RTC_TimeTypeDef Stime)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
614 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
615 SDataReceiveFromMaster *pDataOut = dataOutGetPointer();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
616
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
617 pDataOut->data.newTime = Stime;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
618 pDataOut->setTimeNow = 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
619 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
620
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
621
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
622 void setBatteryPercentage(uint8_t newChargePercentage)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
623 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
624 SDataReceiveFromMaster *pDataOut = dataOutGetPointer();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
625
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
626 pDataOut->data.newBatteryGaugePercentageFloat = settingsGetPointer()->lastKnownBatteryPercentage;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
627 pDataOut->setBatteryGaugeNow = 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
628 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
629
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
630
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
631 void calibrateCompass(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
632 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
633 SDataReceiveFromMaster *pDataOut = dataOutGetPointer();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
634 pDataOut->calibrateCompassNow = 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
635 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
636
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
637
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
638 void clearDeco(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
639 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
640 SDataReceiveFromMaster *pDataOut = dataOutGetPointer();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
641 pDataOut->clearDecoNow = 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
642
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
643 stateRealGetPointerWrite()->cnsHigh_at_the_end_of_dive = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
644 stateRealGetPointerWrite()->decoMissed_at_the_end_of_dive = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
645 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
646
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
647
300
5ca177d2df5d cleanup: remove commented/unused code, make static
Jan Mulder <jlmulder@xs4all.nl>
parents: 281
diff changeset
648 static int32_t helper_days_from_civil(int32_t y, uint32_t m, uint32_t d)
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
649 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
650 y += 2000;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
651 y -= m <= 2;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
652 int32_t era = (y >= 0 ? y : y-399) / 400;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
653 uint32_t yoe = (uint32_t)(y - era * 400); // [0, 399]
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
654 uint32_t doy = (153*(m + (m > 2 ? -3 : 9)) + 2)/5 + d-1; // [0, 365]
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
655 uint32_t doe = yoe * 365 + yoe/4 - yoe/100 + doy; // [0, 146096]
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
656 return era * 146097 + (int32_t)(doe) - 719468;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
657 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
658
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
659
300
5ca177d2df5d cleanup: remove commented/unused code, make static
Jan Mulder <jlmulder@xs4all.nl>
parents: 281
diff changeset
660 static uint8_t helper_weekday_from_days(int32_t z)
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
661 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
662 return (uint8_t)(z >= -4 ? (z+4) % 7 : (z+5) % 7 + 6);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
663 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
664
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
665
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
666 void setWeekday(RTC_DateTypeDef *sDate)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
667 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
668 uint8_t day;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
669 // [0, 6] -> [Sun, Sat]
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
670 day = helper_weekday_from_days(helper_days_from_civil(sDate->Year, sDate->Month, sDate->Date));
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
671 // [1, 7] -> [Mon, Sun]
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
672 if(day == 0)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
673 day = 7;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
674 sDate->WeekDay = day;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
675 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
676
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
677
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
678 void translateDate(uint32_t datetmpreg, RTC_DateTypeDef *sDate)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
679 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
680 datetmpreg = (uint32_t)(datetmpreg & RTC_DR_RESERVED_MASK);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
681
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
682 /* Fill the structure fields with the read parameters */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
683 sDate->Year = (uint8_t)((datetmpreg & (RTC_DR_YT | RTC_DR_YU)) >> 16);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
684 sDate->Month = (uint8_t)((datetmpreg & (RTC_DR_MT | RTC_DR_MU)) >> 8);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
685 sDate->Date = (uint8_t)(datetmpreg & (RTC_DR_DT | RTC_DR_DU));
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
686 sDate->WeekDay = (uint8_t)((datetmpreg & (RTC_DR_WDU)) >> 13);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
687
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
688 /* Convert the date structure parameters to Binary format */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
689 sDate->Year = (uint8_t)RTC_Bcd2ToByte(sDate->Year);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
690 sDate->Month = (uint8_t)RTC_Bcd2ToByte(sDate->Month);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
691 sDate->Date = (uint8_t)RTC_Bcd2ToByte(sDate->Date);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
692 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
693
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
694 void translateTime(uint32_t tmpreg, RTC_TimeTypeDef *sTime)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
695 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
696 tmpreg = (uint32_t)(tmpreg & RTC_TR_RESERVED_MASK);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
697
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
698 /* Fill the structure fields with the read parameters */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
699 sTime->Hours = (uint8_t)((tmpreg & (RTC_TR_HT | RTC_TR_HU)) >> 16);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
700 sTime->Minutes = (uint8_t)((tmpreg & (RTC_TR_MNT | RTC_TR_MNU)) >>8);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
701 sTime->Seconds = (uint8_t)(tmpreg & (RTC_TR_ST | RTC_TR_SU));
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
702 sTime->TimeFormat = (uint8_t)((tmpreg & (RTC_TR_PM)) >> 16);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
703
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
704 /* Convert the time structure parameters to Binary format */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
705 sTime->Hours = (uint8_t)RTC_Bcd2ToByte(sTime->Hours);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
706 sTime->Minutes = (uint8_t)RTC_Bcd2ToByte(sTime->Minutes);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
707 sTime->Seconds = (uint8_t)RTC_Bcd2ToByte(sTime->Seconds);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
708 sTime->SubSeconds = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
709 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
710
270
2e58a4094770 feature, debug: make simulator write a logbook entry
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
711 void resetEvents(const SDiveState *pStateUsed)
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
712 {
270
2e58a4094770 feature, debug: make simulator write a logbook entry
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
713 memset((void *)&pStateUsed->events, 0, sizeof(SEvents));
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
714 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
715
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
716
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
717 uint32_t CRC_CalcBlockCRC_moreThan768000(uint32_t *buffer1, uint32_t *buffer2, uint32_t words)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
718 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
719 cm_t crc_model;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
720 uint32_t word_to_do;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
721 uint8_t byte_to_do;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
722 int i;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
723
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
724 // Values for the STM32F generator.
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
725
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
726 crc_model.cm_width = 32; // 32-bit CRC
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
727 crc_model.cm_poly = 0x04C11DB7; // CRC-32 polynomial
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
728 crc_model.cm_init = 0xFFFFFFFF; // CRC initialized to 1's
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
729 crc_model.cm_refin = FALSE; // CRC calculated MSB first
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
730 crc_model.cm_refot = FALSE; // Final result is not bit-reversed
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
731 crc_model.cm_xorot = 0x00000000; // Final result XOR'ed with this
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
732
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
733 cm_ini(&crc_model);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
734
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
735 while (words--)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
736 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
737 // The STM32F10x hardware does 32-bit words at a time!!!
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
738 if(words > (768000/4))
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
739 word_to_do = *buffer2++;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
740 else
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
741 word_to_do = *buffer1++;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
742
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
743 // Do all bytes in the 32-bit word.
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
744
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
745 for (i = 0; i < sizeof(word_to_do); i++)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
746 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
747 // We calculate a *byte* at a time. If the CRC is MSB first we
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
748 // do the next MS byte and vica-versa.
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
749
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
750 if (crc_model.cm_refin == FALSE)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
751 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
752 // MSB first. Do the next MS byte.
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
753
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
754 byte_to_do = (uint8_t) ((word_to_do & 0xFF000000) >> 24);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
755 word_to_do <<= 8;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
756 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
757 else
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
758 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
759 // LSB first. Do the next LS byte.
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
760
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
761 byte_to_do = (uint8_t) (word_to_do & 0x000000FF);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
762 word_to_do >>= 8;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
763 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
764
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
765 cm_nxt(&crc_model, byte_to_do);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
766 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
767 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
768
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
769 // Return the final result.
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
770
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
771 return (cm_crc(&crc_model));
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
772 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
773
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
774
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
775 uint32_t CRC_CalcBlockCRC(uint32_t *buffer, uint32_t words)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
776 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
777 cm_t crc_model;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
778 uint32_t word_to_do;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
779 uint8_t byte_to_do;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
780 int i;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
781
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
782 // Values for the STM32F generator.
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
783
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
784 crc_model.cm_width = 32; // 32-bit CRC
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
785 crc_model.cm_poly = 0x04C11DB7; // CRC-32 polynomial
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
786 crc_model.cm_init = 0xFFFFFFFF; // CRC initialized to 1's
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
787 crc_model.cm_refin = FALSE; // CRC calculated MSB first
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
788 crc_model.cm_refot = FALSE; // Final result is not bit-reversed
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
789 crc_model.cm_xorot = 0x00000000; // Final result XOR'ed with this
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
790
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
791 cm_ini(&crc_model);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
792
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
793 while (words--)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
794 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
795 // The STM32F10x hardware does 32-bit words at a time!!!
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
796
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
797 word_to_do = *buffer++;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
798
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
799 // Do all bytes in the 32-bit word.
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
800
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
801 for (i = 0; i < sizeof(word_to_do); i++)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
802 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
803 // We calculate a *byte* at a time. If the CRC is MSB first we
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
804 // do the next MS byte and vica-versa.
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
805
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
806 if (crc_model.cm_refin == FALSE)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
807 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
808 // MSB first. Do the next MS byte.
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
809
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
810 byte_to_do = (uint8_t) ((word_to_do & 0xFF000000) >> 24);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
811 word_to_do <<= 8;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
812 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
813 else
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
814 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
815 // LSB first. Do the next LS byte.
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
816
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
817 byte_to_do = (uint8_t) (word_to_do & 0x000000FF);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
818 word_to_do >>= 8;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
819 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
820
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
821 cm_nxt(&crc_model, byte_to_do);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
822 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
823 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
824
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
825 // Return the final result.
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
826
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
827 return (cm_crc(&crc_model));
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
828 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
829
302
eba8d1eb5bef bugfix, cleanup: keep both is_ambient_pressure_close_to_surface in sync
Jan Mulder <jlmulder@xs4all.nl>
parents: 300
diff changeset
830 // This code is also in RTE. Keep it in sync when editing
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
831 _Bool is_ambient_pressure_close_to_surface(SLifeData *lifeData)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
832 {
310
95928ef3986f Make dive mode detection more advanced
Jan Mulder <jlmulder@xs4all.nl>
parents: 302
diff changeset
833 if (lifeData->pressure_ambient_bar > 1.16)
95928ef3986f Make dive mode detection more advanced
Jan Mulder <jlmulder@xs4all.nl>
parents: 302
diff changeset
834 return false;
95928ef3986f Make dive mode detection more advanced
Jan Mulder <jlmulder@xs4all.nl>
parents: 302
diff changeset
835 else if(lifeData->pressure_ambient_bar < (lifeData->pressure_surface_bar + 0.1f))
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
836 return true;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
837 else
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
838 return false;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
839 }
539
d784f281833a Added inertia simulation for compass heading:
Ideenmodellierer
parents: 310
diff changeset
840
d784f281833a Added inertia simulation for compass heading:
Ideenmodellierer
parents: 310
diff changeset
841 void compass_Inertia(float newHeading)
d784f281833a Added inertia simulation for compass heading:
Ideenmodellierer
parents: 310
diff changeset
842 {
d784f281833a Added inertia simulation for compass heading:
Ideenmodellierer
parents: 310
diff changeset
843 float newTarget = newHeading;
d784f281833a Added inertia simulation for compass heading:
Ideenmodellierer
parents: 310
diff changeset
844
d784f281833a Added inertia simulation for compass heading:
Ideenmodellierer
parents: 310
diff changeset
845 if(settingsGetPointer()->compassInertia == 0)
d784f281833a Added inertia simulation for compass heading:
Ideenmodellierer
parents: 310
diff changeset
846 {
d784f281833a Added inertia simulation for compass heading:
Ideenmodellierer
parents: 310
diff changeset
847 compass_compensated = newHeading;
d784f281833a Added inertia simulation for compass heading:
Ideenmodellierer
parents: 310
diff changeset
848 }
d784f281833a Added inertia simulation for compass heading:
Ideenmodellierer
parents: 310
diff changeset
849 else
d784f281833a Added inertia simulation for compass heading:
Ideenmodellierer
parents: 310
diff changeset
850 {
d784f281833a Added inertia simulation for compass heading:
Ideenmodellierer
parents: 310
diff changeset
851 if((compass_compensated > 270.0) && (newHeading < 90.0)) /* transition passing 0 clockwise */
d784f281833a Added inertia simulation for compass heading:
Ideenmodellierer
parents: 310
diff changeset
852 {
d784f281833a Added inertia simulation for compass heading:
Ideenmodellierer
parents: 310
diff changeset
853 newTarget = newHeading + 360.0;
d784f281833a Added inertia simulation for compass heading:
Ideenmodellierer
parents: 310
diff changeset
854 }
d784f281833a Added inertia simulation for compass heading:
Ideenmodellierer
parents: 310
diff changeset
855
d784f281833a Added inertia simulation for compass heading:
Ideenmodellierer
parents: 310
diff changeset
856 if((compass_compensated < 90.0) && (newHeading > 270.0)) /* transition passing 0 counter clockwise */
d784f281833a Added inertia simulation for compass heading:
Ideenmodellierer
parents: 310
diff changeset
857 {
d784f281833a Added inertia simulation for compass heading:
Ideenmodellierer
parents: 310
diff changeset
858 newTarget = newHeading - 360.0;
d784f281833a Added inertia simulation for compass heading:
Ideenmodellierer
parents: 310
diff changeset
859 }
d784f281833a Added inertia simulation for compass heading:
Ideenmodellierer
parents: 310
diff changeset
860
d784f281833a Added inertia simulation for compass heading:
Ideenmodellierer
parents: 310
diff changeset
861 compass_compensated = compass_compensated + ((newTarget - compass_compensated) / (COMPASS_FRACTION * (settingsGetPointer()->compassInertia)));
d784f281833a Added inertia simulation for compass heading:
Ideenmodellierer
parents: 310
diff changeset
862 if(compass_compensated < 0.0)
d784f281833a Added inertia simulation for compass heading:
Ideenmodellierer
parents: 310
diff changeset
863 {
d784f281833a Added inertia simulation for compass heading:
Ideenmodellierer
parents: 310
diff changeset
864 compass_compensated += 360.0;
d784f281833a Added inertia simulation for compass heading:
Ideenmodellierer
parents: 310
diff changeset
865 }
d784f281833a Added inertia simulation for compass heading:
Ideenmodellierer
parents: 310
diff changeset
866 if(compass_compensated >= 360.0)
d784f281833a Added inertia simulation for compass heading:
Ideenmodellierer
parents: 310
diff changeset
867 {
d784f281833a Added inertia simulation for compass heading:
Ideenmodellierer
parents: 310
diff changeset
868 compass_compensated -= 360.0;
d784f281833a Added inertia simulation for compass heading:
Ideenmodellierer
parents: 310
diff changeset
869 }
d784f281833a Added inertia simulation for compass heading:
Ideenmodellierer
parents: 310
diff changeset
870 }
d784f281833a Added inertia simulation for compass heading:
Ideenmodellierer
parents: 310
diff changeset
871 }
d784f281833a Added inertia simulation for compass heading:
Ideenmodellierer
parents: 310
diff changeset
872
d784f281833a Added inertia simulation for compass heading:
Ideenmodellierer
parents: 310
diff changeset
873 float compass_getCompensated()
d784f281833a Added inertia simulation for compass heading:
Ideenmodellierer
parents: 310
diff changeset
874 {
d784f281833a Added inertia simulation for compass heading:
Ideenmodellierer
parents: 310
diff changeset
875 return compass_compensated;
d784f281833a Added inertia simulation for compass heading:
Ideenmodellierer
parents: 310
diff changeset
876 }
d784f281833a Added inertia simulation for compass heading:
Ideenmodellierer
parents: 310
diff changeset
877
662
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 539
diff changeset
878 uint8_t isLoopMode(uint8_t Mode)
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 539
diff changeset
879 {
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 539
diff changeset
880 uint8_t retVal = 0;
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 539
diff changeset
881 if((Mode == DIVEMODE_CCR) || (Mode == DIVEMODE_PSCR))
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 539
diff changeset
882 {
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 539
diff changeset
883 retVal = 1;
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 539
diff changeset
884 }
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 539
diff changeset
885 return retVal;
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 539
diff changeset
886 }
774
6169309d6eb9 more menu items for the compass menu: Delete bearing, and reset to land based bearing. I have also re-enabled the real time bearing display in the menu - makes it easier to set the correct bearing. (mikeller)
heinrichsweikamp
parents: 771
diff changeset
887
776
45b8f3c2acce Add support for a configurable compass declination in a range of -99 to 99 degrees.
heinrichsweikamp
parents: 774
diff changeset
888
45b8f3c2acce Add support for a configurable compass declination in a range of -99 to 99 degrees.
heinrichsweikamp
parents: 774
diff changeset
889 bool isCompassCalibrated(void)
45b8f3c2acce Add support for a configurable compass declination in a range of -99 to 99 degrees.
heinrichsweikamp
parents: 774
diff changeset
890 {
45b8f3c2acce Add support for a configurable compass declination in a range of -99 to 99 degrees.
heinrichsweikamp
parents: 774
diff changeset
891 return stateUsed->lifeData.compass_heading != -1;
45b8f3c2acce Add support for a configurable compass declination in a range of -99 to 99 degrees.
heinrichsweikamp
parents: 774
diff changeset
892 }
45b8f3c2acce Add support for a configurable compass declination in a range of -99 to 99 degrees.
heinrichsweikamp
parents: 774
diff changeset
893
45b8f3c2acce Add support for a configurable compass declination in a range of -99 to 99 degrees.
heinrichsweikamp
parents: 774
diff changeset
894
774
6169309d6eb9 more menu items for the compass menu: Delete bearing, and reset to land based bearing. I have also re-enabled the real time bearing display in the menu - makes it easier to set the correct bearing. (mikeller)
heinrichsweikamp
parents: 771
diff changeset
895 void setCompassHeading(uint16_t heading)
6169309d6eb9 more menu items for the compass menu: Delete bearing, and reset to land based bearing. I have also re-enabled the real time bearing display in the menu - makes it easier to set the correct bearing. (mikeller)
heinrichsweikamp
parents: 771
diff changeset
896 {
6169309d6eb9 more menu items for the compass menu: Delete bearing, and reset to land based bearing. I have also re-enabled the real time bearing display in the menu - makes it easier to set the correct bearing. (mikeller)
heinrichsweikamp
parents: 771
diff changeset
897
6169309d6eb9 more menu items for the compass menu: Delete bearing, and reset to land based bearing. I have also re-enabled the real time bearing display in the menu - makes it easier to set the correct bearing. (mikeller)
heinrichsweikamp
parents: 771
diff changeset
898 // if heading == 0 set compassHeading to 360, because compassHeading == 0 means 'off'
6169309d6eb9 more menu items for the compass menu: Delete bearing, and reset to land based bearing. I have also re-enabled the real time bearing display in the menu - makes it easier to set the correct bearing. (mikeller)
heinrichsweikamp
parents: 771
diff changeset
899
6169309d6eb9 more menu items for the compass menu: Delete bearing, and reset to land based bearing. I have also re-enabled the real time bearing display in the menu - makes it easier to set the correct bearing. (mikeller)
heinrichsweikamp
parents: 771
diff changeset
900 stateUsedWrite->diveSettings.compassHeading = ((heading - 360) % 360) + 360;
6169309d6eb9 more menu items for the compass menu: Delete bearing, and reset to land based bearing. I have also re-enabled the real time bearing display in the menu - makes it easier to set the correct bearing. (mikeller)
heinrichsweikamp
parents: 771
diff changeset
901 }
788
4abfb8a2a435 Define explicit setpoints for low / high / deco. Add an option to delay the switch to SPlow until all decompression has been cleared. (mikeller)
heinrichsweikamp
parents: 776
diff changeset
902
4abfb8a2a435 Define explicit setpoints for low / high / deco. Add an option to delay the switch to SPlow until all decompression has been cleared. (mikeller)
heinrichsweikamp
parents: 776
diff changeset
903
4abfb8a2a435 Define explicit setpoints for low / high / deco. Add an option to delay the switch to SPlow until all decompression has been cleared. (mikeller)
heinrichsweikamp
parents: 776
diff changeset
904 const SDecoinfo *getDecoInfo(void)
4abfb8a2a435 Define explicit setpoints for low / high / deco. Add an option to delay the switch to SPlow until all decompression has been cleared. (mikeller)
heinrichsweikamp
parents: 776
diff changeset
905 {
4abfb8a2a435 Define explicit setpoints for low / high / deco. Add an option to delay the switch to SPlow until all decompression has been cleared. (mikeller)
heinrichsweikamp
parents: 776
diff changeset
906 const SDecoinfo *decoInfo;
4abfb8a2a435 Define explicit setpoints for low / high / deco. Add an option to delay the switch to SPlow until all decompression has been cleared. (mikeller)
heinrichsweikamp
parents: 776
diff changeset
907 if (stateUsed->diveSettings.deco_type.ub.standard == GF_MODE) {
4abfb8a2a435 Define explicit setpoints for low / high / deco. Add an option to delay the switch to SPlow until all decompression has been cleared. (mikeller)
heinrichsweikamp
parents: 776
diff changeset
908 decoInfo = &stateUsed->decolistBuehlmann;
4abfb8a2a435 Define explicit setpoints for low / high / deco. Add an option to delay the switch to SPlow until all decompression has been cleared. (mikeller)
heinrichsweikamp
parents: 776
diff changeset
909 } else {
4abfb8a2a435 Define explicit setpoints for low / high / deco. Add an option to delay the switch to SPlow until all decompression has been cleared. (mikeller)
heinrichsweikamp
parents: 776
diff changeset
910 decoInfo = &stateUsed->decolistVPM;
4abfb8a2a435 Define explicit setpoints for low / high / deco. Add an option to delay the switch to SPlow until all decompression has been cleared. (mikeller)
heinrichsweikamp
parents: 776
diff changeset
911 }
4abfb8a2a435 Define explicit setpoints for low / high / deco. Add an option to delay the switch to SPlow until all decompression has been cleared. (mikeller)
heinrichsweikamp
parents: 776
diff changeset
912
4abfb8a2a435 Define explicit setpoints for low / high / deco. Add an option to delay the switch to SPlow until all decompression has been cleared. (mikeller)
heinrichsweikamp
parents: 776
diff changeset
913 return decoInfo;
4abfb8a2a435 Define explicit setpoints for low / high / deco. Add an option to delay the switch to SPlow until all decompression has been cleared. (mikeller)
heinrichsweikamp
parents: 776
diff changeset
914 }
805
dd7ce655db26 Adds a simple countdown timer, available as a custom view in surface and dive mode.
heinrichsweikamp
parents: 788
diff changeset
915
dd7ce655db26 Adds a simple countdown timer, available as a custom view in surface and dive mode.
heinrichsweikamp
parents: 788
diff changeset
916
dd7ce655db26 Adds a simple countdown timer, available as a custom view in surface and dive mode.
heinrichsweikamp
parents: 788
diff changeset
917 void disableTimer(void)
dd7ce655db26 Adds a simple countdown timer, available as a custom view in surface and dive mode.
heinrichsweikamp
parents: 788
diff changeset
918 {
dd7ce655db26 Adds a simple countdown timer, available as a custom view in surface and dive mode.
heinrichsweikamp
parents: 788
diff changeset
919 stateUsedWrite->timerState = TIMER_STATE_OFF;
dd7ce655db26 Adds a simple countdown timer, available as a custom view in surface and dive mode.
heinrichsweikamp
parents: 788
diff changeset
920 }
868
db92692c014f Introduce speed dependend coloring of depth:
Ideenmodellierer
parents: 841
diff changeset
921
db92692c014f Introduce speed dependend coloring of depth:
Ideenmodellierer
parents: 841
diff changeset
922 #define SPEED_SLOW (5.0f)
db92692c014f Introduce speed dependend coloring of depth:
Ideenmodellierer
parents: 841
diff changeset
923 #define SPEED_MEDIUM (10.0f)
db92692c014f Introduce speed dependend coloring of depth:
Ideenmodellierer
parents: 841
diff changeset
924 #define SPEED_HIGH (15.0f)
891
a7f4451ba69e Added hysteresis for ascent speed coloring:
ideenmodellierer
parents: 873
diff changeset
925 #define SPEED_HYSTERESE (1.0f)
868
db92692c014f Introduce speed dependend coloring of depth:
Ideenmodellierer
parents: 841
diff changeset
926
db92692c014f Introduce speed dependend coloring of depth:
Ideenmodellierer
parents: 841
diff changeset
927 uint8_t drawingColor_from_ascentspeed(float speed)
db92692c014f Introduce speed dependend coloring of depth:
Ideenmodellierer
parents: 841
diff changeset
928 {
891
a7f4451ba69e Added hysteresis for ascent speed coloring:
ideenmodellierer
parents: 873
diff changeset
929 static uint8_t lastColor = 0;
a7f4451ba69e Added hysteresis for ascent speed coloring:
ideenmodellierer
parents: 873
diff changeset
930
868
db92692c014f Introduce speed dependend coloring of depth:
Ideenmodellierer
parents: 841
diff changeset
931 uint8_t color = CLUT_Font020;
db92692c014f Introduce speed dependend coloring of depth:
Ideenmodellierer
parents: 841
diff changeset
932
891
a7f4451ba69e Added hysteresis for ascent speed coloring:
ideenmodellierer
parents: 873
diff changeset
933 if((speed >= SPEED_HIGH) || ((lastColor == CLUT_WarningRed) && (speed >= SPEED_HIGH - SPEED_HYSTERESE)))
868
db92692c014f Introduce speed dependend coloring of depth:
Ideenmodellierer
parents: 841
diff changeset
934 {
db92692c014f Introduce speed dependend coloring of depth:
Ideenmodellierer
parents: 841
diff changeset
935 color = CLUT_WarningRed;
db92692c014f Introduce speed dependend coloring of depth:
Ideenmodellierer
parents: 841
diff changeset
936 }
891
a7f4451ba69e Added hysteresis for ascent speed coloring:
ideenmodellierer
parents: 873
diff changeset
937 else if((speed >= SPEED_MEDIUM) || ((lastColor == CLUT_WarningYellow) && (speed >= SPEED_MEDIUM - SPEED_HYSTERESE)))
868
db92692c014f Introduce speed dependend coloring of depth:
Ideenmodellierer
parents: 841
diff changeset
938 {
db92692c014f Introduce speed dependend coloring of depth:
Ideenmodellierer
parents: 841
diff changeset
939 color = CLUT_WarningYellow;
db92692c014f Introduce speed dependend coloring of depth:
Ideenmodellierer
parents: 841
diff changeset
940 }
891
a7f4451ba69e Added hysteresis for ascent speed coloring:
ideenmodellierer
parents: 873
diff changeset
941 else if((speed >= SPEED_SLOW) || ((lastColor == CLUT_NiceGreen) && (speed >= SPEED_SLOW - SPEED_HYSTERESE)))
868
db92692c014f Introduce speed dependend coloring of depth:
Ideenmodellierer
parents: 841
diff changeset
942 {
db92692c014f Introduce speed dependend coloring of depth:
Ideenmodellierer
parents: 841
diff changeset
943 color = CLUT_NiceGreen;
db92692c014f Introduce speed dependend coloring of depth:
Ideenmodellierer
parents: 841
diff changeset
944 }
891
a7f4451ba69e Added hysteresis for ascent speed coloring:
ideenmodellierer
parents: 873
diff changeset
945 lastColor = color;
868
db92692c014f Introduce speed dependend coloring of depth:
Ideenmodellierer
parents: 841
diff changeset
946 return color;
db92692c014f Introduce speed dependend coloring of depth:
Ideenmodellierer
parents: 841
diff changeset
947 }
db92692c014f Introduce speed dependend coloring of depth:
Ideenmodellierer
parents: 841
diff changeset
948
db92692c014f Introduce speed dependend coloring of depth:
Ideenmodellierer
parents: 841
diff changeset
949