annotate Discovery/Src/data_central.c @ 676:c855753af9a6 Betatest

Allow longer scrubber time Do not limit the user. Signed-off-by: Jan Mulder <jan@jlmulder.nl>
author Jan Mulder <jan@jlmulder.nl>
date Mon, 22 Nov 2021 19:39:11 +0100
parents 1b995079c045
children 8775d3dc6325
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"
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
75
225
2bb1db22b5f5 cleanup: random set of cleanups
Jan Mulder <jlmulder@xs4all.nl>
parents: 149
diff changeset
76 static SDiveState stateReal = { 0 };
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
77 SDiveState stateSim = { 0 };
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
78 SDiveState stateDeco = { 0 };
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
79
300
5ca177d2df5d cleanup: remove commented/unused code, make static
Jan Mulder <jlmulder@xs4all.nl>
parents: 281
diff changeset
80 static SDevice stateDevice =
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
81 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
82 /* max is 0x7FFFFFFF, min is 0x80000000 but also defined in stdint.h :-) */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
83
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
84 /* count, use 0 */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
85 .batteryChargeCompleteCycles.value_int32 = 0,
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
86 .batteryChargeCycles.value_int32 = 0,
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
87 .diveCycles.value_int32 = 0,
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
88 .hoursOfOperation.value_int32 = 0,
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
89
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
90 /* max values, use min. */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
91 .temperatureMaximum.value_int32 = INT32_MIN,
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
92 .depthMaximum.value_int32 = INT32_MIN,
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
93
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
94 /* min values, use max. */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
95 .temperatureMinimum.value_int32 = INT32_MAX,
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
96 .voltageMinimum.value_int32 = INT32_MAX,
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
97 };
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
98
300
5ca177d2df5d cleanup: remove commented/unused code, make static
Jan Mulder <jlmulder@xs4all.nl>
parents: 281
diff changeset
99 static SVpmRepetitiveData stateVPM =
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
100 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
101 .repetitive_variables_not_valid = 1,
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
102 .is_data_from_RTE_CPU = 0,
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
103 };
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
104
271
1303747b5ba2 cleanup: also write gas and setpoint changes in simulator mode
Jan Mulder <jlmulder@xs4all.nl>
parents: 270
diff changeset
105 const SDiveState *stateUsed = &stateReal;
1303747b5ba2 cleanup: also write gas and setpoint changes in simulator mode
Jan Mulder <jlmulder@xs4all.nl>
parents: 270
diff changeset
106 SDiveState *stateUsedWrite = &stateReal;
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
107
539
d784f281833a Added inertia simulation for compass heading:
Ideenmodellierer
parents: 310
diff changeset
108
d784f281833a Added inertia simulation for compass heading:
Ideenmodellierer
parents: 310
diff changeset
109 #define COMPASS_FRACTION (4.0f) /* delay till value changes to new actual */
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 static float compass_compensated = 0;
d784f281833a Added inertia simulation for compass heading:
Ideenmodellierer
parents: 310
diff changeset
112
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
113 void set_stateUsedToReal(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
114 {
271
1303747b5ba2 cleanup: also write gas and setpoint changes in simulator mode
Jan Mulder <jlmulder@xs4all.nl>
parents: 270
diff changeset
115 stateUsed = stateUsedWrite = &stateReal;
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
116 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
117
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
118 void set_stateUsedToSim(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
119 {
271
1303747b5ba2 cleanup: also write gas and setpoint changes in simulator mode
Jan Mulder <jlmulder@xs4all.nl>
parents: 270
diff changeset
120 stateUsed = stateUsedWrite = &stateSim;
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
121 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
122
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
123 _Bool is_stateUsedSetToSim(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
124 {
225
2bb1db22b5f5 cleanup: random set of cleanups
Jan Mulder <jlmulder@xs4all.nl>
parents: 149
diff changeset
125 return stateUsed == &stateSim;
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
126 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
127
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
128 const SDiveState * stateRealGetPointer(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
129 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
130 return &stateReal;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
131 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
132
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
133 SDiveState * stateRealGetPointerWrite(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
134 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
135 return &stateReal;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
136 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
137
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
138
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
139 const SDiveState * stateSimGetPointer(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
140 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
141 return &stateSim;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
142 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
143
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
144
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
145 SDiveState * stateSimGetPointerWrite(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
146 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
147 return &stateSim;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
148 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
149
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
150
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
151 const SDevice * stateDeviceGetPointer(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
152 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
153 return &stateDevice;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
154 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
155
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
156
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
157 SDevice * stateDeviceGetPointerWrite(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
158 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
159 return &stateDevice;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
160 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
161
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
162
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
163 const SVpmRepetitiveData * stateVpmRepetitiveDataGetPointer(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
164 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
165 return &stateVPM;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
166 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
167
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
168
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
169 SVpmRepetitiveData * stateVpmRepetitiveDataGetPointerWrite(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
170 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
171 return &stateVPM;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
172 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
173
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
174
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
175 uint32_t time_elapsed_ms(uint32_t ticksstart,uint32_t ticksnow)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
176 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
177 if(ticksstart <= ticksnow)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
178 return ticksnow - ticksstart;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
179 else
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
180 return 0xFFFFFFFF - ticksstart + ticksnow;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
181 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
182
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
183
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
184 uint8_t decoLock = DECO_CALC_undefined;
300
5ca177d2df5d cleanup: remove commented/unused code, make static
Jan Mulder <jlmulder@xs4all.nl>
parents: 281
diff changeset
185
5ca177d2df5d cleanup: remove commented/unused code, make static
Jan Mulder <jlmulder@xs4all.nl>
parents: 281
diff changeset
186 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
187 static int max_depth = 70;
5ca177d2df5d cleanup: remove commented/unused code, make static
Jan Mulder <jlmulder@xs4all.nl>
parents: 281
diff changeset
188 static int bottom_time = 10;
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
189
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
190 _Bool vpm_crush(SDiveState* pDiveState);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
191 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
192 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
193 descent_rate_meter_per_min = _descent_rate_meter_per_min;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
194 max_depth = _max_depth;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
195 bottom_time = _bottom_time;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
196 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
197
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
198 int current_second(void) {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
199
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
200 return HAL_GetTick() / 1000;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
201 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
202
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
203 #define OXY_ONE_SIXTIETH_PART 0.0166667f
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
204
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
205 uint8_t calc_MOD(uint8_t gasId)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
206 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
207 int16_t oxygen, maxppO2, result;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
208 SSettings *pSettings;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
209
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
210 pSettings = settingsGetPointer();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
211
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
212 oxygen = (int16_t)(pSettings->gas[gasId].oxygen_percentage);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
213
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
214 if(pSettings->gas[gasId].note.ub.deco > 0)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
215 maxppO2 =(int16_t)(pSettings->ppO2_max_deco);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
216 else
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
217 maxppO2 =(int16_t)(pSettings->ppO2_max_std);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
218
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
219 result = 10 * maxppO2;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
220 result /= oxygen;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
221 result -= 10;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
222
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
223 if(result < 0)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
224 return 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
225
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
226 if(result > 255)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
227 return 255;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
228
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
229 return result;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
230 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
231
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
232 float get_ambiant_pressure_simulation(long dive_time_seconds, float surface_pressure_bar )
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
233 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
234 static
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
235 long descent_time;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
236 float depth_meter;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
237
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
238 descent_time = 60 * max_depth / descent_rate_meter_per_min;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
239
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
240 if(dive_time_seconds <= descent_time)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
241 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
242 depth_meter = ((float)(dive_time_seconds * descent_rate_meter_per_min)) / 60;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
243 return surface_pressure_bar + depth_meter / 10;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
244 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
245 //else if(dive_time_seconds <= (descent_time + bottom_time * 60))
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
246 return surface_pressure_bar + max_depth / 10;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
247
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
248
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 void UpdateLifeDataTest(SDiveState * pDiveState)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
253 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
254 static int last_second = -1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
255 int now = current_second();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
256 if(last_second == now)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
257 return;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
258 last_second = now;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
259
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
260 pDiveState->lifeData.dive_time_seconds += 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
261 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
262
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
263 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
264 if(pDiveState->lifeData.max_depth_meter < pDiveState->lifeData.depth_meter)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
265 pDiveState->lifeData.max_depth_meter = pDiveState->lifeData.depth_meter;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
266 decom_tissues_exposure(1, &pDiveState->lifeData);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
267 pDiveState->lifeData.ppO2 = decom_calc_ppO2( pDiveState->lifeData.pressure_ambient_bar, &pDiveState->lifeData.actualGas);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
268 decom_oxygen_calculate_cns(& pDiveState->lifeData.cns, pDiveState->lifeData.ppO2);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
269
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
270 vpm_crush(pDiveState);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
271 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
272
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
273
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
274 _Bool vpm_crush(SDiveState* pDiveState)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
275 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
276 int i = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
277 static float starting_ambient_pressure = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
278 static float ending_ambient_pressure = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
279 static float time_calc_begin = -1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
280 static float initial_helium_pressure[16];
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
281 static float initial_nitrogen_pressure[16];
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
282 ending_ambient_pressure = pDiveState->lifeData.pressure_ambient_bar * 10;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
283
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
284 if((pDiveState->lifeData.dive_time_seconds <= 4) || (starting_ambient_pressure >= ending_ambient_pressure))
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
285 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
286 time_calc_begin = pDiveState->lifeData.dive_time_seconds;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
287 starting_ambient_pressure = pDiveState->lifeData.pressure_ambient_bar * 10;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
288 for( i = 0; i < 16; i++)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
289 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
290 initial_helium_pressure[i] = pDiveState->lifeData.tissue_helium_bar[i] * 10;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
291 initial_nitrogen_pressure[i] = pDiveState->lifeData.tissue_nitrogen_bar[i] * 10;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
292 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
293 return false;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
294 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
295 if(pDiveState->lifeData.dive_time_seconds - time_calc_begin >= 4)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
296 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
297 if(ending_ambient_pressure > starting_ambient_pressure + 0.5f)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
298 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
299 float rate = (ending_ambient_pressure - starting_ambient_pressure) * 60 / 4;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
300 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
301
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
302 time_calc_begin = pDiveState->lifeData.dive_time_seconds;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
303 starting_ambient_pressure = pDiveState->lifeData.pressure_ambient_bar * 10;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
304 for( i = 0; i < 16; i++)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
305 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
306 initial_helium_pressure[i] = pDiveState->lifeData.tissue_helium_bar[i] * 10;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
307 initial_nitrogen_pressure[i] = pDiveState->lifeData.tissue_nitrogen_bar[i] * 10;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
308 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
309
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
310 return true;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
311 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
312
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
313 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
314 return false;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
315 };
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
316
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
317
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
318 void createDiveSettings(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
319 {
662
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 539
diff changeset
320 int i;
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
321 SSettings* pSettings = settingsGetPointer();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
322
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
323 setActualGasFirst(&stateReal.lifeData);
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));
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
342 stateReal.diveSettings.gf_high = pSettings->GF_high;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
343 stateReal.diveSettings.gf_low = pSettings->GF_low;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
344 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
345 stateReal.diveSettings.last_stop_depth_bar = ((float)pSettings->last_stop_depth_meter) / 10.0f;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
346 stateReal.diveSettings.vpm_conservatism = pSettings->VPM_conservatism.ub.standard;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
347 stateReal.diveSettings.deco_type.uw = pSettings->deco_type.uw;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
348 stateReal.diveSettings.fallbackOption = pSettings->fallbackToFixedSetpoint;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
349 stateReal.diveSettings.ppo2sensors_deactivated = pSettings->ppo2sensors_deactivated;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
350 stateReal.diveSettings.future_TTS_minutes = pSettings->future_TTS;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
351
662
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 539
diff changeset
352 stateReal.diveSettings.pscr_lung_ratio = pSettings->pscr_lung_ratio;
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 539
diff changeset
353 stateReal.diveSettings.pscr_o2_drop = pSettings->pscr_o2_drop;
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 539
diff changeset
354
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 539
diff changeset
355 if(stateReal.diveSettings.diveMode == DIVEMODE_PSCR)
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 539
diff changeset
356 {
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 539
diff changeset
357 for(i=0; i<5; i++)
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 539
diff changeset
358 {
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 539
diff changeset
359 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
360 }
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 539
diff changeset
361 }
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 539
diff changeset
362
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
363 decom_CreateGasChangeList(&stateReal.diveSettings, &stateReal.lifeData); // decogaslist
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
364 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
365
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
366 /* for safety */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
367 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
368 /* and the proper calc */
662
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 539
diff changeset
369 for(i = 1; i <10; i++)
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
370 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
371 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
372 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
373 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
374 break;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
375 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
376 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
377 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
378
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
379
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
380 void copyDiveSettingsToSim(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
381 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
382 memcpy(&stateSim, &stateReal, sizeof(stateReal));
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
383 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
384
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
385
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
386 void copyVpmRepetetiveDataToSim(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
387 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
388 SDiveState * pSimData = stateSimGetPointerWrite();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
389 const SVpmRepetitiveData * pVpmData = stateVpmRepetitiveDataGetPointer();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
390
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
391 if(pVpmData->is_data_from_RTE_CPU)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
392 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
393 for(int i=0; i<16;i++)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
394 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
395 pSimData->vpm.adjusted_critical_radius_he[i] = pVpmData->adjusted_critical_radius_he[i];
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
396 pSimData->vpm.adjusted_critical_radius_n2[i] = pVpmData->adjusted_critical_radius_n2[i];
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
397
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
398 pSimData->vpm.adjusted_crushing_pressure_he[i] = pVpmData->adjusted_crushing_pressure_he[i];
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
399 pSimData->vpm.adjusted_crushing_pressure_n2[i] = pVpmData->adjusted_crushing_pressure_n2[i];
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
400
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
401 pSimData->vpm.initial_allowable_gradient_he[i] = pVpmData->initial_allowable_gradient_he[i];
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
402 pSimData->vpm.initial_allowable_gradient_n2[i] = pVpmData->initial_allowable_gradient_n2[i];
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
403
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
404 pSimData->vpm.max_actual_gradient[i] = pVpmData->max_actual_gradient[i];
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
405 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
406 pSimData->vpm.repetitive_variables_not_valid = pVpmData->repetitive_variables_not_valid;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
407 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
408 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
409
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
410
662
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 539
diff changeset
411
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 539
diff changeset
412
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
413 void updateSetpointStateUsed(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
414 {
662
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 539
diff changeset
415 if(!isLoopMode(stateReal.diveSettings.diveMode))
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
416 {
271
1303747b5ba2 cleanup: also write gas and setpoint changes in simulator mode
Jan Mulder <jlmulder@xs4all.nl>
parents: 270
diff changeset
417 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
418 stateUsedWrite->lifeData.ppO2 = decom_calc_ppO2(stateUsed->lifeData.pressure_ambient_bar, &stateUsed->lifeData.actualGas);
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
419 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
420 else
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
421 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
422 if(stateUsed->diveSettings.CCR_Mode == CCRMODE_Sensors)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
423 {
271
1303747b5ba2 cleanup: also write gas and setpoint changes in simulator mode
Jan Mulder <jlmulder@xs4all.nl>
parents: 270
diff changeset
424 stateUsedWrite->lifeData.actualGas.setPoint_cbar = get_ppO2SensorWeightedResult_cbar();
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
425 }
662
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 539
diff changeset
426 #ifdef ENABLE_PSCR_MODE
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 539
diff changeset
427 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
428 {
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 539
diff changeset
429 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
430 if(stateUsed->diveSettings.CCR_Mode == CCRMODE_Simulation)
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 539
diff changeset
431 {
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 539
diff changeset
432 stateUsedWrite->lifeData.actualGas.setPoint_cbar = stateUsedWrite->lifeData.ppo2Simulated_bar * 100;
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 539
diff changeset
433 }
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 539
diff changeset
434 }
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 539
diff changeset
435 #endif
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 539
diff changeset
436 /* limit calculated value to the physically possible if needed */
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
437 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
438 stateUsedWrite->lifeData.ppO2 = stateUsed->lifeData.pressure_ambient_bar;
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
439 else
271
1303747b5ba2 cleanup: also write gas and setpoint changes in simulator mode
Jan Mulder <jlmulder@xs4all.nl>
parents: 270
diff changeset
440 stateUsedWrite->lifeData.ppO2 = ((float)stateUsed->lifeData.actualGas.setPoint_cbar) / 100;
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
441 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
442 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
443
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
444 void setActualGasFirst(SLifeData *lifeData)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
445 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
446 SSettings* pSettings = settingsGetPointer();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
447 uint8_t start = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
448 uint8_t gasId = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
449 uint8_t setpoint_cbar = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
450
662
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 539
diff changeset
451 if(isLoopMode(pSettings->dive_mode))
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
452 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
453 setpoint_cbar = pSettings->setpoint[1].setpoint_cbar;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
454 start = NUM_OFFSET_DILUENT+1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
455 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
456 else
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
457 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
458 setpoint_cbar = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
459 start = 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
460 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
461
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
462 gasId = start;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
463 for(int i=start;i<=NUM_GASES+start;i++)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
464 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
465 if(pSettings->gas[i].note.ub.first)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
466 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
467 gasId = i;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
468 break;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
469 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
470 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
471 setActualGas(lifeData, gasId, setpoint_cbar);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
472 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
473
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
474 void setActualGasAir(SLifeData *lifeData)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
475 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
476 uint8_t nitrogen;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
477 nitrogen = 79;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
478 lifeData->actualGas.GasIdInSettings = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
479 lifeData->actualGas.nitrogen_percentage = nitrogen;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
480 lifeData->actualGas.helium_percentage =0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
481 lifeData->actualGas.setPoint_cbar = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
482 lifeData->actualGas.change_during_ascent_depth_meter_otherwise_zero = 0;
662
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 539
diff changeset
483 lifeData->actualGas.AppliedDiveMode = stateUsed->diveSettings.diveMode;
38
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
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
487 void setActualGas(SLifeData *lifeData, uint8_t gasId, uint8_t setpoint_cbar)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
488 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
489 SSettings* pSettings = settingsGetPointer();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
490 uint8_t nitrogen;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
491
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
492 nitrogen = 100;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
493 nitrogen -= pSettings->gas[gasId].oxygen_percentage;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
494 nitrogen -= pSettings->gas[gasId].helium_percentage;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
495
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
496 lifeData->actualGas.GasIdInSettings = gasId;
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 = pSettings->gas[gasId].helium_percentage;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
499 lifeData->actualGas.setPoint_cbar = setpoint_cbar;
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 = pSettings->dive_mode;
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 539
diff changeset
502 lifeData->actualGas.pscr_factor = 1.0 / pSettings->pscr_lung_ratio * pSettings->pscr_o2_drop;
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 539
diff changeset
503 if(isLoopMode(pSettings->dive_mode) && (gasId > NUM_OFFSET_DILUENT))
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
504 lifeData->lastDiluent_GasIdInSettings = gasId;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
505 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
506
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
507
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
508 void setActualGas_DM(SLifeData *lifeData, uint8_t gasId, uint8_t setpoint_cbar)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
509 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
510 if(stateUsed->diveSettings.ccrOption && gasId < 6)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
511 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
512 if(lifeData->actualGas.GasIdInSettings != gasId)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
513 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
514 SSettings* pSettings = settingsGetPointer();
271
1303747b5ba2 cleanup: also write gas and setpoint changes in simulator mode
Jan Mulder <jlmulder@xs4all.nl>
parents: 270
diff changeset
515 stateUsedWrite->events.bailout = 1;
1303747b5ba2 cleanup: also write gas and setpoint changes in simulator mode
Jan Mulder <jlmulder@xs4all.nl>
parents: 270
diff changeset
516 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
517 stateUsedWrite->events.info_bailoutHe = pSettings->gas[gasId].helium_percentage;
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
518 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
519 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
520 else
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
521 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
522 if(lifeData->actualGas.GasIdInSettings != gasId)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
523 {
271
1303747b5ba2 cleanup: also write gas and setpoint changes in simulator mode
Jan Mulder <jlmulder@xs4all.nl>
parents: 270
diff changeset
524 stateUsedWrite->events.gasChange = 1;
1303747b5ba2 cleanup: also write gas and setpoint changes in simulator mode
Jan Mulder <jlmulder@xs4all.nl>
parents: 270
diff changeset
525 stateUsedWrite->events.info_GasChange = gasId;
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
526 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
527 if( lifeData->actualGas.setPoint_cbar != setpoint_cbar)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
528 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
529 // 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
530 stateUsedWrite->events.setpointChange = 1;
1303747b5ba2 cleanup: also write gas and setpoint changes in simulator mode
Jan Mulder <jlmulder@xs4all.nl>
parents: 270
diff changeset
531 stateUsedWrite->events.info_SetpointChange = setpoint_cbar;
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
532 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
533 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
534 setActualGas(lifeData, gasId, setpoint_cbar);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
535 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
536
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
537 void setActualGas_ExtraGas(SLifeData *lifeData, uint8_t oxygen, uint8_t helium, uint8_t setpoint_cbar)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
538 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
539 uint8_t nitrogen;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
540
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
541 nitrogen = 100;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
542 nitrogen -= oxygen;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
543 nitrogen -= helium;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
544
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
545 if((lifeData->actualGas.nitrogen_percentage != nitrogen) || (lifeData->actualGas.helium_percentage != helium))
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
546 {
281
54d14bc2083c Fix typos (There are still many...)
heinrichsweikamp
parents: 271
diff changeset
547 stateUsedWrite->events.manualGasSet = 1;
54d14bc2083c Fix typos (There are still many...)
heinrichsweikamp
parents: 271
diff changeset
548 stateUsedWrite->events.info_manualGasSetHe = helium;
54d14bc2083c Fix typos (There are still many...)
heinrichsweikamp
parents: 271
diff changeset
549 stateUsedWrite->events.info_manualGasSetO2 = oxygen;
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
550 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
551 if( lifeData->actualGas.setPoint_cbar != setpoint_cbar)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
552 {
271
1303747b5ba2 cleanup: also write gas and setpoint changes in simulator mode
Jan Mulder <jlmulder@xs4all.nl>
parents: 270
diff changeset
553 stateUsedWrite->events.setpointChange = 1;
1303747b5ba2 cleanup: also write gas and setpoint changes in simulator mode
Jan Mulder <jlmulder@xs4all.nl>
parents: 270
diff changeset
554 stateUsedWrite->events.info_SetpointChange = setpoint_cbar;
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
555 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
556 lifeData->actualGas.GasIdInSettings = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
557 lifeData->actualGas.nitrogen_percentage = nitrogen;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
558 lifeData->actualGas.helium_percentage = helium;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
559 lifeData->actualGas.setPoint_cbar = setpoint_cbar;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
560 lifeData->actualGas.change_during_ascent_depth_meter_otherwise_zero = 0;
662
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 539
diff changeset
561 lifeData->actualGas.AppliedDiveMode = stateUsed->diveSettings.diveMode;
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
562 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
563
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
564 void setButtonResponsiveness(uint8_t *ButtonSensitivyList)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
565 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
566 SDataReceiveFromMaster *pDataOut = dataOutGetPointer();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
567
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
568 for(int i=0; i<4; i++)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
569 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
570 pDataOut->data.buttonResponsiveness[i] = settingsHelperButtonSens_translate_percentage_to_hwOS_values(ButtonSensitivyList[i]);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
571 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
572 pDataOut->setButtonSensitivityNow = 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
573 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
574
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
575
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
576 void setDate(RTC_DateTypeDef Sdate)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
577 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
578 SDataReceiveFromMaster *pDataOut = dataOutGetPointer();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
579
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
580 pDataOut->data.newDate = Sdate;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
581 pDataOut->setDateNow = 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
582 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
583
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
584
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
585 void setTime(RTC_TimeTypeDef Stime)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
586 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
587 SDataReceiveFromMaster *pDataOut = dataOutGetPointer();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
588
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
589 pDataOut->data.newTime = Stime;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
590 pDataOut->setTimeNow = 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
591 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
592
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
593
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
594 void setBatteryPercentage(uint8_t newChargePercentage)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
595 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
596 SDataReceiveFromMaster *pDataOut = dataOutGetPointer();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
597
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
598 pDataOut->data.newBatteryGaugePercentageFloat = settingsGetPointer()->lastKnownBatteryPercentage;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
599 pDataOut->setBatteryGaugeNow = 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
600 }
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 void calibrateCompass(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
604 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
605 SDataReceiveFromMaster *pDataOut = dataOutGetPointer();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
606 pDataOut->calibrateCompassNow = 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
607 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
608
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
609
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
610 void clearDeco(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
611 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
612 SDataReceiveFromMaster *pDataOut = dataOutGetPointer();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
613 pDataOut->clearDecoNow = 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
614
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
615 stateRealGetPointerWrite()->cnsHigh_at_the_end_of_dive = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
616 stateRealGetPointerWrite()->decoMissed_at_the_end_of_dive = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
617 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
618
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
619
300
5ca177d2df5d cleanup: remove commented/unused code, make static
Jan Mulder <jlmulder@xs4all.nl>
parents: 281
diff changeset
620 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
621 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
622 y += 2000;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
623 y -= m <= 2;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
624 int32_t era = (y >= 0 ? y : y-399) / 400;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
625 uint32_t yoe = (uint32_t)(y - era * 400); // [0, 399]
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
626 uint32_t doy = (153*(m + (m > 2 ? -3 : 9)) + 2)/5 + d-1; // [0, 365]
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
627 uint32_t doe = yoe * 365 + yoe/4 - yoe/100 + doy; // [0, 146096]
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
628 return era * 146097 + (int32_t)(doe) - 719468;
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
300
5ca177d2df5d cleanup: remove commented/unused code, make static
Jan Mulder <jlmulder@xs4all.nl>
parents: 281
diff changeset
632 static uint8_t helper_weekday_from_days(int32_t z)
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
633 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
634 return (uint8_t)(z >= -4 ? (z+4) % 7 : (z+5) % 7 + 6);
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 setWeekday(RTC_DateTypeDef *sDate)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
639 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
640 uint8_t day;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
641 // [0, 6] -> [Sun, Sat]
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
642 day = helper_weekday_from_days(helper_days_from_civil(sDate->Year, sDate->Month, sDate->Date));
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
643 // [1, 7] -> [Mon, Sun]
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
644 if(day == 0)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
645 day = 7;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
646 sDate->WeekDay = day;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
647 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
648
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
649
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
650 void translateDate(uint32_t datetmpreg, RTC_DateTypeDef *sDate)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
651 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
652 datetmpreg = (uint32_t)(datetmpreg & RTC_DR_RESERVED_MASK);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
653
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
654 /* Fill the structure fields with the read parameters */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
655 sDate->Year = (uint8_t)((datetmpreg & (RTC_DR_YT | RTC_DR_YU)) >> 16);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
656 sDate->Month = (uint8_t)((datetmpreg & (RTC_DR_MT | RTC_DR_MU)) >> 8);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
657 sDate->Date = (uint8_t)(datetmpreg & (RTC_DR_DT | RTC_DR_DU));
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
658 sDate->WeekDay = (uint8_t)((datetmpreg & (RTC_DR_WDU)) >> 13);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
659
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
660 /* Convert the date structure parameters to Binary format */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
661 sDate->Year = (uint8_t)RTC_Bcd2ToByte(sDate->Year);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
662 sDate->Month = (uint8_t)RTC_Bcd2ToByte(sDate->Month);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
663 sDate->Date = (uint8_t)RTC_Bcd2ToByte(sDate->Date);
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 translateTime(uint32_t tmpreg, RTC_TimeTypeDef *sTime)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
667 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
668 tmpreg = (uint32_t)(tmpreg & RTC_TR_RESERVED_MASK);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
669
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
670 /* Fill the structure fields with the read parameters */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
671 sTime->Hours = (uint8_t)((tmpreg & (RTC_TR_HT | RTC_TR_HU)) >> 16);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
672 sTime->Minutes = (uint8_t)((tmpreg & (RTC_TR_MNT | RTC_TR_MNU)) >>8);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
673 sTime->Seconds = (uint8_t)(tmpreg & (RTC_TR_ST | RTC_TR_SU));
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
674 sTime->TimeFormat = (uint8_t)((tmpreg & (RTC_TR_PM)) >> 16);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
675
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
676 /* Convert the time structure parameters to Binary format */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
677 sTime->Hours = (uint8_t)RTC_Bcd2ToByte(sTime->Hours);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
678 sTime->Minutes = (uint8_t)RTC_Bcd2ToByte(sTime->Minutes);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
679 sTime->Seconds = (uint8_t)RTC_Bcd2ToByte(sTime->Seconds);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
680 sTime->SubSeconds = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
681 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
682
270
2e58a4094770 feature, debug: make simulator write a logbook entry
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
683 void resetEvents(const SDiveState *pStateUsed)
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
684 {
270
2e58a4094770 feature, debug: make simulator write a logbook entry
Jan Mulder <jlmulder@xs4all.nl>
parents: 225
diff changeset
685 memset((void *)&pStateUsed->events, 0, sizeof(SEvents));
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
686 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
687
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
688
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
689 uint32_t CRC_CalcBlockCRC_moreThan768000(uint32_t *buffer1, uint32_t *buffer2, uint32_t words)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
690 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
691 cm_t crc_model;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
692 uint32_t word_to_do;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
693 uint8_t byte_to_do;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
694 int i;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
695
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
696 // Values for the STM32F generator.
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
697
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
698 crc_model.cm_width = 32; // 32-bit CRC
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
699 crc_model.cm_poly = 0x04C11DB7; // CRC-32 polynomial
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
700 crc_model.cm_init = 0xFFFFFFFF; // CRC initialized to 1's
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
701 crc_model.cm_refin = FALSE; // CRC calculated MSB first
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
702 crc_model.cm_refot = FALSE; // Final result is not bit-reversed
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
703 crc_model.cm_xorot = 0x00000000; // Final result XOR'ed with this
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
704
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
705 cm_ini(&crc_model);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
706
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
707 while (words--)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
708 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
709 // The STM32F10x hardware does 32-bit words at a time!!!
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
710 if(words > (768000/4))
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
711 word_to_do = *buffer2++;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
712 else
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
713 word_to_do = *buffer1++;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
714
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
715 // Do all bytes in the 32-bit word.
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
716
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
717 for (i = 0; i < sizeof(word_to_do); i++)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
718 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
719 // We calculate a *byte* at a time. If the CRC is MSB first we
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
720 // do the next MS byte and vica-versa.
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
721
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
722 if (crc_model.cm_refin == FALSE)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
723 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
724 // MSB first. Do the next MS byte.
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
725
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
726 byte_to_do = (uint8_t) ((word_to_do & 0xFF000000) >> 24);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
727 word_to_do <<= 8;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
728 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
729 else
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
730 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
731 // LSB first. Do the next LS byte.
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
732
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
733 byte_to_do = (uint8_t) (word_to_do & 0x000000FF);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
734 word_to_do >>= 8;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
735 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
736
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
737 cm_nxt(&crc_model, byte_to_do);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
738 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
739 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
740
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
741 // Return the final result.
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
742
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
743 return (cm_crc(&crc_model));
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
744 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
745
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
746
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
747 uint32_t CRC_CalcBlockCRC(uint32_t *buffer, uint32_t words)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
748 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
749 cm_t crc_model;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
750 uint32_t word_to_do;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
751 uint8_t byte_to_do;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
752 int i;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
753
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
754 // Values for the STM32F generator.
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
755
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
756 crc_model.cm_width = 32; // 32-bit CRC
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
757 crc_model.cm_poly = 0x04C11DB7; // CRC-32 polynomial
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
758 crc_model.cm_init = 0xFFFFFFFF; // CRC initialized to 1's
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
759 crc_model.cm_refin = FALSE; // CRC calculated MSB first
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
760 crc_model.cm_refot = FALSE; // Final result is not bit-reversed
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
761 crc_model.cm_xorot = 0x00000000; // Final result XOR'ed with this
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
762
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
763 cm_ini(&crc_model);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
764
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
765 while (words--)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
766 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
767 // The STM32F10x hardware does 32-bit words at a time!!!
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
768
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
769 word_to_do = *buffer++;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
770
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
771 // Do all bytes in the 32-bit word.
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
772
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
773 for (i = 0; i < sizeof(word_to_do); i++)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
774 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
775 // We calculate a *byte* at a time. If the CRC is MSB first we
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
776 // do the next MS byte and vica-versa.
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
777
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
778 if (crc_model.cm_refin == FALSE)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
779 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
780 // MSB first. Do the next MS byte.
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
781
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
782 byte_to_do = (uint8_t) ((word_to_do & 0xFF000000) >> 24);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
783 word_to_do <<= 8;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
784 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
785 else
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
786 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
787 // LSB first. Do the next LS byte.
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
788
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
789 byte_to_do = (uint8_t) (word_to_do & 0x000000FF);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
790 word_to_do >>= 8;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
791 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
792
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
793 cm_nxt(&crc_model, byte_to_do);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
794 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
795 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
796
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
797 // Return the final result.
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
798
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
799 return (cm_crc(&crc_model));
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
800 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
801
302
eba8d1eb5bef bugfix, cleanup: keep both is_ambient_pressure_close_to_surface in sync
Jan Mulder <jlmulder@xs4all.nl>
parents: 300
diff changeset
802 // This code is also in RTE. Keep it in sync when editing
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
803 _Bool is_ambient_pressure_close_to_surface(SLifeData *lifeData)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
804 {
310
95928ef3986f Make dive mode detection more advanced
Jan Mulder <jlmulder@xs4all.nl>
parents: 302
diff changeset
805 if (lifeData->pressure_ambient_bar > 1.16)
95928ef3986f Make dive mode detection more advanced
Jan Mulder <jlmulder@xs4all.nl>
parents: 302
diff changeset
806 return false;
95928ef3986f Make dive mode detection more advanced
Jan Mulder <jlmulder@xs4all.nl>
parents: 302
diff changeset
807 else if(lifeData->pressure_ambient_bar < (lifeData->pressure_surface_bar + 0.1f))
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
808 return true;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
809 else
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
810 return false;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
811 }
539
d784f281833a Added inertia simulation for compass heading:
Ideenmodellierer
parents: 310
diff changeset
812
d784f281833a Added inertia simulation for compass heading:
Ideenmodellierer
parents: 310
diff changeset
813 void compass_Inertia(float newHeading)
d784f281833a Added inertia simulation for compass heading:
Ideenmodellierer
parents: 310
diff changeset
814 {
d784f281833a Added inertia simulation for compass heading:
Ideenmodellierer
parents: 310
diff changeset
815 float newTarget = newHeading;
d784f281833a Added inertia simulation for compass heading:
Ideenmodellierer
parents: 310
diff changeset
816
d784f281833a Added inertia simulation for compass heading:
Ideenmodellierer
parents: 310
diff changeset
817 if(settingsGetPointer()->compassInertia == 0)
d784f281833a Added inertia simulation for compass heading:
Ideenmodellierer
parents: 310
diff changeset
818 {
d784f281833a Added inertia simulation for compass heading:
Ideenmodellierer
parents: 310
diff changeset
819 compass_compensated = newHeading;
d784f281833a Added inertia simulation for compass heading:
Ideenmodellierer
parents: 310
diff changeset
820 }
d784f281833a Added inertia simulation for compass heading:
Ideenmodellierer
parents: 310
diff changeset
821 else
d784f281833a Added inertia simulation for compass heading:
Ideenmodellierer
parents: 310
diff changeset
822 {
d784f281833a Added inertia simulation for compass heading:
Ideenmodellierer
parents: 310
diff changeset
823 if((compass_compensated > 270.0) && (newHeading < 90.0)) /* transition passing 0 clockwise */
d784f281833a Added inertia simulation for compass heading:
Ideenmodellierer
parents: 310
diff changeset
824 {
d784f281833a Added inertia simulation for compass heading:
Ideenmodellierer
parents: 310
diff changeset
825 newTarget = newHeading + 360.0;
d784f281833a Added inertia simulation for compass heading:
Ideenmodellierer
parents: 310
diff changeset
826 }
d784f281833a Added inertia simulation for compass heading:
Ideenmodellierer
parents: 310
diff changeset
827
d784f281833a Added inertia simulation for compass heading:
Ideenmodellierer
parents: 310
diff changeset
828 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
829 {
d784f281833a Added inertia simulation for compass heading:
Ideenmodellierer
parents: 310
diff changeset
830 newTarget = newHeading - 360.0;
d784f281833a Added inertia simulation for compass heading:
Ideenmodellierer
parents: 310
diff changeset
831 }
d784f281833a Added inertia simulation for compass heading:
Ideenmodellierer
parents: 310
diff changeset
832
d784f281833a Added inertia simulation for compass heading:
Ideenmodellierer
parents: 310
diff changeset
833 compass_compensated = compass_compensated + ((newTarget - compass_compensated) / (COMPASS_FRACTION * (settingsGetPointer()->compassInertia)));
d784f281833a Added inertia simulation for compass heading:
Ideenmodellierer
parents: 310
diff changeset
834 if(compass_compensated < 0.0)
d784f281833a Added inertia simulation for compass heading:
Ideenmodellierer
parents: 310
diff changeset
835 {
d784f281833a Added inertia simulation for compass heading:
Ideenmodellierer
parents: 310
diff changeset
836 compass_compensated += 360.0;
d784f281833a Added inertia simulation for compass heading:
Ideenmodellierer
parents: 310
diff changeset
837 }
d784f281833a Added inertia simulation for compass heading:
Ideenmodellierer
parents: 310
diff changeset
838 if(compass_compensated >= 360.0)
d784f281833a Added inertia simulation for compass heading:
Ideenmodellierer
parents: 310
diff changeset
839 {
d784f281833a Added inertia simulation for compass heading:
Ideenmodellierer
parents: 310
diff changeset
840 compass_compensated -= 360.0;
d784f281833a Added inertia simulation for compass heading:
Ideenmodellierer
parents: 310
diff changeset
841 }
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 }
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 float compass_getCompensated()
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 return compass_compensated;
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
662
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 539
diff changeset
850 uint8_t isLoopMode(uint8_t Mode)
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 539
diff changeset
851 {
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 539
diff changeset
852 uint8_t retVal = 0;
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 539
diff changeset
853 if((Mode == DIVEMODE_CCR) || (Mode == DIVEMODE_PSCR))
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 539
diff changeset
854 {
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 539
diff changeset
855 retVal = 1;
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 539
diff changeset
856 }
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 539
diff changeset
857 return retVal;
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 539
diff changeset
858 }