Mercurial > public > ostc4
comparison Discovery/Src/t3.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 | beeb23d18443 |
comparison
equal
deleted
inserted
replaced
609:1b243c6c7067 | 610:ae7f8333c900 |
---|---|
178 { | 178 { |
179 t3_selection_customview = selectedCustomview; | 179 t3_selection_customview = selectedCustomview; |
180 } | 180 } |
181 } | 181 } |
182 | 182 |
183 void t3_drawMarker(GFX_DrawCfgScreen *hgfx, const SWindowGimpStyle *window, uint8_t *data, uint16_t datalength, uint8_t color) | |
184 { | |
185 uint16_t line = 0; | |
186 uint16_t dataIndex = 0; | |
187 uint16_t lastDataIndex = 0; | |
188 uint16_t windowWidth = 0; | |
189 int16_t factor = 0; | |
190 uint8_t setMarker = 0; | |
191 | |
192 point_t start; | |
193 point_t stop; | |
194 | |
195 | |
196 if( (window->bottom <= 479) | |
197 && (window->top <= 479) | |
198 && (window->right <= 799) | |
199 && (window->left <= 799) | |
200 && (window->right >= 0) | |
201 && (window->left >= 0) | |
202 && (window->bottom > window->top) | |
203 && (window->right > window->left)) | |
204 { | |
205 windowWidth = window->right - window->left; | |
206 if(settingsGetPointer()->FlipDisplay) | |
207 { | |
208 start.y = window->bottom; | |
209 stop.y = window->top; | |
210 } | |
211 else | |
212 { | |
213 start.y = 479 - window->bottom; | |
214 stop.y = 479 - window->top; | |
215 } | |
216 | |
217 while((line <= windowWidth) && (dataIndex < datalength)) | |
218 { | |
219 factor = (10 * line * (long)datalength)/windowWidth; | |
220 dataIndex = factor/10; | |
221 /* check if a marker is set in the intervall which is bypassed because of data reduction */ | |
222 setMarker = 0; | |
223 while(lastDataIndex <= dataIndex) | |
224 { | |
225 lastDataIndex++; | |
226 if(data[lastDataIndex] != 0) | |
227 { | |
228 setMarker = 1; | |
229 break; | |
230 } | |
231 } | |
232 lastDataIndex = dataIndex; | |
233 int rest = factor - dataIndex*10; | |
234 if(rest >= 5) | |
235 dataIndex++; | |
236 | |
237 if((datalength - 1) < dataIndex) | |
238 dataIndex = datalength-1; | |
239 | |
240 if((line > 0) && (setMarker)) /* draw marker line */ | |
241 { | |
242 start.x = line; | |
243 stop.x = line; | |
244 GFX_draw_line(hgfx, start, stop, color); | |
245 } | |
246 line++; | |
247 dataIndex++; | |
248 } | |
249 } | |
250 } | |
251 | |
183 void t3_miniLiveLogProfile(void) | 252 void t3_miniLiveLogProfile(void) |
184 { | 253 { |
185 SWindowGimpStyle wintemp; | 254 SWindowGimpStyle wintemp; |
186 uint16_t replayDataLength = 0; | 255 uint16_t replayDataLength = 0; |
187 uint16_t liveDataLength = 0; | 256 uint16_t liveDataLength = 0; |
188 uint16_t drawDataLength = 0; | 257 uint16_t drawDataLength = 0; |
189 uint16_t* pReplayData; | 258 uint16_t* pReplayData; |
259 uint8_t* pReplayMarker; | |
190 uint16_t max_depth = 10; | 260 uint16_t max_depth = 10; |
191 char text[TEXTSIZE]; | 261 char text[TEXTSIZE]; |
192 point_t start, stop; | 262 point_t start, stop; |
193 uint16_t diveMinutes = 0; | 263 uint16_t diveMinutes = 0; |
194 | 264 |
204 | 274 |
205 GFX_draw_line(&t3screen, start, stop, CLUT_Font020); | 275 GFX_draw_line(&t3screen, start, stop, CLUT_Font020); |
206 | 276 |
207 if(getReplayOffset() != 0xFFFF) | 277 if(getReplayOffset() != 0xFFFF) |
208 { | 278 { |
209 getReplayInfo(&pReplayData, &replayDataLength, &max_depth, &diveMinutes); | 279 getReplayInfo(&pReplayData, &pReplayMarker, &replayDataLength, &max_depth, &diveMinutes); |
210 } | 280 } |
211 | 281 |
212 if(max_depth < (uint16_t)(stateUsed->lifeData.max_depth_meter * 100)) | 282 if(max_depth < (uint16_t)(stateUsed->lifeData.max_depth_meter * 100)) |
213 { | 283 { |
214 max_depth = (uint16_t)(stateUsed->lifeData.max_depth_meter * 100); | 284 max_depth = (uint16_t)(stateUsed->lifeData.max_depth_meter * 100); |
240 GFX_write_string(&FontT42,&t3c1,text,0); | 310 GFX_write_string(&FontT42,&t3c1,text,0); |
241 | 311 |
242 if(replayDataLength != 0) | 312 if(replayDataLength != 0) |
243 { | 313 { |
244 GFX_graph_print(&t3screen, &wintemp, 0,1,0, max_depth, pReplayData, drawDataLength, CLUT_Font031, NULL); | 314 GFX_graph_print(&t3screen, &wintemp, 0,1,0, max_depth, pReplayData, drawDataLength, CLUT_Font031, NULL); |
315 if(pReplayMarker[0] != 0xFF) | |
316 { | |
317 t3_drawMarker(&t3screen, &wintemp, pReplayMarker, drawDataLength, CLUT_CompassUserHeadingTick); | |
318 } | |
245 } | 319 } |
246 | 320 |
247 if(liveDataLength > 3) | 321 if(liveDataLength > 3) |
248 { | 322 { |
249 GFX_graph_print(&t3screen,&wintemp,wintemp.top * -1,1,0,max_depth, getMiniLiveDecoPointerToData(),drawDataLength, CLUT_NiceGreen, NULL); | 323 GFX_graph_print(&t3screen,&wintemp,wintemp.top * -1,1,0,max_depth, getMiniLiveDecoPointerToData(),drawDataLength, CLUT_NiceGreen, NULL); |