Mercurial > public > ostc4
annotate Discovery/Src/logbook.c @ 752:4f19336a3f21
Dev Bugfix: Alignment problem in lifedata structure:
Since the introduction of the 64 bit DigO2 sensor ID the potential risk of a misalignment is present in the lifedata structure. E.g. If a new 8bit variable is added in front of the data structure containing the 64bit value. To avoid this in future the sensor data structure which may contain the 64bit value has been moved to the top of the structure (first element)
author | Ideenmodellierer |
---|---|
date | Tue, 07 Mar 2023 19:51:30 +0100 |
parents | b456be1e152d |
children |
rev | line source |
---|---|
38 | 1 /** |
2 ****************************************************************************** | |
3 * @copyright heinrichs weikamp | |
4 * @file logbook.c | |
5 * @author heinrichs weikamp gmbh and heinrichs weikamp gmbh | |
6 * @date 22-Apr-2014 | |
7 * @version V0.0.3 | |
8 * @since 03-Feb-2016 | |
9 * @brief Everything about creating and evaluating the logbook | |
10 * without the flash part which is included in externLogbookFlash.c | |
11 * and the USB/Bluetooth part in tComm.c | |
12 * CHANGE V0.0.3 hw: ppO2 sensor values | |
13 * CHANGE V0.0.4 hw: fix event bytes according to hwos_interface.odt dated 160610 in bitbucket hwOS | |
14 * @bug | |
15 * @warning | |
16 @verbatim | |
17 ============================================================================== | |
18 ##### Header ##### | |
19 ============================================================================== | |
20 [..] SLogbookHeader | |
21 The order has changed in comparsion to OSTC3 for perfect alignment | |
22 with 16bit and 32bit. The header is 256kB as well. | |
23 DO NOT rearrange anything but add new data to a second page | |
24 beyond diveHeaderEnd. Use extraPagesWithData to indicate that there is | |
25 data available that was not available in the OSTC3 256KB | |
26 This data will be behind the diveHeaderEnd. DO NOT delete diveHeaderEnd. | |
27 | |
28 [..] SLogbookHeaderOSTC3 | |
29 is the format used by the OSTC3. | |
30 logbook_getHeaderOSTC3() does the job using the global headers in logbook.c | |
31 | |
32 [..] SSmallHeader | |
33 - is the format used by the OSTC3 | |
34 | |
35 [..] Summary | |
36 The header format is not perfect and might be optimized prior to | |
37 releasing the diving computer. For now it is good to be compatible | |
38 with PC software available for checking the content of the logbook | |
39 | |
40 | |
41 @endverbatim | |
42 ****************************************************************************** | |
43 * @attention | |
44 * | |
45 * <h2><center>© COPYRIGHT(c) 2014 heinrichs weikamp</center></h2> | |
46 * | |
47 ****************************************************************************** | |
48 */ | |
49 | |
50 /* Includes ------------------------------------------------------------------*/ | |
51 #include <stdint.h> | |
52 #include <string.h> | |
53 #include "logbook.h" | |
54 //#include "test_vpm.h" | |
55 #include "externLogbookFlash.h" | |
56 #include "data_exchange.h" | |
57 #include "decom.h" | |
58 #include "tHome.h" // for tHome_findNextStop() | |
445 | 59 #include "settings.h" |
455
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
60 #include "configuration.h" |
38 | 61 |
62 /* Private types -------------------------------------------------------------*/ | |
63 | |
64 #define LOGBOOK_VERSION (0x30) | |
65 #define LOGBOOK_VERSION_OSTC3 (0x24) | |
66 | |
411
e908b894f107
Bugfix: Limit log length in case of corrupted sample storage:
ideenmodellierer
parents:
325
diff
changeset
|
67 #define DEFAULT_SAMPLES (100) /* Number of sample data bytes in case of an broken header information */ |
455
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
68 #define DUMMY_SAMPLES (1000) /* Maximum number of samples profided by a dummy dive profile */ |
411
e908b894f107
Bugfix: Limit log length in case of corrupted sample storage:
ideenmodellierer
parents:
325
diff
changeset
|
69 |
38 | 70 typedef struct /* don't forget to adjust void clear_divisor(void) */ |
71 { | |
72 uint8_t temperature; | |
73 uint8_t deco_ndl; | |
74 uint8_t gradientFactor; | |
75 uint8_t ppo2; | |
76 uint8_t decoplan; | |
77 uint8_t cns; | |
78 uint8_t tank; | |
79 } SDivisor; | |
80 | |
81 /* Exported variables --------------------------------------------------------*/ | |
82 | |
83 /* Private variables ---------------------------------------------------------*/ | |
411
e908b894f107
Bugfix: Limit log length in case of corrupted sample storage:
ideenmodellierer
parents:
325
diff
changeset
|
84 static SLogbookHeader gheader; |
194
f23b9055436f
cleanup: more trivial cleanup (logbook.c/h)
Jan Mulder <jlmulder@xs4all.nl>
parents:
149
diff
changeset
|
85 static SLogbookHeaderOSTC3 headerOSTC3; |
f23b9055436f
cleanup: more trivial cleanup (logbook.c/h)
Jan Mulder <jlmulder@xs4all.nl>
parents:
149
diff
changeset
|
86 static SLogbookHeaderOSTC3compact headerOSTC3compact; |
f23b9055436f
cleanup: more trivial cleanup (logbook.c/h)
Jan Mulder <jlmulder@xs4all.nl>
parents:
149
diff
changeset
|
87 static SSmallHeader smallHeader; |
f23b9055436f
cleanup: more trivial cleanup (logbook.c/h)
Jan Mulder <jlmulder@xs4all.nl>
parents:
149
diff
changeset
|
88 static SDivisor divisor; |
f23b9055436f
cleanup: more trivial cleanup (logbook.c/h)
Jan Mulder <jlmulder@xs4all.nl>
parents:
149
diff
changeset
|
89 static SDivisor divisorBackup; |
38 | 90 |
455
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
91 static SSmallHeader smallDummyHeader; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
92 static uint16_t dummyWriteIdx; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
93 static uint16_t dummyReadIdx; |
465
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
94 static uint8_t dummyMemoryBuffer[5000]; |
455
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
95 |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
96 |
38 | 97 /* Private function prototypes -----------------------------------------------*/ |
194
f23b9055436f
cleanup: more trivial cleanup (logbook.c/h)
Jan Mulder <jlmulder@xs4all.nl>
parents:
149
diff
changeset
|
98 static void clear_divisor(void); |
f23b9055436f
cleanup: more trivial cleanup (logbook.c/h)
Jan Mulder <jlmulder@xs4all.nl>
parents:
149
diff
changeset
|
99 static void logbook_SetAverageDepth(float average_depth_meter); |
f23b9055436f
cleanup: more trivial cleanup (logbook.c/h)
Jan Mulder <jlmulder@xs4all.nl>
parents:
149
diff
changeset
|
100 static void logbook_SetMinTemperature(float min_temperature_celsius); |
f23b9055436f
cleanup: more trivial cleanup (logbook.c/h)
Jan Mulder <jlmulder@xs4all.nl>
parents:
149
diff
changeset
|
101 static void logbook_SetMaxCNS(float max_cns_percentage); |
270
2e58a4094770
feature, debug: make simulator write a logbook entry
Jan Mulder <jlmulder@xs4all.nl>
parents:
269
diff
changeset
|
102 static void logbook_SetCompartmentDesaturation(const SDiveState * pStateReal); |
194
f23b9055436f
cleanup: more trivial cleanup (logbook.c/h)
Jan Mulder <jlmulder@xs4all.nl>
parents:
149
diff
changeset
|
103 static void logbook_SetLastStop(float last_stop_depth_bar); |
f23b9055436f
cleanup: more trivial cleanup (logbook.c/h)
Jan Mulder <jlmulder@xs4all.nl>
parents:
149
diff
changeset
|
104 static void logbook_writedata(void * data, int length_byte); |
270
2e58a4094770
feature, debug: make simulator write a logbook entry
Jan Mulder <jlmulder@xs4all.nl>
parents:
269
diff
changeset
|
105 static void logbook_UpdateHeader(const SDiveState * pStateReal); |
458 | 106 static void logbook_createDummyProfile(SLogbookHeader* pHeader, uint16_t length, uint16_t* depth, int16_t* temperature, uint16_t* ppo2); |
38 | 107 |
108 /* Exported functions --------------------------------------------------------*/ | |
109 | |
110 void logbook_EndDive(void) | |
111 { | |
411
e908b894f107
Bugfix: Limit log length in case of corrupted sample storage:
ideenmodellierer
parents:
325
diff
changeset
|
112 ext_flash_close_new_dive_log((uint8_t*) &gheader); |
38 | 113 } |
114 | |
115 | |
116 // =============================================================================== | |
117 // logbook_last_totalDiveCount | |
118 /// @brief Fix setting issues | |
119 /// @date 04-April-2016 | |
120 /// | |
121 /// @return diveNumber (totalDiveCounter) of latest log entry, 0 if not a valid header | |
122 // =============================================================================== | |
123 uint16_t logbook_lastDive_diveNumber(void) | |
124 { | |
125 SLogbookHeader tempLogbookHeader; | |
126 if(logbook_getHeader(0, &tempLogbookHeader)) | |
127 { | |
128 return tempLogbookHeader.diveNumber; | |
129 } | |
130 else | |
131 { | |
132 return 0; | |
133 } | |
134 } | |
135 | |
136 | |
137 /** | |
138 ****************************************************************************** | |
139 * @brief logbook_getCurrentHeader. / | |
281 | 140 * @author heinrichs weikamp |
38 | 141 * @version V0.0.1 |
142 * @date 22-April-2014 | |
143 ****************************************************************************** | |
144 * | |
145 * @return SLogbookHeader*: | |
146 */ | |
147 SLogbookHeader* logbook_getCurrentHeader(void) | |
148 { | |
411
e908b894f107
Bugfix: Limit log length in case of corrupted sample storage:
ideenmodellierer
parents:
325
diff
changeset
|
149 return &gheader; |
38 | 150 } |
151 | |
152 /** | |
153 ****************************************************************************** | |
154 * @brief logbook_getNumberOfHeaders. / | |
155 * @author heinrichs weikamp gmbh | |
156 * @version V0.0.1 | |
157 * @date 18-May-2016 | |
158 ****************************************************************************** | |
159 * | |
160 * @return uint8_t : number of valid headers (0xFAFA) found. | |
161 */ | |
162 uint8_t logbook_getNumberOfHeaders(void) | |
163 { | |
164 return ext_flash_count_dive_headers(); | |
165 } | |
166 | |
167 | |
168 /** | |
169 ****************************************************************************** | |
170 * @brief logbook_getHeader. / | |
281 | 171 * @author heinrichs weikamp |
38 | 172 * @version V0.0.1 |
173 * @date 22-April-2014 | |
174 ****************************************************************************** | |
175 * | |
176 * @param StepBackwards : 0 Last lokbook entry, 1 second to last entry, etc. | |
177 * @param SSLogbookHeader* pLogbookHeader: Output found LogbookHeader | |
178 * @return uint8_t : 1 = success | |
179 */ | |
180 uint8_t logbook_getHeader(uint8_t StepBackwards,SLogbookHeader* pLogbookHeader) | |
181 { | |
182 ext_flash_read_dive_header((uint8_t *)pLogbookHeader, StepBackwards); | |
183 if(pLogbookHeader->diveHeaderStart != 0xFAFA) | |
184 return 0; | |
185 else | |
186 return 1; | |
187 } | |
188 | |
189 /** | |
190 ****************************************************************************** | |
191 * @brief logbook_initNewdiveProfile. / | |
192 * creates header and smallHeader from diveState and global Settings | |
193 * and writes new lookboock entry on flash device | |
194 * diveState | |
281 | 195 * @author heinrichs weikamp |
38 | 196 * @version V0.0.1 |
197 * @date 22-April-2014 | |
198 ****************************************************************************** | |
199 * | |
200 * @param SDiveState* pInfo: Input | |
201 * @param SSettings* pSettings: Input | |
202 */ | |
203 | |
204 void logbook_initNewdiveProfile(const SDiveState* pInfo, SSettings* pSettings) | |
205 { | |
206 RTC_DateTypeDef Sdate; | |
207 RTC_TimeTypeDef Stime; | |
208 | |
209 for(int i = 0; i < sizeof(SLogbookHeader); i++) | |
210 { | |
411
e908b894f107
Bugfix: Limit log length in case of corrupted sample storage:
ideenmodellierer
parents:
325
diff
changeset
|
211 ((uint8_t*)(&gheader))[i] = 0; |
38 | 212 } |
411
e908b894f107
Bugfix: Limit log length in case of corrupted sample storage:
ideenmodellierer
parents:
325
diff
changeset
|
213 gheader.diveHeaderStart = 0xFAFA; |
e908b894f107
Bugfix: Limit log length in case of corrupted sample storage:
ideenmodellierer
parents:
325
diff
changeset
|
214 gheader.diveHeaderEnd = 0xFBFB; |
e908b894f107
Bugfix: Limit log length in case of corrupted sample storage:
ideenmodellierer
parents:
325
diff
changeset
|
215 gheader.samplingRate = 2; |
38 | 216 if(pInfo->diveSettings.diveMode == DIVEMODE_OC) |
217 { | |
218 for(int i = 0; i < 5; i++) | |
219 { | |
411
e908b894f107
Bugfix: Limit log length in case of corrupted sample storage:
ideenmodellierer
parents:
325
diff
changeset
|
220 gheader.gasordil[i].oxygen_percentage = pSettings->gas[i+1].oxygen_percentage; |
e908b894f107
Bugfix: Limit log length in case of corrupted sample storage:
ideenmodellierer
parents:
325
diff
changeset
|
221 gheader.gasordil[i].helium_percentage = pSettings->gas[i+1].helium_percentage; |
e908b894f107
Bugfix: Limit log length in case of corrupted sample storage:
ideenmodellierer
parents:
325
diff
changeset
|
222 gheader.gasordil[i].note.uw = pSettings->gas[i+1].note.uw; |
e908b894f107
Bugfix: Limit log length in case of corrupted sample storage:
ideenmodellierer
parents:
325
diff
changeset
|
223 gheader.gasordil[i].depth_meter = pSettings->gas[i+1].depth_meter; |
38 | 224 } |
225 } | |
226 else | |
227 { | |
228 for(int i = 0; i < 5; i++) | |
229 { | |
411
e908b894f107
Bugfix: Limit log length in case of corrupted sample storage:
ideenmodellierer
parents:
325
diff
changeset
|
230 gheader.gasordil[i].oxygen_percentage = pSettings->gas[i+6].oxygen_percentage; |
e908b894f107
Bugfix: Limit log length in case of corrupted sample storage:
ideenmodellierer
parents:
325
diff
changeset
|
231 gheader.gasordil[i].helium_percentage = pSettings->gas[i+6].helium_percentage; |
e908b894f107
Bugfix: Limit log length in case of corrupted sample storage:
ideenmodellierer
parents:
325
diff
changeset
|
232 gheader.gasordil[i].note.uw = pSettings->gas[i+6].note.uw; |
e908b894f107
Bugfix: Limit log length in case of corrupted sample storage:
ideenmodellierer
parents:
325
diff
changeset
|
233 gheader.gasordil[i].depth_meter = pSettings->gas[i+6].depth_meter; |
38 | 234 } |
235 | |
236 for(int i = 0; i < 5; i++) | |
237 { | |
411
e908b894f107
Bugfix: Limit log length in case of corrupted sample storage:
ideenmodellierer
parents:
325
diff
changeset
|
238 gheader.setpoint[i].setpoint_cbar = pSettings->setpoint[i+1].setpoint_cbar; |
e908b894f107
Bugfix: Limit log length in case of corrupted sample storage:
ideenmodellierer
parents:
325
diff
changeset
|
239 gheader.setpoint[i].depth_meter = pSettings->setpoint[i+1].depth_meter; |
38 | 240 } |
241 } | |
242 // header.gasordil[pInfo->lifeData.actualGas.GasIdInSettings].depth_meter = 0; | |
243 | |
244 translateDate(pInfo->lifeData.dateBinaryFormat, &Sdate); | |
245 translateTime(pInfo->lifeData.timeBinaryFormat, &Stime); | |
411
e908b894f107
Bugfix: Limit log length in case of corrupted sample storage:
ideenmodellierer
parents:
325
diff
changeset
|
246 gheader.dateYear = Sdate.Year; |
e908b894f107
Bugfix: Limit log length in case of corrupted sample storage:
ideenmodellierer
parents:
325
diff
changeset
|
247 gheader.dateMonth = Sdate.Month; |
e908b894f107
Bugfix: Limit log length in case of corrupted sample storage:
ideenmodellierer
parents:
325
diff
changeset
|
248 gheader.dateDay = Sdate.Date; |
e908b894f107
Bugfix: Limit log length in case of corrupted sample storage:
ideenmodellierer
parents:
325
diff
changeset
|
249 gheader.timeHour = Stime.Hours; |
e908b894f107
Bugfix: Limit log length in case of corrupted sample storage:
ideenmodellierer
parents:
325
diff
changeset
|
250 gheader.timeMinute = Stime.Minutes; |
e908b894f107
Bugfix: Limit log length in case of corrupted sample storage:
ideenmodellierer
parents:
325
diff
changeset
|
251 gheader.cnsAtBeginning = (uint16_t)pInfo->lifeData.cns; |
e908b894f107
Bugfix: Limit log length in case of corrupted sample storage:
ideenmodellierer
parents:
325
diff
changeset
|
252 gheader.surfacePressure_mbar = (uint16_t)(pInfo->lifeData.pressure_surface_bar * 1000); |
e908b894f107
Bugfix: Limit log length in case of corrupted sample storage:
ideenmodellierer
parents:
325
diff
changeset
|
253 gheader.firmwareVersionHigh = firmwareVersion_16bit_high(); |
e908b894f107
Bugfix: Limit log length in case of corrupted sample storage:
ideenmodellierer
parents:
325
diff
changeset
|
254 gheader.firmwareVersionLow = firmwareVersion_16bit_low(); |
e908b894f107
Bugfix: Limit log length in case of corrupted sample storage:
ideenmodellierer
parents:
325
diff
changeset
|
255 gheader.logbookProfileVersion = LOGBOOK_VERSION; |
e908b894f107
Bugfix: Limit log length in case of corrupted sample storage:
ideenmodellierer
parents:
325
diff
changeset
|
256 gheader.salinity = pSettings->salinity; |
e908b894f107
Bugfix: Limit log length in case of corrupted sample storage:
ideenmodellierer
parents:
325
diff
changeset
|
257 gheader.diveNumber = pSettings->totalDiveCounter; |
e908b894f107
Bugfix: Limit log length in case of corrupted sample storage:
ideenmodellierer
parents:
325
diff
changeset
|
258 gheader.personalDiveCount = pSettings->personalDiveCount; |
38 | 259 |
411
e908b894f107
Bugfix: Limit log length in case of corrupted sample storage:
ideenmodellierer
parents:
325
diff
changeset
|
260 gheader.diveMode = pInfo->diveSettings.diveMode; |
e908b894f107
Bugfix: Limit log length in case of corrupted sample storage:
ideenmodellierer
parents:
325
diff
changeset
|
261 gheader.CCRmode = pInfo->diveSettings.CCR_Mode; |
e908b894f107
Bugfix: Limit log length in case of corrupted sample storage:
ideenmodellierer
parents:
325
diff
changeset
|
262 gheader.lastDecostop_m = pSettings->last_stop_depth_meter; |
38 | 263 |
264 if(pInfo->diveSettings.deco_type.ub.standard == GF_MODE) | |
265 { | |
411
e908b894f107
Bugfix: Limit log length in case of corrupted sample storage:
ideenmodellierer
parents:
325
diff
changeset
|
266 gheader.decoModel = 1; |
e908b894f107
Bugfix: Limit log length in case of corrupted sample storage:
ideenmodellierer
parents:
325
diff
changeset
|
267 gheader.gfLow_or_Vpm_conservatism = pInfo->diveSettings.gf_low; |
e908b894f107
Bugfix: Limit log length in case of corrupted sample storage:
ideenmodellierer
parents:
325
diff
changeset
|
268 gheader.gfHigh = pInfo->diveSettings.gf_high; |
38 | 269 } |
270 else | |
271 { | |
411
e908b894f107
Bugfix: Limit log length in case of corrupted sample storage:
ideenmodellierer
parents:
325
diff
changeset
|
272 gheader.decoModel = 2; |
e908b894f107
Bugfix: Limit log length in case of corrupted sample storage:
ideenmodellierer
parents:
325
diff
changeset
|
273 gheader.gfLow_or_Vpm_conservatism = pInfo->diveSettings.vpm_conservatism; |
e908b894f107
Bugfix: Limit log length in case of corrupted sample storage:
ideenmodellierer
parents:
325
diff
changeset
|
274 gheader.gfHigh = 0; |
38 | 275 } |
276 | |
411
e908b894f107
Bugfix: Limit log length in case of corrupted sample storage:
ideenmodellierer
parents:
325
diff
changeset
|
277 memcpy(gheader.n2Compartments, pInfo->lifeData.tissue_nitrogen_bar, 64); |
e908b894f107
Bugfix: Limit log length in case of corrupted sample storage:
ideenmodellierer
parents:
325
diff
changeset
|
278 memcpy(gheader.heCompartments, pInfo->lifeData.tissue_helium_bar, 64); |
38 | 279 |
270
2e58a4094770
feature, debug: make simulator write a logbook entry
Jan Mulder <jlmulder@xs4all.nl>
parents:
269
diff
changeset
|
280 logbook_SetCompartmentDesaturation(pInfo); |
38 | 281 |
411
e908b894f107
Bugfix: Limit log length in case of corrupted sample storage:
ideenmodellierer
parents:
325
diff
changeset
|
282 ext_flash_start_new_dive_log_and_set_actualPointerSample((uint8_t*)&gheader); |
38 | 283 |
284 smallHeader.profileLength[0] = 0xFF; | |
285 smallHeader.profileLength[1] = 0xFF; | |
286 smallHeader.profileLength[2] = 0xFF; | |
287 smallHeader.samplingRate_seconds = 2; | |
288 smallHeader.numDivisors = 7; | |
289 | |
290 smallHeader.tempType = 0; | |
291 smallHeader.tempLength = 2; | |
292 smallHeader.tempDivisor = 6; | |
293 | |
294 smallHeader.deco_ndlType = 1; | |
295 smallHeader.deco_ndlLength = 2; | |
296 smallHeader.deco_ndlDivisor = 6; //= 6; | |
297 | |
298 /* GF in % at actual position */ | |
299 smallHeader.gfType = 2; | |
300 smallHeader.gfLength = 1; | |
301 smallHeader.gfDivisor = 0; //12; | |
302 | |
303 /* 3 Sensors: 8bit ppO2 in 0.01bar, 16bit voltage in 0,1mV */ | |
304 smallHeader.ppo2Type = 3; | |
305 smallHeader.ppo2Length = 9; | |
306 smallHeader.ppo2Divisor = 2; //2 | |
307 | |
308 /* last 15 stops in minutes (last, second_to_last, ... */ | |
309 /* last stop depth is defined in header */ | |
310 smallHeader.decoplanType = 4; | |
311 smallHeader.decoplanLength = 15; | |
312 smallHeader.decoplanDivisor = 12;//12; | |
313 | |
314 smallHeader.cnsType = 5; | |
315 smallHeader.cnsLength = 2; | |
316 smallHeader.cnsDivisor = 12; | |
317 | |
318 smallHeader.tankType = 6; | |
455
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
319 #ifdef ENABLE_BOTTLE_SENSOR |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
320 smallHeader.tankLength = 2; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
321 smallHeader.tankDivisor = 30; /* log tank data once a minute */ |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
322 #else |
38 | 323 smallHeader.tankLength = 0; |
324 smallHeader.tankDivisor = 0; | |
455
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
325 #endif |
38 | 326 logbook_writedata((void *) &smallHeader,sizeof(smallHeader)); |
327 | |
328 clear_divisor(); | |
329 } | |
330 | |
331 /** | |
332 ****************************************************************************** | |
333 * @brief clear_divisor / clears divisor struct | |
281 | 334 * @author heinrichs weikamp |
38 | 335 * @version V0.0.1 |
336 * @date 22-April-2014 | |
337 ****************************************************************************** | |
338 * | |
339 */ | |
194
f23b9055436f
cleanup: more trivial cleanup (logbook.c/h)
Jan Mulder <jlmulder@xs4all.nl>
parents:
149
diff
changeset
|
340 static void clear_divisor(void) |
38 | 341 { |
342 divisor.cns = smallHeader.cnsDivisor - 1; | |
343 divisor.decoplan = smallHeader.decoplanDivisor - 1; | |
344 divisor.deco_ndl = smallHeader.deco_ndlDivisor - 1; | |
345 divisor.gradientFactor = smallHeader.gfDivisor -1 ; | |
346 divisor.ppo2 = smallHeader.ppo2Divisor - 1; | |
347 divisor.tank = smallHeader.tankDivisor - 1; | |
348 divisor.temperature = smallHeader.tempDivisor - 1; | |
349 } | |
350 | |
351 | |
352 /** | |
353 ****************************************************************************** | |
354 * @brief add16. / adds 16 bit variable to 8 bit array | |
281 | 355 * @author heinrichs weikamp |
38 | 356 * @version V0.0.1 |
357 * @date 22-April-2014 | |
358 ****************************************************************************** | |
359 * | |
360 * @param uint8_t *pos: Output 8 bit array | |
361 * @param uint16_t var: 16 bit variable | |
362 */ | |
194
f23b9055436f
cleanup: more trivial cleanup (logbook.c/h)
Jan Mulder <jlmulder@xs4all.nl>
parents:
149
diff
changeset
|
363 static void addU16(uint8_t *pos, uint16_t var) |
38 | 364 { |
365 *((uint16_t*)pos) = var; | |
366 } | |
367 | |
194
f23b9055436f
cleanup: more trivial cleanup (logbook.c/h)
Jan Mulder <jlmulder@xs4all.nl>
parents:
149
diff
changeset
|
368 static void addS16(uint8_t *pos, int16_t var) |
38 | 369 { |
370 *((int16_t*)pos) = var; | |
371 } | |
372 | |
373 /** | |
374 ****************************************************************************** | |
375 * @brief logbook_writeSample. / Writes one logbook sampl | |
281 | 376 * @author heinrichs weikamp |
38 | 377 * @date 22-April-2014 |
378 * @version V0.0.2 | |
379 * @since 20-June-2016 | |
380 * @bug Deco/NDL Status fixed in V0.0.2 | |
381 | |
382 | |
383 ****************************************************************************** | |
384 * | |
385 * @param SDiveState state: | |
386 */ | |
387 | |
270
2e58a4094770
feature, debug: make simulator write a logbook entry
Jan Mulder <jlmulder@xs4all.nl>
parents:
269
diff
changeset
|
388 void logbook_writeSample(const SDiveState *state) |
38 | 389 { |
390 uint8_t sample[256]; | |
391 // int position = 0; | |
392 int length = 0; | |
393 // _Bool bEvent = 0; | |
394 uint8_t nextstopDepthMeter = 0; | |
395 uint16_t nextstopLengthSeconds = 0; | |
396 uint8_t nextstopLengthMinutes = 0; | |
397 bit8_Type eventByte1, eventByte2; | |
398 bit8_Type profileByteFlag; | |
399 int i = 0; | |
400 for(i = 0; i <256 ;i++) | |
401 sample[i] = 0; | |
269
6e78137952af
cleanup: do not pass large struct by value
Jan Mulder <jlmulder@xs4all.nl>
parents:
225
diff
changeset
|
402 addU16(sample, (uint16_t)(state->lifeData.depth_meter * 100)); |
38 | 403 length += 2; |
404 sample[2] = 0; | |
405 length++; | |
406 eventByte1.uw = 0; | |
407 eventByte2.uw = 0; | |
408 //uint16_t tmpU16 = 0; | |
130
b7689d9e888a
Minor changes to improved code quality and to eliminate warnings
Ideenmodellierer
parents:
38
diff
changeset
|
409 const SDecoinfo * pDecoinfo; // new hw 160620 |
38 | 410 |
411 //BuildEevntyte 1 | |
412 // sub old 0-3 only one at a time | |
269
6e78137952af
cleanup: do not pass large struct by value
Jan Mulder <jlmulder@xs4all.nl>
parents:
225
diff
changeset
|
413 if(state->events.manualMarker) |
38 | 414 { |
415 eventByte1.uw = 6; | |
416 } | |
417 else | |
269
6e78137952af
cleanup: do not pass large struct by value
Jan Mulder <jlmulder@xs4all.nl>
parents:
225
diff
changeset
|
418 if(state->warnings.decoMissed) |
38 | 419 { |
420 eventByte1.uw = 2; | |
421 } | |
422 else | |
269
6e78137952af
cleanup: do not pass large struct by value
Jan Mulder <jlmulder@xs4all.nl>
parents:
225
diff
changeset
|
423 if(state->warnings.ppO2Low) |
38 | 424 { |
425 eventByte1.uw = 4; | |
426 } | |
427 else | |
269
6e78137952af
cleanup: do not pass large struct by value
Jan Mulder <jlmulder@xs4all.nl>
parents:
225
diff
changeset
|
428 if(state->warnings.ppO2High) |
38 | 429 { |
430 eventByte1.uw = 5; | |
431 } | |
432 else | |
269
6e78137952af
cleanup: do not pass large struct by value
Jan Mulder <jlmulder@xs4all.nl>
parents:
225
diff
changeset
|
433 if(state->warnings.lowBattery) |
38 | 434 { |
435 eventByte1.uw = 7; | |
436 } | |
437 else | |
269
6e78137952af
cleanup: do not pass large struct by value
Jan Mulder <jlmulder@xs4all.nl>
parents:
225
diff
changeset
|
438 if(state->warnings.slowWarning) |
38 | 439 { |
440 eventByte1.uw = 1; | |
441 } | |
442 // sub bit 4 to 7 | |
281 | 443 if(state->events.manualGasSet) |
38 | 444 { |
445 eventByte1.ub.bit4 = 1; | |
446 } | |
269
6e78137952af
cleanup: do not pass large struct by value
Jan Mulder <jlmulder@xs4all.nl>
parents:
225
diff
changeset
|
447 if(state->events.gasChange) |
38 | 448 { |
449 eventByte1.ub.bit5 = 1; | |
450 } | |
269
6e78137952af
cleanup: do not pass large struct by value
Jan Mulder <jlmulder@xs4all.nl>
parents:
225
diff
changeset
|
451 if(state->events.setpointChange) |
38 | 452 { |
453 eventByte1.ub.bit6 = 1; | |
454 } | |
455 // sub bit 7 + eventbyte2 | |
269
6e78137952af
cleanup: do not pass large struct by value
Jan Mulder <jlmulder@xs4all.nl>
parents:
225
diff
changeset
|
456 if(state->events.bailout) |
38 | 457 { |
458 eventByte1.ub.bit7 = 1; | |
459 eventByte2.ub.bit0 = 1; | |
460 } | |
461 //Add EventByte 1 | |
462 if(eventByte1.uw > 0) | |
463 { | |
464 sample[length] = eventByte1.uw; | |
465 length++; | |
466 } | |
467 if(eventByte2.uw > 0) | |
468 { | |
469 sample[length] = eventByte2.uw; | |
470 length++; | |
471 } | |
472 //Add EventInfos | |
281 | 473 if(state->events.manualGasSet) |
38 | 474 { |
475 //manual gas in %O2 & %He | |
281 | 476 sample[length] = state->events.info_manualGasSetO2; |
38 | 477 length += 1; |
281 | 478 sample[length] = state->events.info_manualGasSetHe; |
38 | 479 length += 1; |
480 } | |
269
6e78137952af
cleanup: do not pass large struct by value
Jan Mulder <jlmulder@xs4all.nl>
parents:
225
diff
changeset
|
481 if(state->events.gasChange) |
38 | 482 { |
483 //Current gas (gasid) | |
269
6e78137952af
cleanup: do not pass large struct by value
Jan Mulder <jlmulder@xs4all.nl>
parents:
225
diff
changeset
|
484 sample[length] = state->events.info_GasChange; |
38 | 485 length += 1; |
486 } | |
269
6e78137952af
cleanup: do not pass large struct by value
Jan Mulder <jlmulder@xs4all.nl>
parents:
225
diff
changeset
|
487 if(state->events.setpointChange) |
38 | 488 { |
489 //New setpoint in cbar | |
269
6e78137952af
cleanup: do not pass large struct by value
Jan Mulder <jlmulder@xs4all.nl>
parents:
225
diff
changeset
|
490 sample[length] = state->events.info_SetpointChange; |
38 | 491 length += 1; |
492 } | |
269
6e78137952af
cleanup: do not pass large struct by value
Jan Mulder <jlmulder@xs4all.nl>
parents:
225
diff
changeset
|
493 if(state->events.bailout) |
38 | 494 { |
495 //bailout gas in % O2 & %He | |
269
6e78137952af
cleanup: do not pass large struct by value
Jan Mulder <jlmulder@xs4all.nl>
parents:
225
diff
changeset
|
496 sample[length] = state->events.info_bailoutO2; |
38 | 497 length += 1; |
269
6e78137952af
cleanup: do not pass large struct by value
Jan Mulder <jlmulder@xs4all.nl>
parents:
225
diff
changeset
|
498 sample[length] = state->events.info_bailoutHe; |
38 | 499 length += 1; |
500 } | |
501 | |
502 | |
503 if(divisor.temperature == 0) | |
504 { | |
505 divisor.temperature = smallHeader.tempDivisor - 1; | |
269
6e78137952af
cleanup: do not pass large struct by value
Jan Mulder <jlmulder@xs4all.nl>
parents:
225
diff
changeset
|
506 addS16(&sample[length], (int16_t)((state->lifeData.temperature_celsius * 10.0f) + 0.5f)); |
38 | 507 length += 2; |
508 } | |
509 else | |
510 { | |
511 divisor.temperature--; | |
512 } | |
513 | |
514 | |
515 if(smallHeader.deco_ndlDivisor > 0) | |
516 { | |
517 if(divisor.deco_ndl == 0) | |
518 { | |
519 divisor.deco_ndl = smallHeader.deco_ndlDivisor - 1; | |
520 | |
521 if(stateUsed->diveSettings.deco_type.ub.standard == GF_MODE) | |
522 pDecoinfo = &stateUsed->decolistBuehlmann; | |
523 else if(stateUsed->diveSettings.deco_type.ub.standard == VPM_MODE) | |
524 pDecoinfo = &stateUsed->decolistVPM; | |
525 else // should not happen as only GF and VPM at the moment | |
526 { | |
527 sample[length] = 0; | |
528 length += 1; | |
529 sample[length] = 0; | |
530 length += 1; | |
458 | 531 pDecoinfo = &stateUsed->decolistBuehlmann; /* use GF per default if something went wrong */ |
38 | 532 } |
533 | |
534 if(pDecoinfo->output_ndl_seconds > 0) | |
535 { | |
536 sample[length] = 0; | |
537 length += 1; | |
283
04cdeff80254
Bugfix: write NDL in logbook correctly
Jan Mulder <jlmulder@xs4all.nl>
parents:
281
diff
changeset
|
538 sample[length] = (uint8_t)(pDecoinfo->output_ndl_seconds / 60); |
281 | 539 |
540 // Limit stored sample within 0 to 240 mins (Since it's 8bit UINT only) | |
541 if ((pDecoinfo->output_ndl_seconds / 60) > 240) sample[length] = 240; | |
542 if ((pDecoinfo->output_ndl_seconds / 60) < 0) sample[length] = 0; | |
543 | |
38 | 544 length += 1; |
545 } | |
546 else if(pDecoinfo->output_time_to_surface_seconds) | |
547 { | |
548 tHome_findNextStop(pDecoinfo->output_stop_length_seconds, &nextstopDepthMeter, &nextstopLengthSeconds); | |
549 nextstopLengthMinutes = (nextstopLengthSeconds +59 ) / 60; | |
550 | |
551 sample[length] = nextstopDepthMeter; | |
552 length += 1; | |
553 sample[length] = nextstopLengthMinutes; | |
554 length += 1; | |
555 } | |
556 else | |
557 { | |
558 sample[length] = 0; | |
559 length += 1; | |
560 sample[length] = 0; | |
561 length += 1; | |
562 } | |
563 } | |
564 else | |
565 { | |
566 divisor.deco_ndl --; | |
567 } | |
568 } | |
569 | |
570 | |
571 if(smallHeader.ppo2Divisor) | |
572 { | |
573 if(divisor.ppo2 == 0) | |
574 { | |
575 divisor.ppo2 = smallHeader.ppo2Divisor - 1; | |
576 | |
577 for(int i = 0; i <3; i++) | |
578 { | |
269
6e78137952af
cleanup: do not pass large struct by value
Jan Mulder <jlmulder@xs4all.nl>
parents:
225
diff
changeset
|
579 sample[length] = (uint8_t)(state->lifeData.ppO2Sensor_bar[i] * 100.0f + 0.5f); |
38 | 580 length += 1; |
269
6e78137952af
cleanup: do not pass large struct by value
Jan Mulder <jlmulder@xs4all.nl>
parents:
225
diff
changeset
|
581 addU16(&sample[length], (uint16_t)(state->lifeData.sensorVoltage_mV[i] * 10.0f + 0.5f)); |
38 | 582 length += 2; |
583 } | |
584 } | |
585 else | |
586 { | |
587 divisor.ppo2--; | |
588 } | |
589 } | |
590 | |
591 | |
592 if(smallHeader.decoplanDivisor) | |
593 { | |
594 if(divisor.decoplan == 0) | |
595 { | |
596 divisor.decoplan = smallHeader.decoplanDivisor - 1; | |
269
6e78137952af
cleanup: do not pass large struct by value
Jan Mulder <jlmulder@xs4all.nl>
parents:
225
diff
changeset
|
597 if(state->diveSettings.deco_type.ub.standard == VPM_MODE) |
38 | 598 { |
599 for(int i = 0; i <15; i++) | |
600 { | |
269
6e78137952af
cleanup: do not pass large struct by value
Jan Mulder <jlmulder@xs4all.nl>
parents:
225
diff
changeset
|
601 sample[length] = state->decolistVPM.output_stop_length_seconds[i] / 60; |
38 | 602 length += 1; |
603 } | |
604 } | |
269
6e78137952af
cleanup: do not pass large struct by value
Jan Mulder <jlmulder@xs4all.nl>
parents:
225
diff
changeset
|
605 else if(state->diveSettings.deco_type.ub.standard == GF_MODE) |
38 | 606 { |
607 for(int i = 0; i <15; i++) | |
608 { | |
269
6e78137952af
cleanup: do not pass large struct by value
Jan Mulder <jlmulder@xs4all.nl>
parents:
225
diff
changeset
|
609 sample[length] = state->decolistBuehlmann.output_stop_length_seconds[i] / 60; |
38 | 610 length += 1; |
611 } | |
612 } | |
613 else | |
614 { | |
615 for(int i = 0; i <15; i++) | |
616 { | |
617 sample[length] = 0; | |
618 length += 1; | |
619 } | |
620 } | |
621 // add16(&sample[length], state.temperature); | |
622 //length += 2; | |
623 } | |
624 else | |
625 { | |
626 divisor.decoplan --; | |
627 } | |
628 } | |
629 if(divisor.cns == 0) | |
630 { | |
631 divisor.cns = smallHeader.cnsDivisor - 1; | |
269
6e78137952af
cleanup: do not pass large struct by value
Jan Mulder <jlmulder@xs4all.nl>
parents:
225
diff
changeset
|
632 addU16(&sample[length], (uint16_t)state->lifeData.cns); |
38 | 633 length += 2; |
634 } | |
635 else | |
636 { | |
637 divisor.cns--; | |
638 } | |
639 | |
455
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
640 #ifdef ENABLE_BOTTLE_SENSOR |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
641 if(smallHeader.tankDivisor) |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
642 { |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
643 if(divisor.tank == 0) |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
644 { |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
645 divisor.tank = smallHeader.tankDivisor - 1; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
646 addS16(&sample[length], ((state->lifeData.bottle_bar[state->lifeData.actualGas.GasIdInSettings]))); |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
647 length += smallHeader.tankLength; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
648 } |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
649 else |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
650 { |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
651 divisor.tank--; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
652 } |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
653 } |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
654 #endif |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
655 |
38 | 656 profileByteFlag.uw = length - 3; |
657 if(eventByte1.uw) | |
658 { | |
659 profileByteFlag.ub.bit7 = 1; | |
660 } | |
661 sample[2] = profileByteFlag.uw; | |
662 logbook_writedata((void *) sample,length); | |
663 | |
664 } | |
665 | |
666 /** | |
667 ****************************************************************************** | |
668 * @brief readSample. / Reads data of one logbook sample | |
281 | 669 * @author heinrichs weikamp |
38 | 670 * @version V0.0.1 |
671 * @date 22-April-2014 | |
672 ****************************************************************************** | |
673 * | |
674 * @param int32_t* depth: output Value | |
675 * @param int16_t * gasid: output Value | |
676 * @param int32_t* temperature: output Value | |
677 * @param int32_t* sensor1, sensor2, sensor3: output Value | |
678 * @param int32_t* cns: output Value | |
679 * @return bytes read / 0 = reading Error | |
680 */ | |
455
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
681 static uint16_t readSample(int32_t* depth, int16_t * gasid, int16_t* setpoint_cbar, int32_t* temperature, int32_t* sensor1, int32_t* sensor2, |
610 | 682 int32_t* sensor3, int32_t* cns, SManualGas* manualGas, int16_t* bailout, int16_t* decostopDepth, uint16_t* tank, uint8_t* event) |
38 | 683 { |
684 int length = 0; | |
685 _Bool bEvent = 0; | |
686 bit8_Type eventByte1, eventByte2; | |
687 bit8_Type profileByteFlag; | |
688 | |
689 eventByte1.uw = 0; | |
690 eventByte2.uw = 0; | |
691 uint8_t tempU8 = 0; | |
692 uint16_t temp = 0; | |
693 uint16_t bytesRead = 0; | |
694 | |
695 if(gasid) | |
696 *gasid = -1; | |
697 if(temperature) | |
698 *temperature = -1000; | |
699 if(sensor1) | |
700 *sensor1 = -1; | |
701 if(sensor2) | |
702 *sensor2 = -1; | |
703 if(sensor3) | |
704 *sensor3 = -1; | |
705 if(cns) | |
706 *cns = -1; | |
707 if(setpoint_cbar) | |
708 *setpoint_cbar = -1; | |
709 if(bailout) | |
710 *bailout = -1; | |
455
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
711 if(tank) |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
712 *tank = 0; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
713 |
38 | 714 if(manualGas) |
715 { | |
716 manualGas->percentageO2 =-1; | |
717 manualGas->percentageHe =-1; | |
718 } | |
719 if(decostopDepth) | |
720 *decostopDepth = -1; | |
721 | |
722 ext_flash_read_next_sample_part( (uint8_t*)&temp, 2); | |
723 if(depth) | |
724 *depth = (int32_t)temp; | |
725 bytesRead += 2; | |
726 | |
727 ext_flash_read_next_sample_part( &profileByteFlag.uw, 1); | |
728 bytesRead ++; | |
729 | |
730 bEvent = profileByteFlag.ub.bit7; | |
731 profileByteFlag.ub.bit7 = 0; | |
732 length = profileByteFlag.uw; | |
733 | |
734 if(bEvent) | |
735 { | |
736 ext_flash_read_next_sample_part( &eventByte1.uw, 1); | |
737 bytesRead ++; | |
738 | |
739 length--; | |
740 | |
610 | 741 /* marker */ |
617
4eba86129d35
Development bugfix: Low battery warning was interpretated as marker:
Ideenmodellierer
parents:
610
diff
changeset
|
742 if((eventByte1.ub.bit1 && eventByte1.ub.bit2 && !eventByte1.ub.bit0) && (event != NULL)) /* 3 lsb low bit means battery low */ |
610 | 743 { |
744 *event = 1; | |
745 } | |
746 | |
38 | 747 //second event byte |
748 if(eventByte1.ub.bit7) | |
610 | 749 { |
750 ext_flash_read_next_sample_part( &eventByte2.uw, 1); | |
751 bytesRead ++; | |
752 length--; | |
753 } | |
38 | 754 else |
755 { | |
756 eventByte2.uw = 0; | |
757 } | |
758 | |
759 //manual Gas Set | |
610 | 760 if( eventByte1.ub.bit4) |
38 | 761 { |
762 //Evaluate manual Gas | |
610 | 763 ext_flash_read_next_sample_part( (uint8_t*)&tempU8, 1); |
764 bytesRead +=1; | |
765 length -= 1; | |
766 manualGas->percentageO2 = tempU8; | |
767 ext_flash_read_next_sample_part( (uint8_t*)&tempU8, 1); | |
768 bytesRead +=1; | |
769 length -= 1; | |
770 manualGas->percentageHe = tempU8; | |
771 if(gasid) *gasid = 0; | |
38 | 772 } |
773 //gas change | |
774 if( eventByte1.ub.bit5) | |
775 { | |
776 ext_flash_read_next_sample_part( &tempU8, 1); | |
777 bytesRead +=1; | |
778 length -= 1; | |
779 if(gasid) | |
780 *gasid = (uint16_t)tempU8; | |
781 } | |
782 //SetpointChange | |
783 if( eventByte1.ub.bit6) | |
784 { | |
785 ext_flash_read_next_sample_part( &tempU8, 1); | |
786 *setpoint_cbar = tempU8; | |
787 bytesRead +=1; | |
788 length -= 1; | |
789 } | |
790 | |
791 // second event Byte | |
792 //bailout | |
298
50c26a4442af
Bugfix: fix drawing of CCR bailout profile
Jan Mulder <jlmulder@xs4all.nl>
parents:
283
diff
changeset
|
793 if(eventByte2.ub.bit0) |
38 | 794 { |
795 //evaluate bailout gas Gas | |
796 *bailout = 1; | |
797 | |
798 ext_flash_read_next_sample_part( (uint8_t*)&tempU8, 1); | |
799 bytesRead +=1; | |
800 length -= 1; | |
801 manualGas->percentageO2 = tempU8; | |
802 ext_flash_read_next_sample_part( (uint8_t*)&tempU8, 1); | |
803 bytesRead +=1; | |
804 length -= 1; | |
805 manualGas->percentageHe = tempU8; | |
806 | |
807 if(gasid) | |
808 *gasid = 0; | |
809 } | |
810 } | |
811 | |
812 if(divisor.temperature == 0) | |
813 { | |
814 divisor.temperature = smallHeader.tempDivisor - 1; | |
815 ext_flash_read_next_sample_part( (uint8_t*)&temp, 2); | |
816 bytesRead +=2; | |
817 length -= 2; | |
818 if(temperature) | |
819 { | |
820 *temperature = (int32_t)temp; | |
821 } | |
822 } | |
823 else | |
824 { | |
825 divisor.temperature--; | |
826 } | |
827 | |
828 if(smallHeader.deco_ndlDivisor > 0) | |
829 { | |
830 if(divisor.deco_ndl == 0) | |
831 { | |
832 divisor.deco_ndl = smallHeader.deco_ndlDivisor - 1; | |
833 ext_flash_read_next_sample_part( &tempU8, 1); | |
834 if(decostopDepth) | |
835 { | |
836 *decostopDepth = tempU8 * 100; | |
837 } | |
838 ext_flash_read_next_sample_part( &tempU8, 1); | |
839 bytesRead += 2; | |
840 length -= 2; | |
841 } | |
842 else | |
843 { | |
844 divisor.deco_ndl--; | |
845 } | |
846 } | |
847 | |
848 if(divisor.ppo2 == 0) | |
849 { | |
850 int32_t ppO2Tmp = 0; | |
851 divisor.ppo2 = smallHeader.ppo2Divisor -1; | |
852 for(int i = 0; i <3 ; i++) | |
853 { | |
854 ext_flash_read_next_sample_part( &tempU8, 1); | |
855 ppO2Tmp += tempU8; | |
856 bytesRead +=1; | |
857 length -= 1; | |
858 ext_flash_read_next_sample_part( (uint8_t*)&temp, 2); | |
859 bytesRead +=2; | |
860 length -= 2; | |
861 if(sensor1 && (i==0)) | |
862 *sensor1 = (((int32_t)tempU8) * 0xFFFF) + temp; | |
863 if(sensor2 && (i==1)) | |
864 *sensor2 = (((int32_t)tempU8) * 0xFFFF) + temp; | |
865 if(sensor3 && (i==2)) | |
866 *sensor3 = (((int32_t)tempU8) * 0xFFFF) + temp; | |
867 } | |
868 } | |
869 else | |
870 { | |
871 divisor.ppo2--; | |
872 } | |
873 | |
874 if(smallHeader.decoplanDivisor > 0) | |
875 { | |
876 if(divisor.decoplan == 0) | |
877 { | |
878 divisor.decoplan = smallHeader.decoplanDivisor - 1; | |
879 for(int i = 0; i <15; i++) | |
880 ext_flash_read_next_sample_part( &tempU8, 1); | |
881 bytesRead += 15; | |
882 length -= 15; | |
883 } | |
884 else | |
885 { | |
886 divisor.decoplan--; | |
887 } | |
888 } | |
889 | |
890 | |
891 | |
892 if(divisor.cns == 0) | |
893 { | |
894 divisor.cns = smallHeader.cnsDivisor - 1; | |
895 | |
896 ext_flash_read_next_sample_part( (uint8_t*)&temp, 2); | |
897 bytesRead +=2; | |
898 length -= 2; | |
899 if(cns) | |
900 { | |
901 *cns = (int32_t)temp; | |
902 } | |
903 } | |
904 else | |
905 { | |
906 divisor.cns--; | |
907 } | |
908 | |
455
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
909 if(smallHeader.tankDivisor) |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
910 { |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
911 if(divisor.tank == 0) |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
912 { |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
913 divisor.tank = smallHeader.tankDivisor - 1; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
914 ext_flash_read_next_sample_part( (uint8_t*)&temp, 2); |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
915 bytesRead +=2; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
916 length -= 2; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
917 if(tank) |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
918 { |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
919 *tank = (uint16_t)temp; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
920 } |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
921 } |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
922 else |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
923 { |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
924 divisor.tank--; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
925 } |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
926 } |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
927 |
38 | 928 if (length != 0) |
929 return 0; | |
930 | |
931 return bytesRead; | |
932 } | |
933 /** | |
934 ****************************************************************************** | |
935 * @brief logbook_readSampleData. / Reads sample data of whole logbook entry | |
281 | 936 * @author heinrichs weikamp |
38 | 937 * @version V0.0.1 |
938 * @date 22-April-2014 | |
939 ****************************************************************************** | |
940 * | |
941 * @param uint8_t StepBackwards: witch lookbook entry? | |
942 * @param uint16_t length : maxlength of output arrays | |
943 * @param int32_t* depth : output array | |
944 * @param int16_t * gasid : output array | |
945 * @param int32_t* temperature : output array | |
946 * @param int32_t* ppo2 : output array | |
947 * @param int32_t* cns : output array | |
948 * @return length of output | |
949 */ | |
455
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
950 uint16_t logbook_readSampleData(uint8_t StepBackwards, uint16_t length,uint16_t* depth, uint8_t* gasid, int16_t* temperature, uint16_t* ppo2, |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
951 uint16_t* setpoint, uint16_t* sensor1, uint16_t* sensor2, uint16_t* sensor3, uint16_t* cns, uint8_t* bailout, |
610 | 952 uint16_t* decostopDepth, uint16_t* tank, uint8_t* event) |
38 | 953 { |
954 //Test read | |
955 //SLogbookHeader header; | |
956 | |
957 //logbook_getHeader(&header); | |
958 SLogbookHeader header; | |
458 | 959 int16_t iNum; |
960 int16_t firstgasid = 0; | |
961 uint16_t retVal = 0; | |
962 int16_t compression = 0; | |
963 int16_t i; | |
38 | 964 // uint32_t diveTime_seconds; |
965 int32_t depthVal = 0; | |
966 int16_t gasidVal = 0; | |
967 int16_t setPointVal = 0; | |
968 int16_t bailoutVal = 0; | |
969 int16_t bailoutLast = 0; | |
970 uint16_t setPointLast = 0; | |
971 int32_t temperatureVal = 0; | |
972 int32_t sensor1Val = 0; | |
973 int32_t sensor2Val = 0; | |
974 int32_t sensor3Val = 0; | |
975 int32_t sensor1Last = 0; | |
976 int32_t sensor2Last = 0; | |
977 int32_t sensor3Last = 0; | |
978 int32_t cnsVal = 0; | |
979 int32_t depthLast = 0; | |
980 int16_t gasidLast = 0; | |
981 int32_t temperatureLast = 0; | |
982 int32_t temperatureFirst = 0; | |
983 int32_t cnsLast = 0; | |
455
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
984 int16_t decostepDepthVal = 0; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
985 int16_t decostepDepthLast = 0; |
457 | 986 uint16_t tankVal = 0; |
465
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
987 uint32_t small_profileLength = 0; |
610 | 988 uint8_t eventdata; |
38 | 989 |
990 SManualGas manualGasVal; | |
991 SManualGas manualGasLast; | |
992 manualGasLast.percentageO2 = 0; | |
993 manualGasLast.percentageHe = 0; | |
455
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
994 uint16_t numSamples = 0; |
38 | 995 |
996 float ambiant_pressure_bar = 0; | |
997 float ppO2 = 0; | |
998 ext_flash_read_dive_header((uint8_t*)&header, StepBackwards); | |
999 for(i = 0;i< 5;i++) | |
1000 { | |
1001 if(header.gasordil[i].note.ub.first) | |
1002 break; | |
1003 } | |
1004 firstgasid = i + 1; | |
662 | 1005 if(isLoopMode(header.diveMode)) |
38 | 1006 setPointLast = header.setpoint[0].setpoint_cbar; |
1007 else | |
1008 setPointLast = 0; | |
1009 //diveTime_seconds = header.diveTime_seconds ; | |
1010 for(compression = 1; compression < 100; compression ++) | |
1011 { | |
455
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1012 numSamples = (header.total_diveTime_seconds / header.samplingRate)/compression; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1013 if(numSamples <= length) |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1014 { |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1015 break; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1016 } |
38 | 1017 } |
1018 | |
1019 | |
1020 for(i = 0;i< length;i++) | |
1021 { | |
1022 if(depth) | |
1023 depth[i] = 0; | |
1024 if(temperature) | |
1025 temperature[i] = 0; | |
1026 if(gasid) | |
1027 gasid[i] = 0; | |
1028 if(ppo2) | |
1029 ppo2[i] = 0; | |
1030 if(setpoint) | |
1031 setpoint[i] = 0; | |
1032 if(sensor1) | |
1033 sensor1[i] = 0; | |
1034 if(sensor2) | |
1035 sensor2[i] = 0; | |
1036 if(sensor3) | |
1037 sensor3[i] = 0; | |
1038 if(cns) | |
1039 cns[i] = 0; | |
455
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1040 if(tank) |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1041 tank[i] = 0; |
38 | 1042 } |
1043 //We start with fist gasid | |
1044 gasidLast = firstgasid; | |
1045 | |
1046 | |
1047 //uint16_t* ppo2, uint16_t* cns# | |
465
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1048 uint32_t totalNumberOfBytes = 0; |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1049 uint32_t bytesRead = 0; |
38 | 1050 ext_flash_open_read_sample( StepBackwards,&totalNumberOfBytes); |
1051 ext_flash_read_next_sample_part((uint8_t*)&smallHeader, sizeof(SSmallHeader)); | |
1052 bytesRead += sizeof(SSmallHeader); | |
1053 | |
1054 clear_divisor(); | |
1055 | |
1056 iNum = 0; | |
1057 int counter = 0; | |
1058 temperatureLast = -1000; | |
465
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1059 |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1060 small_profileLength = (smallHeader.profileLength[2] << 16) + (smallHeader.profileLength[1] << 8) + smallHeader.profileLength[0]; |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1061 |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1062 if(totalNumberOfBytes == small_profileLength) /* sizes provided by header and small header are the same => real data */ |
455
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1063 { |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1064 while ((bytesRead < totalNumberOfBytes) && (iNum < length)) |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1065 { |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1066 ext_flash_set_entry_point(); |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1067 divisorBackup = divisor; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1068 retVal = readSample(&depthVal,&gasidVal, &setPointVal, &temperatureVal, &sensor1Val, &sensor2Val, &sensor3Val, &cnsVal, &manualGasVal, |
610 | 1069 &bailoutVal, &decostepDepthVal, &tankVal, &eventdata); |
38 | 1070 |
455
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1071 if(retVal == 0) |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1072 { |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1073 //Error try to read again!!! |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1074 ext_flash_reopen_read_sample_at_entry_point(); |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1075 divisor = divisorBackup; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1076 retVal = readSample(&depthVal,&gasidVal,&setPointVal, &temperatureVal, &sensor1Val, &sensor2Val, &sensor3Val, &cnsVal, |
610 | 1077 &manualGasVal, &bailoutVal, &decostepDepthVal, &tankVal, &eventdata); |
38 | 1078 |
455
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1079 if(retVal == 0) |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1080 break; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1081 } |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1082 bytesRead +=retVal; |
38 | 1083 |
455
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1084 //if for some variable no new value is in the sample for (z.B. gasidVal = -1), we take the last value |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1085 if(depthVal == -1) |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1086 depthVal = depthLast; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1087 else |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1088 depthLast = depthVal; |
38 | 1089 |
455
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1090 if(gasidVal == -1) |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1091 gasidVal = gasidLast; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1092 else |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1093 gasidLast = gasidVal; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1094 |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1095 if(temperatureVal == -1000) |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1096 temperatureVal = temperatureLast; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1097 else |
38 | 1098 { |
455
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1099 if(temperatureLast == -1000) |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1100 temperatureFirst = temperatureVal; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1101 temperatureLast = temperatureVal; |
38 | 1102 } |
1103 | |
455
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1104 if(setPointVal == -1) |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1105 setPointVal = setPointLast; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1106 else |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1107 setPointLast = setPointVal; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1108 |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1109 if(sensor1Val == -1) |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1110 sensor1Val = sensor1Last; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1111 else |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1112 sensor1Last = sensor1Val; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1113 |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1114 if(sensor2Val == -1) |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1115 sensor2Val = sensor2Last; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1116 else |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1117 sensor2Last = sensor2Val; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1118 |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1119 if(sensor3Val == -1) |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1120 sensor3Val = sensor3Last; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1121 else |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1122 sensor3Last = sensor3Val; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1123 |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1124 if(cnsVal == -1) |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1125 cnsVal = cnsLast; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1126 else |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1127 cnsLast = cnsVal; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1128 |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1129 if(manualGasVal.percentageO2 == -1) |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1130 manualGasVal = manualGasLast; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1131 else |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1132 manualGasLast = manualGasVal; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1133 |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1134 if(bailoutVal == -1) |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1135 bailoutVal = bailoutLast; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1136 else |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1137 bailoutLast = bailoutVal; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1138 |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1139 if(decostepDepthVal == -1) |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1140 decostepDepthVal = decostepDepthLast; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1141 else |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1142 decostepDepthLast = decostepDepthVal; |
38 | 1143 |
455
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1144 counter++; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1145 // Heed compression |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1146 // Write here to arrays |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1147 if(counter == compression) |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1148 { |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1149 if(depth) |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1150 depth[iNum] = depthVal; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1151 if(gasid) |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1152 gasid[iNum] = gasidVal; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1153 if(temperature) |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1154 temperature[iNum] = temperatureVal; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1155 if(cns) |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1156 cns[iNum] = cnsVal; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1157 if(bailout) |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1158 bailout[iNum] = bailoutVal; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1159 if(decostopDepth) |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1160 decostopDepth[iNum] = decostepDepthVal; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1161 |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1162 if(ppo2) |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1163 { |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1164 //Calc ppo2 - Values |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1165 SGas gas; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1166 gas.setPoint_cbar = setPointVal; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1167 if(gasidVal > 0) |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1168 { |
662 | 1169 if((gasidVal >= NUM_GASES) && (header.diveMode == DIVEMODE_PSCR)) /* in case gas switches the absolute gas ID is used => map to the 0..NUM_GASES index used in header */ |
1170 { | |
1171 gasidVal -= NUM_GASES; | |
1172 } | |
455
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1173 gas.helium_percentage = header.gasordil[gasidVal - 1].helium_percentage; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1174 gas.nitrogen_percentage = 100 - gas.helium_percentage - header.gasordil[gasidVal - 1].oxygen_percentage; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1175 } |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1176 else |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1177 { |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1178 gas.helium_percentage = manualGasVal.percentageHe; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1179 gas.nitrogen_percentage = 100 - gas.helium_percentage - manualGasVal.percentageO2; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1180 } |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1181 ambiant_pressure_bar =((float)(depthVal + header.surfacePressure_mbar))/1000; |
662 | 1182 |
1183 if(header.diveMode == DIVEMODE_PSCR) | |
1184 { | |
1185 ppO2 = decom_calc_SimppO2(ambiant_pressure_bar, &gas); | |
1186 } | |
1187 else /* open circuit calculation */ | |
1188 { | |
1189 ppO2 = decom_calc_ppO2(ambiant_pressure_bar, &gas); | |
1190 } | |
455
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1191 ppo2[iNum] = (uint16_t) ( ppO2 * 100); |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1192 } |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1193 |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1194 if(tank) |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1195 { |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1196 tank[iNum] = tankVal; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1197 } |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1198 if(setpoint) |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1199 setpoint[iNum] = setPointVal; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1200 |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1201 if(sensor1) |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1202 sensor1[iNum] = (sensor1Val / 0xFFFF) & 0xFF; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1203 if(sensor2) |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1204 sensor2[iNum] = (sensor2Val / 0xFFFF) & 0xFF; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1205 if(sensor3) |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1206 sensor3[iNum] = (sensor3Val / 0xFFFF) & 0xFF; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1207 iNum++; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1208 counter = 0; |
610 | 1209 |
1210 if(event) | |
1211 { | |
1212 event[iNum] = eventdata; | |
1213 eventdata = 0; | |
1214 } | |
455
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1215 } |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1216 } |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1217 } |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1218 else |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1219 { |
458 | 1220 logbook_createDummyProfile(&header, numSamples, depth, temperature, ppo2); |
455
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1221 iNum = numSamples; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1222 } |
38 | 1223 |
1224 // Fix first Temperature Entries 150930 hw | |
1225 if(temperature) | |
1226 { | |
1227 int i = 0; | |
1228 while((temperature[i] == -1000) && (i < iNum)) | |
1229 temperature[i++] = temperatureFirst; | |
1230 } | |
1231 | |
1232 ext_flash_close_read_sample(); | |
1233 return iNum; | |
1234 } | |
1235 | |
1236 | |
1237 /******************************************************************************** | |
1238 * @brief logbook_InitAndWrite. / Controls writing of logbook | |
1239 * Should be called ten times per second | |
1240 * Automatically Initializes logbook at beginning of dive, | |
1241 * write samples every 2 seconds | |
1242 * and finishes logbook after end of dive | |
1243 *********************************************************************************/ | |
1244 | |
270
2e58a4094770
feature, debug: make simulator write a logbook entry
Jan Mulder <jlmulder@xs4all.nl>
parents:
269
diff
changeset
|
1245 void logbook_InitAndWrite(const SDiveState *pStateReal) |
38 | 1246 { |
1247 SSettings *pSettings = settingsGetPointer(); | |
1248 static uint8_t bDiveMode = 0; | |
1249 static uint32_t tickstart = 0; | |
1250 uint32_t ticksdiff = 0; | |
1251 uint32_t lasttick = 0; | |
1252 static float min_temperature_float_celsius = 0; | |
1253 | |
1254 if(!bDiveMode) | |
1255 { | |
1256 if((pStateReal->mode == MODE_DIVE) && (pStateReal->diveSettings.diveMode != DIVEMODE_Apnea) && (pStateReal->lifeData.dive_time_seconds >= 5)) | |
1257 { | |
1258 //InitdiveProfile | |
1259 pSettings->totalDiveCounter++; | |
1260 logbook_initNewdiveProfile(pStateReal,settingsGetPointer()); | |
1261 min_temperature_float_celsius = pStateReal->lifeData.temperature_celsius; | |
1262 //Write logbook sample | |
269
6e78137952af
cleanup: do not pass large struct by value
Jan Mulder <jlmulder@xs4all.nl>
parents:
225
diff
changeset
|
1263 logbook_writeSample(pStateReal); |
270
2e58a4094770
feature, debug: make simulator write a logbook entry
Jan Mulder <jlmulder@xs4all.nl>
parents:
269
diff
changeset
|
1264 resetEvents(pStateReal); |
38 | 1265 tickstart = HAL_GetTick(); |
1266 bDiveMode = 1; | |
1267 } | |
1268 } | |
1269 else if((pStateReal->mode == MODE_DIVE) && (pStateReal->diveSettings.diveMode != DIVEMODE_Apnea)) | |
1270 { | |
1271 lasttick = HAL_GetTick(); | |
1272 ticksdiff = time_elapsed_ms(tickstart,lasttick); | |
1273 // | |
1274 if(ticksdiff >= 2000) | |
1275 { | |
1276 //Write logbook sample | |
269
6e78137952af
cleanup: do not pass large struct by value
Jan Mulder <jlmulder@xs4all.nl>
parents:
225
diff
changeset
|
1277 logbook_writeSample(pStateReal); |
270
2e58a4094770
feature, debug: make simulator write a logbook entry
Jan Mulder <jlmulder@xs4all.nl>
parents:
269
diff
changeset
|
1278 resetEvents(pStateReal); |
38 | 1279 if(min_temperature_float_celsius > pStateReal->lifeData.temperature_celsius) |
1280 min_temperature_float_celsius = pStateReal->lifeData.temperature_celsius; | |
1281 tickstart = lasttick; | |
1282 if((bDiveMode == 1) && (pStateReal->lifeData.dive_time_seconds >= pSettings->divetimeToCreateLogbook)) | |
1283 { | |
411
e908b894f107
Bugfix: Limit log length in case of corrupted sample storage:
ideenmodellierer
parents:
325
diff
changeset
|
1284 ext_flash_create_new_dive_log((uint8_t*)&gheader); |
38 | 1285 /** save settings |
1286 * with new lastDiveLogId and time and day | |
1287 */ | |
1288 pSettings->personalDiveCount++; | |
1289 if(pSettings->logbookOffset) | |
1290 { | |
1291 pSettings->logbookOffset++; | |
1292 } | |
427 | 1293 ext_flash_write_settings(0); |
38 | 1294 ext_flash_disable_protection_for_logbook(); |
426
514e6269256f
Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents:
411
diff
changeset
|
1295 |
514e6269256f
Added function to analyse the sampel ringbuffer:
ideenmodellierer
parents:
411
diff
changeset
|
1296 ext_flash_CloseSector(); /* this is just a repair function which invalidates a not used sector in case a log maintenance was called before dive */ |
38 | 1297 bDiveMode = 3; |
1298 } | |
1299 if(bDiveMode == 3) | |
270
2e58a4094770
feature, debug: make simulator write a logbook entry
Jan Mulder <jlmulder@xs4all.nl>
parents:
269
diff
changeset
|
1300 logbook_UpdateHeader(pStateReal); |
38 | 1301 } |
1302 } | |
1303 else if(bDiveMode == 3) | |
1304 { | |
1305 //End of Dive | |
1306 logbook_SetAverageDepth(pStateReal->lifeData.average_depth_meter); | |
1307 logbook_SetMinTemperature(min_temperature_float_celsius); | |
1308 logbook_SetMaxCNS(pStateReal->lifeData.cns); | |
270
2e58a4094770
feature, debug: make simulator write a logbook entry
Jan Mulder <jlmulder@xs4all.nl>
parents:
269
diff
changeset
|
1309 logbook_SetCompartmentDesaturation(pStateReal); |
38 | 1310 logbook_SetLastStop(pStateReal->diveSettings.last_stop_depth_bar); |
411
e908b894f107
Bugfix: Limit log length in case of corrupted sample storage:
ideenmodellierer
parents:
325
diff
changeset
|
1311 gheader.batteryVoltage = pStateReal->lifeData.battery_voltage * 1000; |
671
b456be1e152d
Support of unknown charging counter values:
Ideenmodellierer
parents:
662
diff
changeset
|
1312 if(pStateReal->lifeData.battery_charge > 0.0) |
b456be1e152d
Support of unknown charging counter values:
Ideenmodellierer
parents:
662
diff
changeset
|
1313 { |
b456be1e152d
Support of unknown charging counter values:
Ideenmodellierer
parents:
662
diff
changeset
|
1314 gheader.batteryCharge = pStateReal->lifeData.battery_charge; |
b456be1e152d
Support of unknown charging counter values:
Ideenmodellierer
parents:
662
diff
changeset
|
1315 } |
b456be1e152d
Support of unknown charging counter values:
Ideenmodellierer
parents:
662
diff
changeset
|
1316 else |
b456be1e152d
Support of unknown charging counter values:
Ideenmodellierer
parents:
662
diff
changeset
|
1317 { |
b456be1e152d
Support of unknown charging counter values:
Ideenmodellierer
parents:
662
diff
changeset
|
1318 gheader.batteryCharge = 0.0; |
b456be1e152d
Support of unknown charging counter values:
Ideenmodellierer
parents:
662
diff
changeset
|
1319 } |
38 | 1320 logbook_EndDive(); |
1321 bDiveMode = 0; | |
1322 } else | |
1323 { | |
1324 ext_flash_enable_protection(); | |
1325 } | |
1326 } | |
1327 | |
1328 | |
1329 /* Private functions ---------------------------------------------------------*/ | |
1330 | |
1331 /******************************************************************************** | |
1332 * @brief logbook_UpdateHeader. / | |
1333 * set date, time, max depth. etc. pp. | |
1334 * the internal pointer to the end of profile and length will be set by | |
1335 ext_flash_close_new_dive_log() in externLogbookFlash.c | |
1336 * @author heinrichs weikamp gmbh | |
1337 * @version V0.0.1 | |
1338 * @date 27-Nov-2014 | |
1339 *********************************************************************************/ | |
270
2e58a4094770
feature, debug: make simulator write a logbook entry
Jan Mulder <jlmulder@xs4all.nl>
parents:
269
diff
changeset
|
1340 static void logbook_UpdateHeader(const SDiveState *pStateReal) |
38 | 1341 { |
1342 // uint16_t secondsAtShallow = 0; | |
1343 RTC_DateTypeDef Sdate; | |
1344 RTC_TimeTypeDef Stime; | |
1345 uint32_t time1_u32, time2_u32; | |
1346 uint32_t divetimeHelper; | |
1347 | |
1348 /* time and day */ | |
1349 /* don't update CHANGE 160224 hw, maybe save actual time and date at other place | |
1350 translateDate(pStateReal->lifeData.dateBinaryFormat, &Sdate); | |
1351 translateTime(pStateReal->lifeData.timeBinaryFormat, &Stime); | |
1352 | |
1353 header.dateYear = Sdate.Year; | |
1354 header.dateMonth = Sdate.Month; | |
1355 header.dateDay = Sdate.Date; | |
1356 header.timeHour = Stime.Hours; | |
1357 header.timeMinute = Stime.Minutes; | |
1358 */ | |
1359 /// 160315 Quick fix for empty date problem | |
411
e908b894f107
Bugfix: Limit log length in case of corrupted sample storage:
ideenmodellierer
parents:
325
diff
changeset
|
1360 if((!(gheader.dateYear)) || (!(gheader.dateMonth)) || (!(gheader.dateDay))) |
38 | 1361 { |
1362 translateDate(pStateReal->lifeData.dateBinaryFormat, &Sdate); | |
1363 translateTime(pStateReal->lifeData.timeBinaryFormat, &Stime); | |
1364 | |
411
e908b894f107
Bugfix: Limit log length in case of corrupted sample storage:
ideenmodellierer
parents:
325
diff
changeset
|
1365 gheader.dateYear = Sdate.Year; |
e908b894f107
Bugfix: Limit log length in case of corrupted sample storage:
ideenmodellierer
parents:
325
diff
changeset
|
1366 gheader.dateMonth = Sdate.Month; |
e908b894f107
Bugfix: Limit log length in case of corrupted sample storage:
ideenmodellierer
parents:
325
diff
changeset
|
1367 gheader.dateDay = Sdate.Date; |
38 | 1368 |
411
e908b894f107
Bugfix: Limit log length in case of corrupted sample storage:
ideenmodellierer
parents:
325
diff
changeset
|
1369 time1_u32 = (uint32_t)gheader.timeMinute + (uint32_t)(gheader.timeHour * 60); |
38 | 1370 time2_u32 = (uint32_t)Stime.Minutes + (uint32_t)(Stime.Hours * 60); |
1371 if(time2_u32 < time1_u32) | |
1372 { | |
411
e908b894f107
Bugfix: Limit log length in case of corrupted sample storage:
ideenmodellierer
parents:
325
diff
changeset
|
1373 if(gheader.dateDay > 1) |
38 | 1374 { |
411
e908b894f107
Bugfix: Limit log length in case of corrupted sample storage:
ideenmodellierer
parents:
325
diff
changeset
|
1375 gheader.dateDay -= 1; |
38 | 1376 } |
1377 else | |
1378 { | |
411
e908b894f107
Bugfix: Limit log length in case of corrupted sample storage:
ideenmodellierer
parents:
325
diff
changeset
|
1379 gheader.dateMonth --; |
e908b894f107
Bugfix: Limit log length in case of corrupted sample storage:
ideenmodellierer
parents:
325
diff
changeset
|
1380 if(!gheader.dateMonth) |
38 | 1381 { |
411
e908b894f107
Bugfix: Limit log length in case of corrupted sample storage:
ideenmodellierer
parents:
325
diff
changeset
|
1382 gheader.dateYear--; |
e908b894f107
Bugfix: Limit log length in case of corrupted sample storage:
ideenmodellierer
parents:
325
diff
changeset
|
1383 gheader.dateMonth = 12; |
e908b894f107
Bugfix: Limit log length in case of corrupted sample storage:
ideenmodellierer
parents:
325
diff
changeset
|
1384 gheader.dateDay = 31; |
38 | 1385 } |
1386 else | |
1387 { | |
411
e908b894f107
Bugfix: Limit log length in case of corrupted sample storage:
ideenmodellierer
parents:
325
diff
changeset
|
1388 if(gheader.dateMonth == 2) |
e908b894f107
Bugfix: Limit log length in case of corrupted sample storage:
ideenmodellierer
parents:
325
diff
changeset
|
1389 gheader.dateDay = 28; |
38 | 1390 else |
411
e908b894f107
Bugfix: Limit log length in case of corrupted sample storage:
ideenmodellierer
parents:
325
diff
changeset
|
1391 if((gheader.dateMonth == 4) || (gheader.dateMonth == 6) || (gheader.dateMonth == 9) || (gheader.dateMonth == 11)) |
e908b894f107
Bugfix: Limit log length in case of corrupted sample storage:
ideenmodellierer
parents:
325
diff
changeset
|
1392 gheader.dateDay = 30; |
38 | 1393 else |
411
e908b894f107
Bugfix: Limit log length in case of corrupted sample storage:
ideenmodellierer
parents:
325
diff
changeset
|
1394 gheader.dateDay = 31; |
38 | 1395 } |
1396 } | |
1397 } | |
1398 } | |
1399 | |
1400 /* duration */ | |
411
e908b894f107
Bugfix: Limit log length in case of corrupted sample storage:
ideenmodellierer
parents:
325
diff
changeset
|
1401 gheader.total_diveTime_seconds = pStateReal->lifeData.dive_time_seconds; |
e908b894f107
Bugfix: Limit log length in case of corrupted sample storage:
ideenmodellierer
parents:
325
diff
changeset
|
1402 gheader.maxDepth = pStateReal->lifeData.max_depth_meter * 100; |
38 | 1403 |
1404 /* old: | |
1405 | |
1406 secondsAtShallow = pSettings->timeoutDiveReachedZeroDepth; | |
1407 if(pStateReal->lifeData.dive_time_seconds <= secondsAtShallow) | |
1408 secondsAtShallow = 0; | |
1409 header.diveTimeMinutes = (header.total_diveTime_seconds - secondsAtShallow )/ 60; | |
1410 header.diveTimeSeconds = header.total_diveTime_seconds - secondsAtShallow - (header.diveTimeMinutes * 60); | |
1411 */ | |
1412 divetimeHelper = pStateReal->lifeData.dive_time_seconds_without_surface_time; | |
411
e908b894f107
Bugfix: Limit log length in case of corrupted sample storage:
ideenmodellierer
parents:
325
diff
changeset
|
1413 gheader.diveTimeMinutes = (uint16_t)(divetimeHelper/60); |
e908b894f107
Bugfix: Limit log length in case of corrupted sample storage:
ideenmodellierer
parents:
325
diff
changeset
|
1414 divetimeHelper -= 60 * (uint32_t)gheader.diveTimeMinutes; |
e908b894f107
Bugfix: Limit log length in case of corrupted sample storage:
ideenmodellierer
parents:
325
diff
changeset
|
1415 gheader.diveTimeSeconds = (uint16_t)divetimeHelper; |
38 | 1416 |
1417 /* deco algorithm (final) */ | |
1418 if(pStateReal->diveSettings.deco_type.ub.standard == GF_MODE) | |
1419 { | |
411
e908b894f107
Bugfix: Limit log length in case of corrupted sample storage:
ideenmodellierer
parents:
325
diff
changeset
|
1420 gheader.decoModel = 1; |
e908b894f107
Bugfix: Limit log length in case of corrupted sample storage:
ideenmodellierer
parents:
325
diff
changeset
|
1421 gheader.gfLow_or_Vpm_conservatism = pStateReal->diveSettings.gf_low; |
e908b894f107
Bugfix: Limit log length in case of corrupted sample storage:
ideenmodellierer
parents:
325
diff
changeset
|
1422 gheader.gfHigh = pStateReal->diveSettings.gf_high; |
38 | 1423 } |
1424 else | |
1425 { | |
411
e908b894f107
Bugfix: Limit log length in case of corrupted sample storage:
ideenmodellierer
parents:
325
diff
changeset
|
1426 gheader.decoModel = 2; |
e908b894f107
Bugfix: Limit log length in case of corrupted sample storage:
ideenmodellierer
parents:
325
diff
changeset
|
1427 gheader.gfLow_or_Vpm_conservatism = pStateReal->diveSettings.vpm_conservatism; |
e908b894f107
Bugfix: Limit log length in case of corrupted sample storage:
ideenmodellierer
parents:
325
diff
changeset
|
1428 gheader.gfHigh = 0; |
38 | 1429 } |
1430 | |
1431 /* tissue load */ | |
411
e908b894f107
Bugfix: Limit log length in case of corrupted sample storage:
ideenmodellierer
parents:
325
diff
changeset
|
1432 memcpy(gheader.n2Compartments, pStateReal->lifeData.tissue_nitrogen_bar, 64); |
e908b894f107
Bugfix: Limit log length in case of corrupted sample storage:
ideenmodellierer
parents:
325
diff
changeset
|
1433 memcpy(gheader.heCompartments, pStateReal->lifeData.tissue_helium_bar, 64); |
38 | 1434 |
1435 } | |
1436 | |
1437 | |
194
f23b9055436f
cleanup: more trivial cleanup (logbook.c/h)
Jan Mulder <jlmulder@xs4all.nl>
parents:
149
diff
changeset
|
1438 static void logbook_SetAverageDepth(float average_depth_meter) |
38 | 1439 { |
411
e908b894f107
Bugfix: Limit log length in case of corrupted sample storage:
ideenmodellierer
parents:
325
diff
changeset
|
1440 gheader.averageDepth_mbar = (uint16_t)(average_depth_meter * 100); |
38 | 1441 } |
1442 | |
1443 | |
194
f23b9055436f
cleanup: more trivial cleanup (logbook.c/h)
Jan Mulder <jlmulder@xs4all.nl>
parents:
149
diff
changeset
|
1444 static void logbook_SetMinTemperature(float min_temperature_celsius) |
38 | 1445 { |
411
e908b894f107
Bugfix: Limit log length in case of corrupted sample storage:
ideenmodellierer
parents:
325
diff
changeset
|
1446 gheader.minTemp = (int16_t)((min_temperature_celsius * 10.0f) + 0.5f); |
38 | 1447 } |
1448 | |
1449 | |
194
f23b9055436f
cleanup: more trivial cleanup (logbook.c/h)
Jan Mulder <jlmulder@xs4all.nl>
parents:
149
diff
changeset
|
1450 static void logbook_SetMaxCNS(float max_cns_percentage) |
38 | 1451 { |
1452 if(max_cns_percentage < 9999) | |
411
e908b894f107
Bugfix: Limit log length in case of corrupted sample storage:
ideenmodellierer
parents:
325
diff
changeset
|
1453 gheader.maxCNS = (uint16_t)(max_cns_percentage); |
38 | 1454 else |
411
e908b894f107
Bugfix: Limit log length in case of corrupted sample storage:
ideenmodellierer
parents:
325
diff
changeset
|
1455 gheader.maxCNS = 9999; |
38 | 1456 } |
1457 | |
1458 | |
270
2e58a4094770
feature, debug: make simulator write a logbook entry
Jan Mulder <jlmulder@xs4all.nl>
parents:
269
diff
changeset
|
1459 static void logbook_SetCompartmentDesaturation(const SDiveState * pStateReal) |
38 | 1460 { |
225
2bb1db22b5f5
cleanup: random set of cleanups
Jan Mulder <jlmulder@xs4all.nl>
parents:
199
diff
changeset
|
1461 SLifeData2 secondaryInformation = { 0 }; |
38 | 1462 |
1463 decom_tissues_desaturation_time(&pStateReal->lifeData, &secondaryInformation); | |
1464 for(int i=0;i<16;i++) | |
1465 { | |
1466 if(secondaryInformation.tissue_nitrogen_desaturation_time_minutes[i] <= (15 * 255)) | |
411
e908b894f107
Bugfix: Limit log length in case of corrupted sample storage:
ideenmodellierer
parents:
325
diff
changeset
|
1467 gheader.n2CompartDesatTime_min[i] = (uint8_t)((secondaryInformation.tissue_nitrogen_desaturation_time_minutes[i] + 14) / 15); |
38 | 1468 else |
411
e908b894f107
Bugfix: Limit log length in case of corrupted sample storage:
ideenmodellierer
parents:
325
diff
changeset
|
1469 gheader.n2CompartDesatTime_min[i] = 255; |
38 | 1470 if(secondaryInformation.tissue_helium_desaturation_time_minutes[i] <= (15 * 255)) |
411
e908b894f107
Bugfix: Limit log length in case of corrupted sample storage:
ideenmodellierer
parents:
325
diff
changeset
|
1471 gheader.heCompartDesatTime_min[i] = (uint8_t)((secondaryInformation.tissue_helium_desaturation_time_minutes[i] + 14 )/ 15); |
38 | 1472 else |
411
e908b894f107
Bugfix: Limit log length in case of corrupted sample storage:
ideenmodellierer
parents:
325
diff
changeset
|
1473 gheader.heCompartDesatTime_min[i] = 255; |
38 | 1474 } |
1475 } | |
1476 | |
194
f23b9055436f
cleanup: more trivial cleanup (logbook.c/h)
Jan Mulder <jlmulder@xs4all.nl>
parents:
149
diff
changeset
|
1477 static void logbook_SetLastStop(float last_stop_depth_bar) |
38 | 1478 { |
411
e908b894f107
Bugfix: Limit log length in case of corrupted sample storage:
ideenmodellierer
parents:
325
diff
changeset
|
1479 gheader.lastDecostop_m = (uint8_t)(last_stop_depth_bar / 10.0f); |
38 | 1480 } |
1481 | |
194
f23b9055436f
cleanup: more trivial cleanup (logbook.c/h)
Jan Mulder <jlmulder@xs4all.nl>
parents:
149
diff
changeset
|
1482 static void logbook_writedata(void * data, int length_byte) |
38 | 1483 { |
1484 ext_flash_write_sample(data, length_byte); | |
1485 } | |
1486 | |
1487 /******************************************************************************** | |
1488 * @brief logbook_build_ostc3header. / | |
1489 * @author heinrichs weikamp gmbh | |
1490 * @version V0.0.2 | |
1491 * @date 27-Nov-2014 | |
1492 *********************************************************************************/ | |
1493 SLogbookHeaderOSTC3 * logbook_build_ostc3header(SLogbookHeader* pHead) | |
1494 { | |
411
e908b894f107
Bugfix: Limit log length in case of corrupted sample storage:
ideenmodellierer
parents:
325
diff
changeset
|
1495 convert_Type data,data2; |
455
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1496 uint16_t dummyLength = 0; |
465
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1497 uint8_t returnEmptyHeader = 0; |
38 | 1498 |
465
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1499 uint32_t headerProfileLength, sampleProfileLength, sampleProfileStart; |
38 | 1500 |
411
e908b894f107
Bugfix: Limit log length in case of corrupted sample storage:
ideenmodellierer
parents:
325
diff
changeset
|
1501 |
465
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1502 if(pHead->diveHeaderStart != 0xFAFA) |
411
e908b894f107
Bugfix: Limit log length in case of corrupted sample storage:
ideenmodellierer
parents:
325
diff
changeset
|
1503 { |
465
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1504 returnEmptyHeader = 1; |
411
e908b894f107
Bugfix: Limit log length in case of corrupted sample storage:
ideenmodellierer
parents:
325
diff
changeset
|
1505 } |
e908b894f107
Bugfix: Limit log length in case of corrupted sample storage:
ideenmodellierer
parents:
325
diff
changeset
|
1506 else |
e908b894f107
Bugfix: Limit log length in case of corrupted sample storage:
ideenmodellierer
parents:
325
diff
changeset
|
1507 { |
465
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1508 memcpy(headerOSTC3.diveHeaderStart, &pHead->diveHeaderStart, 2); |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1509 memcpy(headerOSTC3.pBeginProfileData, &pHead->pBeginProfileData, 3); |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1510 memcpy(headerOSTC3.pEndProfileData, &pHead->pEndProfileData, 3); |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1511 |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1512 data.u8bit.byteHigh = 0; |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1513 data.u8bit.byteLow = pHead->pBeginProfileData[0]; |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1514 data.u8bit.byteMidLow = pHead->pBeginProfileData[1]; |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1515 data.u8bit.byteMidHigh = pHead->pBeginProfileData[2]; |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1516 |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1517 sampleProfileStart = data.u32bit; |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1518 |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1519 data2.u8bit.byteHigh = 0; |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1520 data2.u8bit.byteLow = pHead->pEndProfileData[0]; |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1521 data2.u8bit.byteMidLow = pHead->pEndProfileData[1]; |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1522 data2.u8bit.byteMidHigh = pHead->pEndProfileData[2]; |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1523 |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1524 data.u8bit.byteHigh = 0; |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1525 data.u8bit.byteLow = pHead->profileLength[0]; |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1526 data.u8bit.byteMidLow = pHead->profileLength[1]; |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1527 data.u8bit.byteMidHigh = pHead->profileLength[2]; |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1528 |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1529 if(data.u32bit != 0xFFFFFF) /* if the profile in use ? */ |
455
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1530 { |
465
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1531 if(data2.u32bit < sampleProfileStart) /* Wrap around of sample ring detected */ |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1532 { |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1533 if(ext_flash_SampleOverrunValid() == 0) /* Wrap around does not seem to be valid => fallback */ |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1534 { |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1535 sampleProfileStart = 0; |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1536 } |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1537 } |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1538 if( sampleProfileStart == 0) /* should never happen unless OSTC with older debug version is in use (or invalid overrun) */ |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1539 { |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1540 sampleProfileLength = 1; |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1541 headerProfileLength = 2; |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1542 } |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1543 else |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1544 { |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1545 headerProfileLength = (pHead->profileLength[2] << 16) + (pHead->profileLength[1] << 8) + pHead->profileLength[0]; |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1546 sampleProfileLength = ext_flash_read_profilelength_small_header(sampleProfileStart); |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1547 } |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1548 |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1549 if(sampleProfileLength != headerProfileLength) |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1550 { |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1551 dummyLength = logbook_fillDummySampleBuffer(pHead); |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1552 |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1553 data2.u32bit = sampleProfileStart + dummyLength; /* calc new end address (which is equal to dummyLength) */ |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1554 data.u32bit = dummyLength; /* data is used below to represent the length */ |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1555 } |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1556 |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1557 data.u32bit += 3; |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1558 headerOSTC3.profileLength[0] = data.u8bit.byteLow; |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1559 headerOSTC3.profileLength[1] = data.u8bit.byteMidLow; |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1560 headerOSTC3.profileLength[2] = data.u8bit.byteMidHigh; |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1561 |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1562 memcpy(headerOSTC3.gasordil, pHead->gasordil, 20); |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1563 |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1564 if(pHead->logbookProfileVersion == LOGBOOK_VERSION) |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1565 { |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1566 headerOSTC3.logbookProfileVersion = LOGBOOK_VERSION_OSTC3; |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1567 memcpy(headerOSTC3.personalDiveCount, &pHead->personalDiveCount, 2); |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1568 headerOSTC3.safetyDistance_10cm = 0; |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1569 |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1570 for(int i=0;i<5;i++) |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1571 { |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1572 if(!pHead->gasordil[i].note.ub.active) |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1573 headerOSTC3.gasordil[3 + (i*4)] = 0; |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1574 else if(pHead->gasordil[i].note.ub.first) |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1575 { |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1576 /* depth = 0, note = 1 */ |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1577 headerOSTC3.gasordil[2 + (i*4)] = 0; |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1578 headerOSTC3.gasordil[3 + (i*4)] = 1; |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1579 } |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1580 else if( pHead->gasordil[i].depth_meter) |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1581 { |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1582 /* note = 3 */ |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1583 headerOSTC3.gasordil[3 + (i*4)] = 3; |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1584 } |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1585 } |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1586 } |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1587 else |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1588 { |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1589 headerOSTC3.logbookProfileVersion = 0xFF; |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1590 headerOSTC3.personalDiveCount[0] = 0xFF; |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1591 headerOSTC3.personalDiveCount[1] = 0xFF; |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1592 headerOSTC3.safetyDistance_10cm = 0xFF; |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1593 } |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1594 |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1595 headerOSTC3.dateYear = pHead->dateYear; |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1596 headerOSTC3.dateMonth = pHead->dateMonth; |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1597 headerOSTC3.dateDay = pHead->dateDay; |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1598 headerOSTC3.timeHour = pHead->timeHour; |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1599 headerOSTC3.timeMinute = pHead->timeMinute; |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1600 |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1601 memcpy(headerOSTC3.maxDepth, &pHead->maxDepth, 2); |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1602 memcpy(headerOSTC3.diveTimeMinutes, &pHead->diveTimeMinutes, 2); |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1603 |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1604 headerOSTC3.diveTimeSeconds = pHead->diveTimeSeconds; |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1605 |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1606 memcpy(headerOSTC3.minTemp, &pHead->minTemp, 2); |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1607 memcpy(headerOSTC3.surfacePressure_mbar,&pHead->surfacePressure_mbar, 2); |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1608 memcpy(headerOSTC3.desaturationTime, &pHead->desaturationTime, 2); |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1609 |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1610 headerOSTC3.firmwareVersionHigh = pHead->firmwareVersionHigh; |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1611 headerOSTC3.firmwareVersionLow = pHead->firmwareVersionLow; |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1612 |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1613 memcpy(headerOSTC3.batteryVoltage, &pHead->batteryVoltage, 2); |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1614 |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1615 headerOSTC3.samplingRate = pHead->samplingRate; |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1616 |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1617 memcpy(headerOSTC3.cnsAtBeginning, &pHead->cnsAtBeginning, 2); |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1618 |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1619 headerOSTC3.gfAtBeginning = pHead->gfAtBeginning; |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1620 headerOSTC3.gfAtEnd = pHead->gfAtEnd; |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1621 |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1622 memcpy(headerOSTC3.setpoint, pHead->setpoint, 10); |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1623 |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1624 headerOSTC3.salinity = pHead->salinity; |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1625 |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1626 memcpy(headerOSTC3.maxCNS, &pHead->maxCNS, 2); |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1627 memcpy(headerOSTC3.averageDepth_mbar, &pHead->averageDepth_mbar, 2); |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1628 memcpy(headerOSTC3.total_diveTime_seconds, &pHead->total_diveTime_seconds, 2); |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1629 |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1630 headerOSTC3.gfLow_or_Vpm_conservatism = pHead->gfLow_or_Vpm_conservatism; |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1631 headerOSTC3.gfHigh = pHead->gfHigh; |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1632 headerOSTC3.decoModel = pHead->decoModel; |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1633 |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1634 memcpy(headerOSTC3.diveNumber, &pHead->diveNumber, 2); |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1635 |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1636 headerOSTC3.diveMode = pHead->diveMode; |
471
73da921869d9
bugfix: implement battery charge percentage in dive header
Jan Mulder <jlmulder@xs4all.nl>
parents:
465
diff
changeset
|
1637 headerOSTC3.batteryCharge = pHead->batteryCharge; |
465
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1638 |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1639 memcpy(headerOSTC3.n2CompartDesatTime_min,pHead->n2CompartDesatTime_min, 16); |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1640 memcpy(headerOSTC3.n2Compartments, pHead->n2Compartments, 64); |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1641 memcpy(headerOSTC3.heCompartDesatTime_min,pHead->heCompartDesatTime_min, 16); |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1642 memcpy(headerOSTC3.heCompartments, pHead->heCompartments, 64); |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1643 |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1644 headerOSTC3.lastDecostop_m = pHead->lastDecostop_m; |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1645 |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1646 memcpy(headerOSTC3.hwHudBattery_mV, &pHead->hwHudBattery_mV, 2); |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1647 |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1648 headerOSTC3.hwHudLastStatus = pHead->hwHudLastStatus; |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1649 |
483 | 1650 memset(headerOSTC3.batteryGaugeRegisters, 0x00, 6); /* The battery registers are not evaluated => Set to zero */ |
465
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1651 |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1652 memcpy(headerOSTC3.diveHeaderEnd, &pHead->diveHeaderEnd, 2); |
455
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1653 } |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1654 else |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1655 { |
465
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1656 returnEmptyHeader = 1; |
38 | 1657 } |
1658 } | |
465
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1659 if(returnEmptyHeader) /* profile not in use => return array full of 0xFF */ |
38 | 1660 { |
465
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1661 memset(&headerOSTC3, 0xFF, sizeof(headerOSTC3)); |
38 | 1662 } |
1663 | |
1664 return &headerOSTC3; | |
1665 } | |
1666 | |
1667 | |
1668 /******************************************************************************** | |
1669 * @brief logbook_build_ostc3header_compact. / | |
1670 * @author heinrichs weikamp gmbh | |
1671 * @version V0.0.1 | |
1672 * @date 31-Juli-2015 | |
1673 *********************************************************************************/ | |
1674 SLogbookHeaderOSTC3compact * logbook_build_ostc3header_compact(SLogbookHeader* pHead) | |
1675 { | |
465
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1676 uint8_t returnEmptyHeader = 0; |
411
e908b894f107
Bugfix: Limit log length in case of corrupted sample storage:
ideenmodellierer
parents:
325
diff
changeset
|
1677 convert_Type data, data2; |
455
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1678 uint32_t dummyLength = 0; |
465
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1679 uint32_t headerProfileLength, sampleProfileLength, sampleProfileStart; |
411
e908b894f107
Bugfix: Limit log length in case of corrupted sample storage:
ideenmodellierer
parents:
325
diff
changeset
|
1680 |
465
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1681 if(pHead->diveHeaderStart != 0xFAFA) |
411
e908b894f107
Bugfix: Limit log length in case of corrupted sample storage:
ideenmodellierer
parents:
325
diff
changeset
|
1682 { |
465
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1683 returnEmptyHeader = 1; |
411
e908b894f107
Bugfix: Limit log length in case of corrupted sample storage:
ideenmodellierer
parents:
325
diff
changeset
|
1684 } |
e908b894f107
Bugfix: Limit log length in case of corrupted sample storage:
ideenmodellierer
parents:
325
diff
changeset
|
1685 else |
e908b894f107
Bugfix: Limit log length in case of corrupted sample storage:
ideenmodellierer
parents:
325
diff
changeset
|
1686 { |
465
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1687 data.u8bit.byteHigh = 0; |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1688 data.u8bit.byteLow = pHead->pBeginProfileData[0]; |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1689 data.u8bit.byteMidLow = pHead->pBeginProfileData[1]; |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1690 data.u8bit.byteMidHigh = pHead->pBeginProfileData[2]; |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1691 |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1692 sampleProfileStart = data.u32bit; |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1693 |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1694 data2.u8bit.byteHigh = 0; |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1695 data2.u8bit.byteLow = pHead->pEndProfileData[0]; |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1696 data2.u8bit.byteMidLow = pHead->pEndProfileData[1]; |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1697 data2.u8bit.byteMidHigh = pHead->pEndProfileData[2]; |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1698 |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1699 data.u8bit.byteHigh = 0; |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1700 data.u8bit.byteLow = pHead->profileLength[0]; |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1701 data.u8bit.byteMidLow = pHead->profileLength[1]; |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1702 data.u8bit.byteMidHigh = pHead->profileLength[2]; |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1703 |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1704 if(data.u32bit != 0xFFFFFF) |
455
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1705 { |
465
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1706 if(data2.u32bit < sampleProfileStart) /* Wrap around of sample ring detected */ |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1707 { |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1708 if(ext_flash_SampleOverrunValid() == 0) /* Wrap around does not seem to be valid => fallback */ |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1709 { |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1710 sampleProfileStart = 0; |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1711 } |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1712 } |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1713 |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1714 if( sampleProfileStart == 0) /* no sample data available => use dummy */ |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1715 { |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1716 sampleProfileLength = 1; |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1717 headerProfileLength = 2; |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1718 } |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1719 else |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1720 { |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1721 headerProfileLength = (pHead->profileLength[2] << 16) + (pHead->profileLength[1] << 8) + pHead->profileLength[0]; |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1722 sampleProfileLength = ext_flash_read_profilelength_small_header(sampleProfileStart); |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1723 } |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1724 if(sampleProfileLength != headerProfileLength) |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1725 { |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1726 dummyLength = logbook_fillDummySampleBuffer(pHead); |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1727 |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1728 data2.u32bit = sampleProfileStart + dummyLength; /* calc new end address (which is equal to dummyLength) */ |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1729 data.u32bit = dummyLength; /* data is used below to represent the length */ |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1730 } |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1731 data.u32bit += 3; |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1732 headerOSTC3compact.profileLength[0] = data.u8bit.byteLow; |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1733 headerOSTC3compact.profileLength[1] = data.u8bit.byteMidLow; |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1734 headerOSTC3compact.profileLength[2] = data.u8bit.byteMidHigh; |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1735 |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1736 headerOSTC3compact.dateYear = pHead->dateYear; |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1737 headerOSTC3compact.dateMonth = pHead->dateMonth; |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1738 headerOSTC3compact.dateDay = pHead->dateDay; |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1739 headerOSTC3compact.timeHour = pHead->timeHour; |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1740 headerOSTC3compact.timeMinute = pHead->timeMinute; |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1741 |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1742 memcpy(headerOSTC3compact.maxDepth, &pHead->maxDepth, 2); |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1743 memcpy(headerOSTC3compact.diveTimeMinutes, &pHead->diveTimeMinutes, 2); |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1744 |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1745 headerOSTC3compact.diveTimeSeconds = pHead->diveTimeSeconds; |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1746 headerOSTC3compact.totalDiveNumberLow = pHead->diveNumber & 0xFF; |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1747 headerOSTC3compact.totalDiveNumberHigh = (uint8_t)(pHead->diveNumber/256); |
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1748 headerOSTC3compact.profileVersion = 0x24; // Logbook-Profile version, 0x24 = date and time is start not end |
455
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1749 } |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1750 else |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1751 { |
465
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1752 returnEmptyHeader = 1; |
455
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1753 } |
411
e908b894f107
Bugfix: Limit log length in case of corrupted sample storage:
ideenmodellierer
parents:
325
diff
changeset
|
1754 } |
465
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1755 if(returnEmptyHeader) |
38 | 1756 { |
1757 memset(&headerOSTC3compact, 0xFF, sizeof(SLogbookHeaderOSTC3compact)); | |
1758 } | |
1759 return &headerOSTC3compact; | |
1760 } | |
1761 | |
1762 | |
1763 /** | |
1764 ****************************************************************************** | |
1765 * @brief logbook_readSampleData. / Reads sample data of whole logbook entry | |
281 | 1766 * @author heinrichs weikamp |
38 | 1767 * @version V0.0.1 |
1768 * @date 22-April-2014 | |
1769 ****************************************************************************** | |
1770 * | |
1771 * @param uint8_t StepBackwards: witch lookbook entry? | |
1772 * @param uint16_t length : maxlength of output arrays | |
1773 * @param int32_t* depth : output array | |
1774 * @param int16_t * gasid : output array | |
1775 * @param int32_t* temperature : output array | |
1776 * @param int32_t* ppo2 : output array | |
1777 * @param int32_t* cns : output array | |
1778 * @return length of output | |
1779 */ | |
1780 void logbook_recover_brokenlog(uint8_t headerId) | |
1781 { | |
1782 int16_t retVal; | |
1783 int32_t depthVal = 0; | |
1784 int16_t gasidVal = 0; | |
1785 int16_t setPointVal = 0; | |
1786 int16_t bailoutVal = 0; | |
1787 int32_t temperatureVal = 0; | |
1788 int32_t sensor1Val = 0; | |
1789 int32_t sensor2Val = 0; | |
1790 int32_t sensor3Val = 0; | |
1791 int32_t cnsVal = 0; | |
1792 SManualGas manualGasVal; | |
1793 | |
1794 //uint16_t* ppo2, uint16_t* cns# | |
1795 uint32_t bytesRead = 0; | |
1796 | |
1797 ext_flash_read_block_start(); | |
1798 ext_flash_read_next_sample_part((uint8_t*)&smallHeader, sizeof(SSmallHeader)); | |
1799 bytesRead += sizeof(SSmallHeader); | |
1800 | |
1801 clear_divisor(); | |
1802 | |
1803 | |
1804 int sampleCounter = 0; | |
1805 int maxdepth = 0; | |
1806 uint32_t avrdepth = 0; | |
1807 while (true) | |
1808 { | |
1809 | |
1810 ext_flash_set_entry_point(); | |
1811 divisorBackup = divisor; | |
610 | 1812 retVal = readSample(&depthVal,&gasidVal, &setPointVal, &temperatureVal, &sensor1Val, &sensor2Val, &sensor3Val, &cnsVal, &manualGasVal, &bailoutVal, NULL, NULL, NULL); |
38 | 1813 if(retVal == 0) |
1814 { | |
1815 //Error try to read again!!! | |
1816 ext_flash_reopen_read_sample_at_entry_point(); | |
1817 divisor = divisorBackup; | |
610 | 1818 retVal = readSample(&depthVal,&gasidVal, &setPointVal, &temperatureVal, &sensor1Val, &sensor2Val, &sensor3Val, &cnsVal, &manualGasVal, &bailoutVal, NULL, NULL, NULL); |
38 | 1819 |
1820 if(retVal == 0) | |
1821 { | |
1822 //Error try to read again!!! | |
1823 ext_flash_reopen_read_sample_at_entry_point(); | |
1824 divisor = divisorBackup; | |
610 | 1825 retVal = readSample(&depthVal,&gasidVal, &setPointVal, &temperatureVal, &sensor1Val, &sensor2Val, &sensor3Val, &cnsVal, &manualGasVal, &bailoutVal, NULL, NULL, NULL); |
38 | 1826 |
1827 if(retVal == 0) | |
1828 { | |
1829 ext_flash_reopen_read_sample_at_entry_point(); | |
1830 break; | |
1831 } | |
1832 | |
1833 } | |
1834 } | |
1835 if(depthVal > maxdepth) | |
1836 maxdepth = depthVal; | |
1837 avrdepth += depthVal; | |
1838 sampleCounter++; | |
1839 bytesRead +=retVal; | |
1840 } | |
1841 avrdepth/= sampleCounter; | |
1842 ext_flash_close_read_sample(); | |
1843 SLogbookHeader header; | |
1844 | |
1845 ext_flash_read_dive_header2((uint8_t*) &header, headerId, false); | |
1846 header.total_diveTime_seconds = sampleCounter * header.samplingRate; | |
1847 header.diveTimeMinutes = header.total_diveTime_seconds /60; | |
1848 header.diveTimeSeconds = header.total_diveTime_seconds - header.diveTimeMinutes * 60; | |
1849 header.maxDepth = maxdepth; | |
1850 header.averageDepth_mbar = avrdepth; | |
1851 SSettings * settings = settingsGetPointer(); | |
1852 settings->lastDiveLogId = headerId; | |
1853 ext_flash_close_new_dive_log((uint8_t *)&header); | |
1854 } | |
1855 | |
458 | 1856 void logbook_createDummyProfile(SLogbookHeader* pHeader, uint16_t length, uint16_t* depth, int16_t* temperature, uint16_t* ppo2) |
455
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1857 { |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1858 uint8_t drawDeco = 1; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1859 uint16_t index = 0; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1860 uint16_t indexDescenStop = 0; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1861 uint16_t indexAscendStart = 0; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1862 uint16_t simDecentDepth = 0; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1863 uint16_t simDecentStep = 0; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1864 uint16_t simAcentDepth = 0; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1865 uint16_t simAcentStep = 0; |
458 | 1866 float ambiant_pressure_bar = 0; |
455
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1867 |
458 | 1868 simDecentStep = pHeader->maxDepth / (length / 6); /* first 1/6 for descend */ |
1869 simAcentStep = pHeader->maxDepth / (length / 3); /* first 1/3 for ascend */ | |
1870 | |
1871 SGas gas; | |
1872 | |
455
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1873 |
458 | 1874 if(ppo2) |
1875 { | |
1876 /* find first gas ID */ | |
524
b33a8c1c72e5
Minor: Removed duplicated definition of number of available gases
Ideenmodellierer
parents:
483
diff
changeset
|
1877 for(index = 0; index < NUM_GASES; index++) |
458 | 1878 { |
1879 if(pHeader->gasordil[index].note.ub.first) | |
1880 break; | |
1881 } | |
524
b33a8c1c72e5
Minor: Removed duplicated definition of number of available gases
Ideenmodellierer
parents:
483
diff
changeset
|
1882 if(index != NUM_GASES) |
458 | 1883 { |
1884 gas.helium_percentage = pHeader->gasordil[index].helium_percentage; | |
1885 gas.nitrogen_percentage = 100 - gas.helium_percentage - pHeader->gasordil[index].oxygen_percentage; | |
1886 } | |
1887 } | |
1888 | |
1889 while((index < length) && (simDecentDepth < pHeader->maxDepth)) /* draw decent */ | |
455
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1890 { |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1891 depth[index] = simDecentDepth; |
458 | 1892 temperature[index] = pHeader->minTemp; |
1893 if(ppo2) | |
1894 { | |
1895 ambiant_pressure_bar =((float)(depth[index] + pHeader->surfacePressure_mbar))/1000; | |
1896 ppo2[index] = (uint16_t) ((decom_calc_ppO2(ambiant_pressure_bar, &gas )) * 100); | |
1897 } | |
455
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1898 index++; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1899 simDecentDepth += simDecentStep; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1900 } |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1901 indexDescenStop = index; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1902 index = length -1; |
458 | 1903 while((index > indexDescenStop) && (simAcentDepth < pHeader->maxDepth)) /* draw ascend including max deco stop */ |
455
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1904 { |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1905 depth[index] = simAcentDepth; |
458 | 1906 temperature[index] = pHeader->minTemp; |
1907 if(ppo2) | |
1908 { | |
1909 ambiant_pressure_bar =((float)(depth[index] + pHeader->surfacePressure_mbar))/1000; | |
1910 ppo2[index] = (uint16_t) ((decom_calc_ppO2(ambiant_pressure_bar, &gas )) * 100); | |
1911 } | |
1912 if((drawDeco) && (simAcentDepth < pHeader->lastDecostop_m)) /* draw deco step */ | |
455
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1913 { |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1914 drawDeco = length / 10; |
458 | 1915 while(drawDeco) |
455
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1916 { |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1917 index--; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1918 depth[index] = simAcentDepth; |
458 | 1919 temperature[index] = pHeader->minTemp; |
1920 if(ppo2) | |
1921 { | |
1922 ambiant_pressure_bar =((float)(depth[index] + pHeader->surfacePressure_mbar))/1000; | |
1923 ppo2[index] = (uint16_t) ((decom_calc_ppO2(ambiant_pressure_bar, &gas )) * 100); | |
1924 } | |
1925 drawDeco--; | |
455
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1926 } |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1927 } |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1928 index--; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1929 simAcentDepth += simAcentStep; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1930 } |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1931 indexAscendStart = index; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1932 index = indexDescenStop; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1933 while(index <= indexAscendStart) /* draw isobar dive phase */ |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1934 { |
458 | 1935 depth[index] = pHeader->maxDepth; |
1936 temperature[index] = pHeader->minTemp; | |
1937 if(ppo2) | |
1938 { | |
1939 ambiant_pressure_bar =((float)(depth[index] + pHeader->surfacePressure_mbar))/1000; | |
1940 ppo2[index] = (uint16_t) ((decom_calc_ppO2(ambiant_pressure_bar, &gas )) * 100); | |
1941 } | |
455
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1942 index++; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1943 } |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1944 } |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1945 |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1946 void logbook_resetDummy() |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1947 { |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1948 dummyWriteIdx = 0; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1949 dummyReadIdx = 0; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1950 } |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1951 |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1952 void logbook_writeDummy(void* data, uint16_t length) |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1953 { |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1954 memcpy(&dummyMemoryBuffer[dummyWriteIdx],(uint8_t *)data, length); |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1955 dummyWriteIdx += length; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1956 } |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1957 void logbook_writeDummySample(uint16_t depth, int16_t temperature) |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1958 { |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1959 uint8_t sample[10]; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1960 int length = 0; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1961 |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1962 int i = 0; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1963 for(i = 0; i <10 ;i++) sample[i] = 0; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1964 addU16(sample, depth); |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1965 length += 2; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1966 sample[2] = 0; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1967 length++; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1968 |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1969 if(divisor.temperature == 0) |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1970 { |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1971 divisor.temperature = smallHeader.tempDivisor - 1; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1972 addS16(&sample[length], temperature); |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1973 length += 2; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1974 } |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1975 else |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1976 { |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1977 divisor.temperature--; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1978 } |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1979 |
465
2c2df051e554
Compare profile length from header and sample data to identify valid profiles
ideenmodellierer
parents:
458
diff
changeset
|
1980 logbook_writeDummy((void *) sample,length); |
455
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1981 } |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1982 |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1983 |
458 | 1984 uint16_t logbook_fillDummySampleBuffer(SLogbookHeader* pHeader) |
455
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1985 { |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1986 uint16_t depthArray[DUMMY_SAMPLES]; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1987 int16_t temperatureArray[DUMMY_SAMPLES]; |
458 | 1988 uint16_t ppo2Array[DUMMY_SAMPLES]; |
455
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1989 |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1990 uint16_t index = 0; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1991 uint16_t dummyBufferSize = 0; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1992 uint16_t dummyProfileLength = 0; |
458 | 1993 uint32_t overallSecond = pHeader->diveTimeMinutes * 60 + pHeader->diveTimeSeconds; |
455
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1994 |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1995 logbook_resetDummy(); |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1996 clear_divisor(); |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1997 |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1998 smallDummyHeader.profileLength[0] = 0xFF; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
1999 smallDummyHeader.profileLength[1] = 0xFF; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
2000 smallDummyHeader.profileLength[2] = 0xFF; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
2001 smallDummyHeader.samplingRate_seconds = 2; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
2002 smallDummyHeader.numDivisors = 7; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
2003 |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
2004 smallDummyHeader.tempType = 0; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
2005 smallDummyHeader.tempLength = 2; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
2006 smallDummyHeader.tempDivisor = 6; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
2007 |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
2008 smallDummyHeader.deco_ndlType = 1; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
2009 smallDummyHeader.deco_ndlLength = 2; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
2010 smallDummyHeader.deco_ndlDivisor = 0; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
2011 |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
2012 /* GF in % at actual position */ |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
2013 smallDummyHeader.gfType = 2; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
2014 smallDummyHeader.gfLength = 1; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
2015 smallDummyHeader.gfDivisor = 0; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
2016 |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
2017 /* 3 Sensors: 8bit ppO2 in 0.01bar, 16bit voltage in 0,1mV */ |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
2018 smallDummyHeader.ppo2Type = 3; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
2019 smallDummyHeader.ppo2Length = 9; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
2020 smallDummyHeader.ppo2Divisor = 0; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
2021 |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
2022 /* last 15 stops in minutes (last, second_to_last, ... */ |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
2023 /* last stop depth is defined in header */ |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
2024 smallDummyHeader.decoplanType = 4; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
2025 smallDummyHeader.decoplanLength = 15; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
2026 smallDummyHeader.decoplanDivisor = 0; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
2027 |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
2028 smallDummyHeader.cnsType = 5; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
2029 smallDummyHeader.cnsLength = 2; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
2030 smallDummyHeader.cnsDivisor = 0; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
2031 |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
2032 smallDummyHeader.tankType = 6; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
2033 smallDummyHeader.tankLength = 2; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
2034 smallDummyHeader.tankDivisor = 0; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
2035 |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
2036 if((overallSecond / smallDummyHeader.samplingRate_seconds) > DUMMY_SAMPLES) /* reduce sample interval to keep buffer size */ |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
2037 { |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
2038 smallDummyHeader.samplingRate_seconds = overallSecond / DUMMY_SAMPLES; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
2039 dummyProfileLength = DUMMY_SAMPLES; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
2040 } |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
2041 else |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
2042 { |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
2043 dummyProfileLength = overallSecond / smallDummyHeader.samplingRate_seconds; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
2044 } |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
2045 logbook_writeDummy((void *) &smallDummyHeader,sizeof(smallDummyHeader)); |
458 | 2046 logbook_createDummyProfile(pHeader,dummyProfileLength, depthArray, temperatureArray, ppo2Array ); |
455
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
2047 |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
2048 for (index = 0; index < dummyProfileLength; index++) |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
2049 { |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
2050 logbook_writeDummySample(depthArray[index], temperatureArray[index]); |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
2051 } |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
2052 |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
2053 dummyBufferSize = dummyWriteIdx; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
2054 |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
2055 return dummyBufferSize; /* return size of dummy buffer */ |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
2056 } |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
2057 |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
2058 void logbook_readDummySamples(uint8_t* pTarget, uint16_t length) |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
2059 { |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
2060 memcpy(pTarget,&dummyMemoryBuffer[dummyReadIdx],length); |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
2061 dummyReadIdx += length; |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
2062 } |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
2063 |
928a14568689
Reactivated samples for bottle pressure information:
ideenmodellierer
parents:
445
diff
changeset
|
2064 |
38 | 2065 /************************ (C) COPYRIGHT heinrichs weikamp *****END OF FILE****/ |