# HG changeset patch # User Ideenmodellierer # Date 1609875301 -3600 # Node ID 2cb0a97a07ad02273437ce76901f0ec05c7d285c # Parent 7ef2d310287dda78e6598845e3c7ca8c7eef68c1 Added replay data scaling in case life data is longer than replay block Minor: variable name changes diff -r 7ef2d310287d -r 2cb0a97a07ad Discovery/Src/logbook_miniLive.c --- a/Discovery/Src/logbook_miniLive.c Mon Jan 04 22:49:07 2021 +0100 +++ b/Discovery/Src/logbook_miniLive.c Tue Jan 05 20:35:01 2021 +0100 @@ -41,10 +41,10 @@ static uint8_t MLLtickIntervallSeconds = 2; /* Replay Block data storage */ -#define DEPTH_DATA_LENGTH (1800u) /* Resolution: 5 hours dive, sampling every 10 seconds */ -uint16_t depthdata[DEPTH_DATA_LENGTH]; -uint16_t livedepthdata[DEPTH_DATA_LENGTH * 2]; -static uint16_t historyIndex = 0; +#define DEPTH_DATA_LENGTH (1800u) /* Resolution: 1 hours dive, sampling every 2 seconds */ +uint16_t ReplayDepthData[DEPTH_DATA_LENGTH]; +uint16_t liveDepthData[DEPTH_DATA_LENGTH]; +static uint16_t lifeDataIndex = 0; static uint8_t ReplayDataResolution = 2; /* Time represented by one sample (second) */ static uint16_t ReplayDataLength = 0; /* Number of data entries */ @@ -84,7 +84,7 @@ static uint8_t bDiveMode = 0; static uint32_t last_second = 0; static uint8_t secondsCount = 0; - static uint8_t historysecondsCount = 0; + static uint8_t lifesecondsCount = 0; if(checkOncePerSecond) { @@ -94,7 +94,7 @@ last_second = now; } secondsCount++; - historysecondsCount++; + lifesecondsCount++; if(!bDiveMode) { @@ -107,13 +107,13 @@ for(int i=0;imode == MODE_DIVE) @@ -135,17 +135,18 @@ if(MLLpointer < MLLsize) MLLdataDepth[MLLpointer++] = (int)(stateUsed->lifeData.depth_meter * 10); } - if(historysecondsCount > ReplayDataResolution) + if(lifesecondsCount >= ReplayDataResolution) { - historysecondsCount = 0; + lifesecondsCount = 0; - if(historyIndex >= 2*DEPTH_DATA_LENGTH) /* compress data */ + if(lifeDataIndex >= DEPTH_DATA_LENGTH) /* compress data */ { ReplayDataResolution *= 2; - compressBuffer_uint16(livedepthdata,2*DEPTH_DATA_LENGTH); - historyIndex = DEPTH_DATA_LENGTH; + compressBuffer_uint16(liveDepthData,DEPTH_DATA_LENGTH); + compressBuffer_uint16(ReplayDepthData,DEPTH_DATA_LENGTH); /* also compress Replay data to siplify mapping between live and replay data */ + lifeDataIndex = DEPTH_DATA_LENGTH / 2; } - livedepthdata[historyIndex++] = (int)(stateUsed->lifeData.depth_meter * 100); + liveDepthData[lifeDataIndex++] = (int)(stateUsed->lifeData.depth_meter * 100); } } else if(bDiveMode == 3) @@ -168,6 +169,10 @@ { ReplayDataOffset = 0xFFFF; ReplayDataResolution = 2; + ReplayDataLength = 0; + ReplayDataMaxDepth = 0; + ReplayDataMinutes = 0; + retVal = 1; } else @@ -175,7 +180,7 @@ ReplayDataOffset = StepBackwards; logbook_getHeader(StepBackwards ,&logbookHeader); - dataLength = logbook_readSampleData(StepBackwards, DEPTH_DATA_LENGTH, depthdata,NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); + dataLength = logbook_readSampleData(StepBackwards, DEPTH_DATA_LENGTH, ReplayDepthData,NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); if( dataLength == DEPTH_DATA_LENGTH) /* log data has been compressed to fit into buffer */ { @@ -202,7 +207,7 @@ if((ReplayDataOffset != 0xFFFF) && (pReplayData != NULL) && (DataLength != NULL) && (MaxDepth != NULL)) { - *pReplayData = depthdata; + *pReplayData = ReplayDepthData; *DataLength = ReplayDataLength; *MaxDepth = ReplayDataMaxDepth; *diveMinutes = ReplayDataMinutes; @@ -214,11 +219,11 @@ uint16_t *getMiniLiveReplayPointerToData(void) { - return livedepthdata; + return liveDepthData; } uint16_t getMiniLiveReplayLength(void) { - return historyIndex; + return lifeDataIndex; } uint16_t getReplayOffset(void) diff -r 7ef2d310287d -r 2cb0a97a07ad Discovery/Src/t3.c --- a/Discovery/Src/t3.c Mon Jan 04 22:49:07 2021 +0100 +++ b/Discovery/Src/t3.c Tue Jan 05 20:35:01 2021 +0100 @@ -183,13 +183,13 @@ void t3_miniLiveLogProfile(void) { SWindowGimpStyle wintemp; - uint16_t datalength = 0; + uint16_t replayDataLength = 0; + uint16_t liveDataLength = 0; + uint16_t drawDataLength = 0; uint16_t* pReplayData; uint16_t max_depth = 10; char text[TEXTSIZE]; point_t start, stop; - uint8_t doNotDrawLifeData = 0; - uint16_t diveMinutes = 0; wintemp.left = t3c1.WindowX0; @@ -206,32 +206,30 @@ if(getReplayOffset() != 0xFFFF) { - getReplayInfo(&pReplayData, &datalength, &max_depth, &diveMinutes); + getReplayInfo(&pReplayData, &replayDataLength, &max_depth, &diveMinutes); } if(max_depth < (uint16_t)(stateUsed->lifeData.max_depth_meter * 100)) { max_depth = (uint16_t)(stateUsed->lifeData.max_depth_meter * 100); } - if(datalength != 0) - { - GFX_graph_print(&t3screen, &wintemp, 0,1,0, max_depth, pReplayData, datalength, CLUT_Font031, NULL); - } - else + + liveDataLength = getMiniLiveReplayLength(); + + if(replayDataLength > liveDataLength) + { + drawDataLength = replayDataLength; + } + else + { + drawDataLength = liveDataLength; + } + + if(drawDataLength < CV_PROFILE_WIDTH) { - datalength = getMiniLiveReplayLength(); - if(datalength < CV_PROFILE_WIDTH) - { - if(datalength < 3) /* wait for some data entries to start graph */ - { - doNotDrawLifeData = 1; - } - datalength = CV_PROFILE_WIDTH; - } - diveMinutes = 0; /* do not show divetime because it is already shown in the upper field */ + drawDataLength = CV_PROFILE_WIDTH; } - if(diveMinutes != 0) { snprintf(text,TEXTSIZE,"\002%dmin",diveMinutes); @@ -241,9 +239,14 @@ snprintf(text,TEXTSIZE,"\002%01.1fm", max_depth / 100.0); GFX_write_string(&FontT42,&t3c1,text,0); - if(!doNotDrawLifeData) + if(replayDataLength != 0) + { + GFX_graph_print(&t3screen, &wintemp, 0,1,0, max_depth, pReplayData, drawDataLength, CLUT_Font031, NULL); + } + + if(liveDataLength > 3) { - GFX_graph_print(&t3screen, &wintemp, 0,1,0, max_depth, getMiniLiveReplayPointerToData(), datalength, CLUT_Font030, NULL); + GFX_graph_print(&t3screen, &wintemp, 0,1,0, max_depth, getMiniLiveReplayPointerToData(), drawDataLength, CLUT_Font030, NULL); } }