diff Discovery/Src/tMenuEditGasOC.c @ 528:a9c195be907e

Added new option to gas configuration: "Off": Added functionality needed to handle the new state
author Ideenmodellierer
date Sun, 13 Sep 2020 20:59:38 +0200
parents 3f09b283d993
children 15f6f0b5786c
line wrap: on
line diff
--- a/Discovery/Src/tMenuEditGasOC.c	Sun Sep 13 20:58:37 2020 +0200
+++ b/Discovery/Src/tMenuEditGasOC.c	Sun Sep 13 20:59:38 2020 +0200
@@ -33,6 +33,7 @@
 #include "gfx_fonts.h"
 #include "tMenuEdit.h"
 #include "unit.h"
+#include "configuration.h"
 
 /* Private types -------------------------------------------------------------*/
 typedef struct
@@ -71,6 +72,7 @@
 uint8_t OnAction_Deco			(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);
 uint8_t OnAction_Travel			(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);
 uint8_t OnAction_Inactive		(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);
+uint8_t OnAction_Off			(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);
 
 uint8_t OnAction_DM_Active		(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);
 uint8_t OnAction_DM_Mix			(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);
@@ -155,6 +157,12 @@
         setpoint = 0;
     }
 
+#ifdef ENABLE_UNUSED_GAS_HIDING
+    if(editGasPage.pGasLine[editGasPage.gasID].note.ub.off)		/* disable selection of switched off gases */
+    {
+    	return;
+    }
+#endif
     for(int i=0;i<(1+ (2*NUM_GASES));i++)
         editGasPage.pGasLine[i].note.ub.first = 0;
 
