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