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;
         	}
         }