diff Discovery/Src/logbook.c @ 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
parents 8c0134a287da
children 158100a84ebd
line wrap: on
line diff
--- 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();