annotate Discovery/Src/data_central.c @ 664:667093daa937 Betatest

Stability improvment bluetooth startup: The previous implementation expected a default setup of the Bluetooth module. Deviations from the default expectation caused the init function to stop. The new implementation is able to fix wrong baud rate setting (reset baudrate to default 115200). In addition the function evaluating the answers of the module is not able to derive the status out of a data stream.
author Ideenmodellierer
date Tue, 21 Dec 2021 19:36:41 +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 }