Mercurial > public > ostc4
view Discovery/Src/logbook_miniLive.c @ 411:e908b894f107 Improment_NVM
Bugfix: Limit log length in case of corrupted sample storage:
In case of a sample address reset the header would have a smaler end address as the start address. As result the length becomes very long and download e.g. via Subsurface, would seem to hang. To solve this the number of sample bytes in this use case has been limited. Tested with subsurface only. After change dowload of logs is possible again. Nevertheless the sampledata will be lost.
Minor change: "header" was used as global as well as as local variable => changed name for global variant to gheader.
author | ideenmodellierer |
---|---|
date | Mon, 13 Jan 2020 20:27:57 +0100 |
parents | 5ca177d2df5d |
children | 0a3836643173 |
line wrap: on
line source
/** ****************************************************************************** * @copyright heinrichs weikamp * @file logbook_miniLive.c * @author heinrichs weikamp gmbh * @date 13-March-2015 * @version V0.0.1 * @since 13-March-2015 * @brief little logbook for during the dive * @bug * @warning ****************************************************************************** * @attention * * <h2><center>© COPYRIGHT(c) 2015 heinrichs weikamp</center></h2> * ****************************************************************************** */ /* Includes ------------------------------------------------------------------*/ #include "logbook_miniLive.h" #include "data_exchange.h" /* ****************************************************************************** * @brief t7_updateMiniLiveLogbook. / Create depth samples for view during dive * @author heinrichs weikamp gmbh * @version V0.0.1 * @date 13-March-2015 ****************************************************************************** * */ #define MLLsize (296) static uint16_t MLLdataDepth[MLLsize]; static uint16_t MLLpointer = 0; static uint8_t MLLtickIntervallSeconds = 2; uint16_t *getMiniLiveLogbookPointerToData(void) { return MLLdataDepth; } uint16_t getMiniLiveLogbookActualDataLength(void) { return MLLpointer; } void updateMiniLiveLogbook( _Bool checkOncePerSecond) { static uint8_t bDiveMode = 0; static uint32_t last_second = 0; static uint8_t secondsCount = 0; if(checkOncePerSecond) { uint32_t now = current_second(); if( last_second == now) return; last_second = now; } secondsCount++; if(!bDiveMode) { if((stateUsed->mode == MODE_DIVE) && (stateUsed->lifeData.dive_time_seconds >= 5)) { secondsCount = 0; MLLtickIntervallSeconds = 2; bDiveMode = 1; MLLpointer = 1; for(int i=0;i<MLLsize;i++) MLLdataDepth[i] = 0; } } else if(stateUsed->mode == MODE_DIVE) { bDiveMode = 3; // if(secondsCount >= MLLtickIntervallSeconds) { secondsCount = 0; if((MLLpointer >= MLLsize) && (MLLtickIntervallSeconds < 127)) { MLLpointer = 0; MLLtickIntervallSeconds *= 2; for(int i=0;i<MLLsize/2;i++) { MLLdataDepth[i] = MLLdataDepth[MLLpointer++]; MLLdataDepth[i] += MLLdataDepth[MLLpointer++]; MLLdataDepth[i] /= 2; } MLLpointer = MLLsize/2; for(int i=MLLsize/2;i<MLLsize;i++) MLLdataDepth[i] = 0; } if(MLLpointer < MLLsize) MLLdataDepth[MLLpointer++] = (int)(stateUsed->lifeData.depth_meter * 10); } } else if(bDiveMode == 3) { //End of Dive for(int i=0;i<MLLsize;i++) MLLdataDepth[i] = 0; bDiveMode = 0; } } /************************ (C) COPYRIGHT heinrichs weikamp *****END OF FILE****/