@@ -336,7 +344,7 @@
 /* surface mode */
 void openEdit_Gas(uint8_t line, uint8_t ccr)
 {
-    uint8_t gasID, oxygen, helium, depthDeco, active, first, depthMOD, deco, travel, inactive;//, bottleSizeLiter;
+    uint8_t gasID, oxygen, helium, depthDeco, active, first, depthMOD, deco, travel, inactive, off;//, bottleSizeLiter;
 
     char text[32];
     char textMOD[32];
@@ -374,7 +382,7 @@
     first = editGasPage.pGasLine[gasID].note.ub.first;
     deco = editGasPage.pGasLine[gasID].note.ub.deco;
     travel = editGasPage.pGasLine[gasID].note.ub.travel;
-
+    off = editGasPage.pGasLine[gasID].note.ub.off;
     //bottleSizeLiter = editGasPage.pGasLine[gasID].bottle_size_liter;
 
     if(active)
@@ -411,6 +419,9 @@
 
 
         text[1] = 0;
+        if(off)
+        	text[0] = TXT_Off;
+        else
         if(inactive)
             text[0] = TXT_Inactive;
         else
@@ -423,7 +434,7 @@
         if(travel)
             text[0] = TXT_Travel;
         else
-            text[0] = TXT_Inactive;
+        	text[0] = TXT_Inactive;
 
         write_field_button(StMOG_GasType,	20, 710, ME_Y_LINE2, &FontT48, text);
 
@@ -453,7 +464,7 @@
         else
         {
             txtptr = 0;
-            text[txtptr++] = '\021';
+            text[txtptr++] = '\031';
             text[txtptr++] = TXT_ChangeDepth;
             text[txtptr++] = ' ';
             text[txtptr++] = TXT_Deco;
@@ -461,7 +472,7 @@
             write_label_var(  20 ,800, ME_Y_LINE3, &FontT48, text);
 
             txtptr = 0;
-            text[txtptr++] = '\021';
+            text[txtptr++] = '\031';
             text[txtptr++] = TXT_2BYTE;
             text[txtptr++] = TXT2BYTE_SetToMOD;
             text[txtptr++] = 0;
@@ -510,7 +521,7 @@
 /* surface mode */
 void openEdit_GasType(void)
 {
-    uint8_t gasID, active, first, deco, travel, inactive;
+    uint8_t gasID, active, first, deco, travel, inactive, off;
     char text[32];
 
 
@@ -530,8 +541,9 @@
     first = editGasPage.pGasLine[gasID].note.ub.first;
     deco = editGasPage.pGasLine[gasID].note.ub.deco;
     travel = editGasPage.pGasLine[gasID].note.ub.travel;
+    off = editGasPage.pGasLine[gasID].note.ub.off;
 
-    if(active)
+    if((active) || (off))
         inactive = 0;
     else
         inactive = 1;
@@ -571,10 +583,18 @@
     text[0] = TXT_Inactive;
     write_field_on_off(StMOG_Inactive,  30, 400, ME_Y_LINE4, &FontT48, text, inactive);
 
+#ifdef ENABLE_UNUSED_GAS_HIDING
+    text[0] = TXT_Off;
+    write_field_on_off(StMOG_Off,  30, 400, ME_Y_LINE5, &FontT48, text, off);
+#endif
+
     setEvent(StMOG_First,               (uint32_t)OnAction_First);
     setEvent(StMOG_Deco,                (uint32_t)OnAction_Deco);
     setEvent(StMOG_Travel,				(uint32_t)OnAction_Travel);
     setEvent(StMOG_Inactive,			(uint32_t)OnAction_Inactive);
+#ifdef ENABLE_UNUSED_GAS_HIDING
+    setEvent(StMOG_Off,			(uint32_t)OnAction_Off);
+#endif
 
     write_buttonTextline(TXT2BYTE_ButtonBack,TXT2BYTE_ButtonEnter,TXT2BYTE_ButtonNext);
 }
@@ -802,6 +822,7 @@
     editGasPage.pGasLine[editGasPage.gasID].note.ub.active = 1;
     editGasPage.pGasLine[editGasPage.gasID].note.ub.deco = 0;
     editGasPage.pGasLine[editGasPage.gasID].note.ub.travel = 0;
+    editGasPage.pGasLine[editGasPage.gasID].note.ub.off = 0;
     editGasPage.pGasLine[editGasPage.gasID].depth_meter = 0;
     editGasPage.pGasLine[editGasPage.gasID].depth_meter_travel = 0;
 
@@ -809,6 +830,9 @@
     tMenuEdit_set_on_off(StMOG_Deco, 0);
     tMenuEdit_set_on_off(StMOG_Travel, 0);
     tMenuEdit_set_on_off(StMOG_Inactive, 0);
+#ifdef ENABLE_UNUSED_GAS_HIDING
+    tMenuEdit_set_on_off(StMOG_Off, 0);
+#endif
 
     if(!first)
         return UPDATE_DIVESETTINGS;
@@ -848,6 +872,7 @@
     editGasPage.pGasLine[editGasPage.gasID].note.ub.active = 1;
     editGasPage.pGasLine[editGasPage.gasID].note.ub.deco = 1;
     editGasPage.pGasLine[editGasPage.gasID].note.ub.travel = 0;
+    editGasPage.pGasLine[editGasPage.gasID].note.ub.off = 0;
     editGasPage.pGasLine[editGasPage.gasID].depth_meter_travel = 0;
     editGasPage.mod = calc_MOD(editGasPage.gasID);
     editGasPage.pGasLine[editGasPage.gasID].depth_meter = editGasPage.mod;
@@ -864,6 +889,9 @@
     tMenuEdit_set_on_off(StMOG_Deco, 1);
     tMenuEdit_set_on_off(StMOG_Travel, 0);
     tMenuEdit_set_on_off(StMOG_Inactive, 0);
+#ifdef ENABLE_UNUSED_GAS_HIDING
+    tMenuEdit_set_on_off(StMOG_Off, 0);
+#endif
 
     if(!deco)
         return UPDATE_DIVESETTINGS;
@@ -903,6 +931,7 @@
     editGasPage.pGasLine[editGasPage.gasID].note.ub.active = 1;
     editGasPage.pGasLine[editGasPage.gasID].note.ub.deco = 0;
     editGasPage.pGasLine[editGasPage.gasID].note.ub.travel = 1;
+    editGasPage.pGasLine[editGasPage.gasID].note.ub.off = 0;
     editGasPage.pGasLine[editGasPage.gasID].depth_meter = 0;
     editGasPage.pGasLine[editGasPage.gasID].depth_meter_travel = 0;
 
@@ -910,6 +939,9 @@
     tMenuEdit_set_on_off(StMOG_Deco, 0);
     tMenuEdit_set_on_off(StMOG_Travel, 1);
     tMenuEdit_set_on_off(StMOG_Inactive, 0);
+#ifdef ENABLE_UNUSED_GAS_HIDING
+    tMenuEdit_set_on_off(StMOG_Off, 0);
+#endif
 
     if(!travel)
         return UPDATE_DIVESETTINGS;
@@ -953,18 +985,66 @@
     editGasPage.pGasLine[editGasPage.gasID].note.ub.active = 0;
     editGasPage.pGasLine[editGasPage.gasID].note.ub.deco = 0;
     editGasPage.pGasLine[editGasPage.gasID].note.ub.travel = 0;
+    editGasPage.pGasLine[editGasPage.gasID].note.ub.off = 0;
 
     tMenuEdit_set_on_off(StMOG_First, 0);
     tMenuEdit_set_on_off(StMOG_Deco, 0);
     tMenuEdit_set_on_off(StMOG_Travel, 0);
     tMenuEdit_set_on_off(StMOG_Inactive, 1);
-
+#ifdef ENABLE_UNUSED_GAS_HIDING
+    tMenuEdit_set_on_off(StMOG_Off, 0);
+#endif
     if(!inactive)
         return UPDATE_DIVESETTINGS;
     else
         return UPDATE_AND_EXIT_TO_MENU;
 }
 
+uint8_t OnAction_Off			(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action)
+{
+    uint8_t first, off, gasOne;
+
+    if(editGasPage.ccr)
+        gasOne = 1 + NUM_OFFSET_DILUENT;
+    else
+        gasOne = 1;
+
+    first = editGasPage.pGasLine[editGasPage.gasID].note.ub.first;
+    off =editGasPage.pGasLine[editGasPage.gasID].note.ub.off;
+
+    if(first)
+    {
+        if(editGasPage.gasID == gasOne)
+            return UNSPECIFIC_RETURN;
+        else
+        {
+            editGasPage.pGasLine[gasOne].note.ub.first = 1;
+            editGasPage.pGasLine[gasOne].note.ub.active = 1;
+            editGasPage.pGasLine[gasOne].note.ub.deco = 0;
+            editGasPage.pGasLine[gasOne].note.ub.travel = 0;
+            editGasPage.pGasLine[gasOne].depth_meter = 0;
+            editGasPage.pGasLine[gasOne].depth_meter_travel = 0;
+        }
+    }
+
+    editGasPage.pGasLine[editGasPage.gasID].note.ub.first = 0;
+    editGasPage.pGasLine[editGasPage.gasID].note.ub.active = 0;
+    editGasPage.pGasLine[editGasPage.gasID].note.ub.deco = 0;
+    editGasPage.pGasLine[editGasPage.gasID].note.ub.travel = 0;
+    editGasPage.pGasLine[editGasPage.gasID].note.ub.off = 1;
+
+    tMenuEdit_set_on_off(StMOG_First, 0);
+    tMenuEdit_set_on_off(StMOG_Deco, 0);
+    tMenuEdit_set_on_off(StMOG_Travel, 0);
+    tMenuEdit_set_on_off(StMOG_Inactive, 0);
+#ifdef ENABLE_UNUSED_GAS_HIDING
+    tMenuEdit_set_on_off(StMOG_Off, 1);
+#endif
+    if(!off)
+        return UPDATE_DIVESETTINGS;
+    else
+        return UPDATE_AND_EXIT_TO_MENU;
+}
 
 uint8_t OnAction_SetToMOD	(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action)
 {