Mercurial > public > ostc4
comparison Discovery/Src/logbook_miniLive.c @ 610:ae7f8333c900
Added access to logbook marker data:
In previous version event data could only be stored in memory but read back and usage in the OSTC itself was not supported. After the events like a marker set by the diver may be retrieved from the log.
Added visualization of markers to T3_Profile view
author | Ideenmodellierer |
---|---|
date | Thu, 14 Jan 2021 20:38:28 +0100 |
parents | c56ed16dbd39 |
children | bf574fb3efa0 |
comparison
equal
deleted
inserted
replaced
609:1b243c6c7067 | 610:ae7f8333c900 |
---|---|
42 static uint8_t MLLtickIntervallSeconds = 2; | 42 static uint8_t MLLtickIntervallSeconds = 2; |
43 | 43 |
44 /* Replay Block data storage */ | 44 /* Replay Block data storage */ |
45 #define DEPTH_DATA_LENGTH (1800u) /* Resolution: 1 hours dive, sampling every 2 seconds */ | 45 #define DEPTH_DATA_LENGTH (1800u) /* Resolution: 1 hours dive, sampling every 2 seconds */ |
46 uint16_t ReplayDepthData[DEPTH_DATA_LENGTH]; | 46 uint16_t ReplayDepthData[DEPTH_DATA_LENGTH]; |
47 uint8_t ReplayMarkerData[DEPTH_DATA_LENGTH]; | |
47 uint16_t liveDepthData[DEPTH_DATA_LENGTH]; | 48 uint16_t liveDepthData[DEPTH_DATA_LENGTH]; |
48 uint16_t liveDecoData[DEPTH_DATA_LENGTH]; | 49 uint16_t liveDecoData[DEPTH_DATA_LENGTH]; |
49 static uint16_t lifeDataIndex = 0; | 50 static uint16_t lifeDataIndex = 0; |
50 | 51 |
51 static uint8_t ReplayDataResolution = 2; /* Time represented by one sample (second) */ | 52 static uint8_t ReplayDataResolution = 2; /* Time represented by one sample (second) */ |
67 | 68 |
68 void compressBuffer_uint16(uint16_t* pdata, uint16_t size) | 69 void compressBuffer_uint16(uint16_t* pdata, uint16_t size) |
69 { | 70 { |
70 uint16_t* pTarget = pdata; | 71 uint16_t* pTarget = pdata; |
71 uint16_t* pSource = pdata; | 72 uint16_t* pSource = pdata; |
73 uint16_t result = 0; | |
72 | 74 |
73 uint16_t index = 0; | 75 uint16_t index = 0; |
74 | 76 |
75 for(index = 0; index < size/2; index++) | 77 for(index = 0; index < size/2; index++) |
76 { | 78 { |
77 *pTarget = *pSource++; | 79 *pTarget = *pSource++; |
78 *pTarget += *pSource++; | 80 *pTarget += *pSource++; |
79 *pTarget++ /= 2; | 81 result = *pTarget /= 2; |
82 if((*pTarget != 0) && (result == 0)) /* avoid termination of information by round up to 1 */ | |
83 { | |
84 *pTarget++ = 1; | |
85 } | |
86 else | |
87 { | |
88 *pTarget++ = result; | |
89 } | |
80 } | 90 } |
81 memset(pTarget,0,size/2); | 91 memset(pTarget,0,size/2); |
82 } | 92 } |
83 | 93 |
84 void updateMiniLiveLogbook( _Bool checkOncePerSecond) | 94 void updateMiniLiveLogbook( _Bool checkOncePerSecond) |
184 } | 194 } |
185 | 195 |
186 uint8_t prepareReplayLog(uint8_t StepBackwards) | 196 uint8_t prepareReplayLog(uint8_t StepBackwards) |
187 { | 197 { |
188 uint8_t retVal = 0; | 198 uint8_t retVal = 0; |
199 uint16_t index = 0; | |
189 uint16_t dataLength = 0; | 200 uint16_t dataLength = 0; |
201 uint8_t markerDetected = 0; | |
190 | 202 |
191 SLogbookHeader logbookHeader; | 203 SLogbookHeader logbookHeader; |
192 | 204 |
193 if(ReplayDataOffset == StepBackwards) /* Entry already selected => reset selection */ | 205 if(ReplayDataOffset == StepBackwards) /* Entry already selected => reset selection */ |
194 { | 206 { |
203 else | 215 else |
204 { | 216 { |
205 ReplayDataOffset = StepBackwards; | 217 ReplayDataOffset = StepBackwards; |
206 logbook_getHeader(StepBackwards ,&logbookHeader); | 218 logbook_getHeader(StepBackwards ,&logbookHeader); |
207 | 219 |
208 dataLength = logbook_readSampleData(StepBackwards, DEPTH_DATA_LENGTH, ReplayDepthData,NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); | 220 dataLength = logbook_readSampleData(StepBackwards, DEPTH_DATA_LENGTH, ReplayDepthData,NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, ReplayMarkerData); |
221 | |
222 /* check if a marker is provided. If not disable marker functionality for the replay block */ | |
223 for(index = 0; index < dataLength; index++) | |
224 { | |
225 if(ReplayMarkerData[index] != 0) | |
226 { | |
227 markerDetected = 1; | |
228 break; | |
229 } | |
230 } | |
231 if(markerDetected == 0) | |
232 { | |
233 ReplayMarkerData[0] = 0xFF; | |
234 } | |
209 | 235 |
210 if( dataLength == DEPTH_DATA_LENGTH) /* log data has been compressed to fit into buffer */ | 236 if( dataLength == DEPTH_DATA_LENGTH) /* log data has been compressed to fit into buffer */ |
211 { | 237 { |
212 ReplayDataResolution = (logbookHeader.diveTimeMinutes * 60 + logbookHeader.diveTimeSeconds) / dataLength; | 238 ReplayDataResolution = (logbookHeader.diveTimeMinutes * 60 + logbookHeader.diveTimeSeconds) / dataLength; |
213 } | 239 } |
224 } | 250 } |
225 } | 251 } |
226 return retVal; | 252 return retVal; |
227 } | 253 } |
228 | 254 |
229 uint8_t getReplayInfo(uint16_t** pReplayData, uint16_t* DataLength, uint16_t* MaxDepth, uint16_t* diveMinutes) | 255 uint8_t getReplayInfo(uint16_t** pReplayData, uint8_t** pReplayMarker, uint16_t* DataLength, uint16_t* MaxDepth, uint16_t* diveMinutes) |
230 { | 256 { |
231 uint8_t retVal = 0; | 257 uint8_t retVal = 0; |
232 | 258 |
233 if((ReplayDataOffset != 0xFFFF) && (pReplayData != NULL) && (DataLength != NULL) && (MaxDepth != NULL)) | 259 if((ReplayDataOffset != 0xFFFF) && (pReplayData != NULL) && (DataLength != NULL) && (MaxDepth != NULL) && (pReplayMarker != 0)) |
234 { | 260 { |
235 *pReplayData = ReplayDepthData; | 261 *pReplayData = ReplayDepthData; |
262 *pReplayMarker = ReplayMarkerData; | |
236 *DataLength = ReplayDataLength; | 263 *DataLength = ReplayDataLength; |
237 *MaxDepth = ReplayDataMaxDepth; | 264 *MaxDepth = ReplayDataMaxDepth; |
238 *diveMinutes = ReplayDataMinutes; | 265 *diveMinutes = ReplayDataMinutes; |
239 retVal = 1; | 266 retVal = 1; |
240 } | 267 } |