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