Mercurial > public > ostc4
changeset 1020:b0d3e8b84966 GasConsumption
Fix: Add Missing Compass Heading to the Logbook Reader.
Fix: Add Missing Scrubber State to the Logbook Reader.
author | heinrichsweikamp |
---|---|
date | Fri, 20 Jun 2025 07:59:32 +0200 (2 months ago) |
parents | 67e3dbc4d212 |
children | 92d5e07d1a05 |
files | Discovery/Inc/logbook.h Discovery/Src/logbook.c Discovery/Src/logbook_miniLive.c Discovery/Src/show_logbook.c |
diffstat | 4 files changed, 64 insertions(+), 19 deletions(-) [+] |
line wrap: on
line diff
--- a/Discovery/Inc/logbook.h Mon Jun 09 09:45:21 2025 +0200 +++ b/Discovery/Inc/logbook.h Fri Jun 20 07:59:32 2025 +0200 @@ -212,7 +212,7 @@ uint8_t logbook_getHeader(uint8_t StepBackwards,SLogbookHeader* pLogbookHeader); uint16_t logbook_readSampleData(uint8_t StepBackwards, uint16_t length,uint16_t* depth, uint8_t* gasid, int16_t* temperature, uint16_t* ppo2, uint16_t* setpoint, uint16_t* sensor1, uint16_t* sensor2, uint16_t* sensor3, uint16_t* cns, uint8_t* bailout, - uint16_t* decostopDepth, uint16_t* tank, SGnssCoord* pPosition, uint8_t* event); + uint16_t* decostopDepth, uint16_t* tank, uint16_t* compassHeading, SGnssCoord* pPosition, uint16_t* scrubberState, uint8_t* event); void logbook_test(void); void logbook_InitAndWrite(SDiveState* pStateReal); void logbook_recover_brokenlog(uint8_t headerId);
--- a/Discovery/Src/logbook.c Mon Jun 09 09:45:21 2025 +0200 +++ b/Discovery/Src/logbook.c Fri Jun 20 07:59:32 2025 +0200 @@ -719,7 +719,7 @@ */ static uint16_t readSample(int32_t* depth, int16_t * gasid, int16_t* setpoint_cbar, int32_t* temperature, int32_t* sensor1, int32_t* sensor2, int32_t* sensor3, int32_t* cns, SManualGas* manualGas, int16_t* bailout, int16_t* decostopDepth, uint16_t* tank, - SGnssCoord* pPosition, uint8_t* event) + uint16_t* compassHeading, SGnssCoord* pPosition, uint16_t* scrubberState, uint8_t* event) { int length = 0; _Bool bEvent = 0; @@ -753,6 +753,12 @@ if(tank) *tank = 0; + if (compassHeading) + *compassHeading = UINT16_MAX; + + if (scrubberState) + *scrubberState = UINT16_MAX; + if(manualGas) { manualGas->percentageO2 =-1; @@ -849,6 +855,14 @@ if(gasid) *gasid = 0; } + + // Compass heading + if (eventByte2.ub.bit1) { + ext_flash_read_next_sample_part((uint8_t*)compassHeading, 2); + bytesRead += 2; + length -= 2; + } + /* gnss position start dive */ if(eventByte2.ub.bit2) { @@ -877,6 +891,13 @@ memcpy(&pPosition->fLat, &tempU32, 4); } } + + // Scrubber state + if (eventByte2.ub.bit3) { + ext_flash_read_next_sample_part((uint8_t*)scrubberState, 2); + bytesRead += 2; + length -= 2; + } } if(divisor.temperature == 0) @@ -1019,7 +1040,7 @@ */ uint16_t logbook_readSampleData(uint8_t StepBackwards, uint16_t length,uint16_t* depth, uint8_t* gasid, int16_t* temperature, uint16_t* ppo2, uint16_t* setpoint, uint16_t* sensor1, uint16_t* sensor2, uint16_t* sensor3, uint16_t* cns, uint8_t* bailout, - uint16_t* decostopDepth, uint16_t* tank, SGnssCoord* pPosition, uint8_t* event) + uint16_t* decostopDepth, uint16_t* tank, uint16_t* compassHeading, SGnssCoord* pPosition, uint16_t* scrubberState, uint8_t* event) { //Test read //SLogbookHeader header; @@ -1056,6 +1077,10 @@ uint16_t tankVal = 0; uint32_t small_profileLength = 0; uint8_t eventdata; + uint16_t compassHeadingVal; + uint16_t compassHeadingLast = UINT16_MAX; + uint16_t scrubberStateVal; + uint16_t scrubberStateLast = UINT16_MAX; SGnssCoord posCoord; posCoord.fLat = 0.0; posCoord.fLon = 0.0; @@ -1139,7 +1164,7 @@ ext_flash_set_entry_point(); divisorBackup = divisor; retVal = readSample(&depthVal,&gasidVal, &setPointVal, &temperatureVal, &sensor1Val, &sensor2Val, &sensor3Val, &cnsVal, &manualGasVal, - &bailoutVal, &decostepDepthVal, &tankVal, &posCoord, &eventdata); + &bailoutVal, &decostepDepthVal, &tankVal, &compassHeadingVal, &posCoord, &scrubberStateVal, &eventdata); if(retVal == 0) { @@ -1147,7 +1172,7 @@ ext_flash_reopen_read_sample_at_entry_point(); divisor = divisorBackup; retVal = readSample(&depthVal,&gasidVal,&setPointVal, &temperatureVal, &sensor1Val, &sensor2Val, &sensor3Val, &cnsVal, - &manualGasVal, &bailoutVal, &decostepDepthVal, &tankVal, &posCoord, &eventdata); + &manualGasVal, &bailoutVal, &decostepDepthVal, &tankVal, &compassHeadingVal, &posCoord, &scrubberStateVal, &eventdata); if(retVal == 0) break; @@ -1214,6 +1239,16 @@ else decostepDepthLast = decostepDepthVal; + if (compassHeadingVal == UINT16_MAX) + compassHeadingVal = compassHeadingLast; + else + compassHeadingLast = compassHeadingVal; + + if (scrubberStateVal == UINT16_MAX) + scrubberStateVal = scrubberStateLast; + else + scrubberStateLast = scrubberStateVal; + counter++; // Heed compression // Write here to arrays @@ -1277,6 +1312,13 @@ sensor2[iNum] = (sensor2Val / 0xFFFF) & 0xFF; if(sensor3) sensor3[iNum] = (sensor3Val / 0xFFFF) & 0xFF; + + if (compassHeading) + compassHeading[iNum] = compassHeadingVal; + + if (scrubberState) + scrubberState[iNum] = scrubberStateVal; + iNum++; counter = 0; @@ -1287,6 +1329,7 @@ } } } + if(pPosition) { memcpy(pPosition, &posCoord, sizeof(posCoord)); @@ -1901,7 +1944,9 @@ int16_t decostepDepthVal = 0; uint16_t tankVal = 0; uint8_t eventdata; + uint16_t compassHeadingVal; SGnssCoord posCoord; + uint16_t scrubberStateVal; //uint16_t* ppo2, uint16_t* cns# uint32_t bytesRead = 0; @@ -1922,21 +1967,21 @@ ext_flash_set_entry_point(); divisorBackup = divisor; retVal = readSample(&depthVal,&gasidVal, &setPointVal, &temperatureVal, &sensor1Val, &sensor2Val, &sensor3Val, &cnsVal, &manualGasVal, - &bailoutVal, &decostepDepthVal,&tankVal, &posCoord, &eventdata); + &bailoutVal, &decostepDepthVal, &tankVal, &compassHeadingVal, &posCoord, &scrubberStateVal, &eventdata); if(retVal == 0) { //Error try to read again!!! ext_flash_reopen_read_sample_at_entry_point(); divisor = divisorBackup; retVal = readSample(&depthVal,&gasidVal, &setPointVal, &temperatureVal, &sensor1Val, &sensor2Val, &sensor3Val, &cnsVal, &manualGasVal, - &bailoutVal, &decostepDepthVal, &tankVal, &posCoord, &eventdata); + &bailoutVal, &decostepDepthVal, &tankVal, &compassHeadingVal, &posCoord, &scrubberStateVal, &eventdata); if(retVal == 0) { //Error try to read again!!! ext_flash_reopen_read_sample_at_entry_point(); divisor = divisorBackup; retVal = readSample(&depthVal,&gasidVal, &setPointVal, &temperatureVal, &sensor1Val, &sensor2Val, &sensor3Val, &cnsVal, &manualGasVal, - &bailoutVal, &decostepDepthVal,&tankVal, &posCoord, &eventdata); + &bailoutVal, &decostepDepthVal, &tankVal, &compassHeadingVal, &posCoord, &scrubberStateVal, &eventdata); if(retVal == 0) { ext_flash_reopen_read_sample_at_entry_point();
--- a/Discovery/Src/logbook_miniLive.c Mon Jun 09 09:45:21 2025 +0200 +++ b/Discovery/Src/logbook_miniLive.c Fri Jun 20 07:59:32 2025 +0200 @@ -367,7 +367,7 @@ ReplayDataOffset = StepBackwards; logbook_getHeader(StepBackwards ,&logbookHeader); - dataLength = logbook_readSampleData(StepBackwards, DEPTH_DATA_LENGTH, ReplayDepthData,NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, ReplayMarkerData); + dataLength = logbook_readSampleData(StepBackwards, DEPTH_DATA_LENGTH, ReplayDepthData,NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, ReplayMarkerData); /* check if a marker is provided. If not disable marker functionality for the replay block */ for(index = 0; index < dataLength; index++)
--- a/Discovery/Src/show_logbook.c Mon Jun 09 09:45:21 2025 +0200 +++ b/Discovery/Src/show_logbook.c Fri Jun 20 07:59:32 2025 +0200 @@ -455,7 +455,7 @@ #endif uint16_t dataLength = 0; - dataLength = logbook_readSampleData(StepBackwards, 1000, depthdata,gasdata, tempdata, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, tankdata, &posCoord, NULL); + dataLength = logbook_readSampleData(StepBackwards, 1000, depthdata,gasdata, tempdata, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, tankdata, NULL, &posCoord, NULL, NULL); //Print Date uint8_t year = logbookHeader.dateYear; @@ -752,7 +752,7 @@ uint16_t decoDepthdata[1000]; uint16_t *pDecoDepthData = 0; - dataLength = logbook_readSampleData(StepBackwards, 1000, depthdata,gasdata, tempdata, NULL, NULL, NULL, NULL, NULL, NULL, NULL, decoDepthdata, NULL, NULL, NULL); + dataLength = logbook_readSampleData(StepBackwards, 1000, depthdata,gasdata, tempdata, NULL, NULL, NULL, NULL, NULL, NULL, NULL, decoDepthdata, NULL, NULL, NULL, NULL, NULL); for(int i = 0; i<dataLength; i++) { @@ -918,7 +918,7 @@ uint16_t dataLength = 0; uint16_t depthdata[1000]; uint8_t gasdata[1000]; - dataLength = logbook_readSampleData(StepBackwards, 1000, depthdata,gasdata, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); + dataLength = logbook_readSampleData(StepBackwards, 1000, depthdata,gasdata, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); char msg[MSG_LENGTH]; char gas_name[15]; @@ -1048,15 +1048,15 @@ if(!isLoopMode(logbookHeader.diveMode)) - dataLength = logbook_readSampleData(StepBackwards, 1000, depthdata,gasdata, NULL, ppO2data, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); + dataLength = logbook_readSampleData(StepBackwards, 1000, depthdata,gasdata, NULL, ppO2data, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); else { switch(logbookHeader.CCRmode) { case CCRMODE_FixedSetpoint: - default: dataLength = logbook_readSampleData(StepBackwards, 1000, depthdata, gasdata, NULL, NULL, setpoint, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); + default: dataLength = logbook_readSampleData(StepBackwards, 1000, depthdata, gasdata, NULL, NULL, setpoint, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); break; - case CCRMODE_Sensors: dataLength = logbook_readSampleData(StepBackwards, 1000, depthdata, gasdata, NULL, NULL, NULL, sensor1, sensor2, sensor3, NULL, NULL, NULL, NULL, NULL, NULL); + case CCRMODE_Sensors: dataLength = logbook_readSampleData(StepBackwards, 1000, depthdata, gasdata, NULL, NULL, NULL, sensor1, sensor2, sensor3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); if(!check_data_array_empty(sensor1)) { sensorDataAvailable[0] = 1; @@ -1073,22 +1073,22 @@ { if(sensorDataAvailable[0] == 0) { - logbook_readSampleData(StepBackwards, 1000, depthdata,gasdata, NULL, sensor1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); + logbook_readSampleData(StepBackwards, 1000, depthdata,gasdata, NULL, sensor1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); sensorDataAvailable[0] = 1; } else if(sensorDataAvailable[1] == 0) { - logbook_readSampleData(StepBackwards, 1000, depthdata,gasdata, NULL, sensor2, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); + logbook_readSampleData(StepBackwards, 1000, depthdata,gasdata, NULL, sensor2, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); sensorDataAvailable[1] = 1; } else if(sensorDataAvailable[2] == 0) { - logbook_readSampleData(StepBackwards, 1000, depthdata,gasdata, NULL, sensor3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); + logbook_readSampleData(StepBackwards, 1000, depthdata,gasdata, NULL, sensor3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); sensorDataAvailable[2] = 1; } } break; - case CCRMODE_Simulation: dataLength = logbook_readSampleData(StepBackwards, 1000, depthdata,gasdata, NULL, ppO2data, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); + case CCRMODE_Simulation: dataLength = logbook_readSampleData(StepBackwards, 1000, depthdata,gasdata, NULL, ppO2data, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); break; } }