38
+ − 1 ///////////////////////////////////////////////////////////////////////////////
+ − 2 /// -*- coding: UTF-8 -*-
+ − 3 ///
+ − 4 /// \file Discovery/Src/tMenuXtra.c
+ − 5 /// \brief Menu Xtra - Specials in Divemode like Reset Stopwatch
+ − 6 /// \author heinrichs weikamp gmbh
+ − 7 /// \date 02-Mar-2015
+ − 8 ///
+ − 9 /// \details
+ − 10 ///
+ − 11 /// $Id$
+ − 12 ///////////////////////////////////////////////////////////////////////////////
+ − 13 /// \par Copyright (c) 2014-2018 Heinrichs Weikamp gmbh
+ − 14 ///
+ − 15 /// This program is free software: you can redistribute it and/or modify
+ − 16 /// it under the terms of the GNU General Public License as published by
+ − 17 /// the Free Software Foundation, either version 3 of the License, or
+ − 18 /// (at your option) any later version.
+ − 19 ///
+ − 20 /// This program is distributed in the hope that it will be useful,
+ − 21 /// but WITHOUT ANY WARRANTY; without even the implied warranty of
+ − 22 /// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ − 23 /// GNU General Public License for more details.
+ − 24 ///
+ − 25 /// You should have received a copy of the GNU General Public License
+ − 26 /// along with this program. If not, see <http://www.gnu.org/licenses/>.
+ − 27 //////////////////////////////////////////////////////////////////////////////
+ − 28
+ − 29 /* Includes ------------------------------------------------------------------*/
+ − 30 #include <stdio.h>
+ − 31 #include <string.h>
769
6b248bcdbf28
Deactivation of the 'fallback' option when the CCR mode is set to 'Fixed' - this makes it a little clearer that the option has no influence in this mode.
heinrichsweikamp
diff
changeset
+ − 32 #include <stdbool.h>
38
+ − 33 #include "tMenu.h"
+ − 34 #include "tStructure.h"
+ − 35 #include "tMenuXtra.h"
+ − 36 #include "text_multilanguage.h"
+ − 37 #include "data_central.h"
+ − 38 #include "simulation.h"
609
1b243c6c7067
Bugfix: CalibViewport were shown even in case the compile switch had not been set:
Ideenmodellierer
diff
changeset
+ − 39 #include "configuration.h"
38
+ − 40
850
+ − 41
38
+ − 42 /* Exported functions --------------------------------------------------------*/
+ − 43
+ − 44 uint32_t tMXtra_refresh(uint8_t line, char *text, uint16_t *tab, char *subtext)
+ − 45 {
707
+ − 46 uint8_t textPointer = 0;
+ − 47 uint8_t CcrModusTxtId = 0;
38
+ − 48
+ − 49 textPointer = 0;
+ − 50 *tab = 500;
+ − 51 *subtext = 0;
+ − 52
662
+ − 53 SSettings *pSettings = settingsGetPointer();
+ − 54
854
+ − 55 resetLineMask(StMXTRA);
+ − 56
654
+ − 57 /* DIVE MODE */
+ − 58 if(actual_menu_content != MENU_SURFACE)
38
+ − 59 {
654
+ − 60 if((line == 0) || (line == 1))
+ − 61 {
+ − 62 text[textPointer++] = TXT_2BYTE;
+ − 63 text[textPointer++] = TXT2BYTE_ResetStopwatch;
+ − 64 }
+ − 65 strcpy(&text[textPointer],"\n\r");
+ − 66 textPointer += 2;
+ − 67 /*
+ − 68 if((line == 0) || (line == 2))
+ − 69 {
+ − 70 text[textPointer++] = TXT_2BYTE;
+ − 71 text[textPointer++] = TXT2BYTE_ResetAvgDepth;
+ − 72 }
+ − 73 strcpy(&text[textPointer],"\n\r");
+ − 74 textPointer += 2;
+ − 75 */
+ − 76 if((line == 0) || (line == 2))
+ − 77 {
+ − 78 text[textPointer++] = TXT_2BYTE;
+ − 79 text[textPointer++] = TXT2BYTE_CompassHeading;
+ − 80 }
+ − 81 strcpy(&text[textPointer],"\n\r");
+ − 82 textPointer += 2;
38
+ − 83
654
+ − 84 if((line == 0) || (line == 3))
+ − 85 {
+ − 86 text[textPointer++] = TXT_2BYTE;
+ − 87 text[textPointer++] = TXT2BYTE_SetMarker;
+ − 88 }
+ − 89 strcpy(&text[textPointer],"\n\r");
+ − 90 textPointer += 2;
38
+ − 91
609
1b243c6c7067
Bugfix: CalibViewport were shown even in case the compile switch had not been set:
Ideenmodellierer
diff
changeset
+ − 92 #ifdef ENABLE_MOTION_CONTROL
654
+ − 93 if((line == 0) || (line == 4))
+ − 94 {
+ − 95 text[textPointer++] = TXT_2BYTE;
+ − 96 text[textPointer++] = TXT2BYTE_CalibView;
+ − 97 }
+ − 98 strcpy(&text[textPointer],"\n\r");
+ − 99 textPointer += 2;
609
1b243c6c7067
Bugfix: CalibViewport were shown even in case the compile switch had not been set:
Ideenmodellierer
diff
changeset
+ − 100 #endif
547
+ − 101
654
+ − 102 if(is_stateUsedSetToSim())
+ − 103 {
+ − 104 if((line == 0) || (line == 5))
+ − 105 {
+ − 106 text[textPointer++] = TXT_2BYTE;
+ − 107 text[textPointer++] = TXT2BYTE_SimFollowDecoStops;
+ − 108 text[textPointer++] = ' ';
+ − 109 text[textPointer++] = ' ';
+ − 110 if(simulation_get_heed_decostops())
+ − 111 text[textPointer++] = '\005';
+ − 112 else
+ − 113 text[textPointer++] = '\006';
+ − 114 }
+ − 115 strcpy(&text[textPointer],"\n\r");
+ − 116 textPointer += 2;
+ − 117 }
+ − 118 else
+ − 119 {
+ − 120 if((line == 0) || (line == 5)) /* end dive mode only used during real dives */
+ − 121 {
+ − 122 text[textPointer++] = TXT_2BYTE;
+ − 123 text[textPointer++] = TXT2BYTE_EndDiveMode;
+ − 124 }
+ − 125 strcpy(&text[textPointer],"\n\r");
+ − 126 textPointer += 2;
+ − 127 }
+ − 128 }
+ − 129 else /* Surface MODE */
38
+ − 130 {
707
+ − 131
654
+ − 132 if((line == 0) || (line == 1))
38
+ − 133 {
707
+ − 134 switch(pSettings->CCR_Mode)
+ − 135 {
+ − 136 case CCRMODE_Sensors: CcrModusTxtId = TXT_Sensor;
+ − 137 break;
+ − 138 case CCRMODE_FixedSetpoint: CcrModusTxtId = TXT_FixedSP;
+ − 139 break;
+ − 140 case CCRMODE_Simulation: CcrModusTxtId = TXT_SimPpo2;
+ − 141 break;
+ − 142 default: CcrModusTxtId = 'X';
+ − 143 break;
+ − 144 }
654
+ − 145 textPointer += snprintf(&text[textPointer], 60,\
707
+ − 146 "%c"
+ − 147 "\t"
+ − 148 "%c"
+ − 149 , TXT_CCRmode
+ − 150 , CcrModusTxtId
+ − 151 );
+ − 152
+ − 153 strcpy(&text[textPointer],"\n\r");
+ − 154 textPointer += 2;
654
+ − 155 }
707
+ − 156
+ − 157 if((line == 0) || (line == 2))
816
c4ee952b9425
Fix a bug that disables arbitrary menu lines in dive mode if lines are disabled / inactive in surface mode. (mikeller)
heinrichsweikamp
diff
changeset
+ − 158 {
c4ee952b9425
Fix a bug that disables arbitrary menu lines in dive mode if lines are disabled / inactive in surface mode. (mikeller)
heinrichsweikamp
diff
changeset
+ − 159 bool canDoFallback = pSettings->CCR_Mode == CCRMODE_Sensors;
c4ee952b9425
Fix a bug that disables arbitrary menu lines in dive mode if lines are disabled / inactive in surface mode. (mikeller)
heinrichsweikamp
diff
changeset
+ − 160 if (!canDoFallback) {
c4ee952b9425
Fix a bug that disables arbitrary menu lines in dive mode if lines are disabled / inactive in surface mode. (mikeller)
heinrichsweikamp
diff
changeset
+ − 161 text[textPointer++] = '\031';
c4ee952b9425
Fix a bug that disables arbitrary menu lines in dive mode if lines are disabled / inactive in surface mode. (mikeller)
heinrichsweikamp
diff
changeset
+ − 162 }
c4ee952b9425
Fix a bug that disables arbitrary menu lines in dive mode if lines are disabled / inactive in surface mode. (mikeller)
heinrichsweikamp
diff
changeset
+ − 163 textPointer += snprintf(&text[textPointer], 60,\
c4ee952b9425
Fix a bug that disables arbitrary menu lines in dive mode if lines are disabled / inactive in surface mode. (mikeller)
heinrichsweikamp
diff
changeset
+ − 164 "%c"
c4ee952b9425
Fix a bug that disables arbitrary menu lines in dive mode if lines are disabled / inactive in surface mode. (mikeller)
heinrichsweikamp
diff
changeset
+ − 165 ,TXT_Fallback
c4ee952b9425
Fix a bug that disables arbitrary menu lines in dive mode if lines are disabled / inactive in surface mode. (mikeller)
heinrichsweikamp
diff
changeset
+ − 166 );
707
+ − 167
816
c4ee952b9425
Fix a bug that disables arbitrary menu lines in dive mode if lines are disabled / inactive in surface mode. (mikeller)
heinrichsweikamp
diff
changeset
+ − 168 text[textPointer++] = '\t';
c4ee952b9425
Fix a bug that disables arbitrary menu lines in dive mode if lines are disabled / inactive in surface mode. (mikeller)
heinrichsweikamp
diff
changeset
+ − 169 if(settingsGetPointer()->fallbackToFixedSetpoint && canDoFallback)
c4ee952b9425
Fix a bug that disables arbitrary menu lines in dive mode if lines are disabled / inactive in surface mode. (mikeller)
heinrichsweikamp
diff
changeset
+ − 170 text[textPointer++] = '\005';
c4ee952b9425
Fix a bug that disables arbitrary menu lines in dive mode if lines are disabled / inactive in surface mode. (mikeller)
heinrichsweikamp
diff
changeset
+ − 171 else
c4ee952b9425
Fix a bug that disables arbitrary menu lines in dive mode if lines are disabled / inactive in surface mode. (mikeller)
heinrichsweikamp
diff
changeset
+ − 172 text[textPointer++] = '\006';
707
+ − 173
850
+ − 174 if (!canDoFallback)
+ − 175 {
816
c4ee952b9425
Fix a bug that disables arbitrary menu lines in dive mode if lines are disabled / inactive in surface mode. (mikeller)
heinrichsweikamp
diff
changeset
+ − 176 text[textPointer++] = '\020';
c4ee952b9425
Fix a bug that disables arbitrary menu lines in dive mode if lines are disabled / inactive in surface mode. (mikeller)
heinrichsweikamp
diff
changeset
+ − 177 disableLine(StMXTRA_O2_Fallback);
850
+ − 178 } else
+ − 179 {
816
c4ee952b9425
Fix a bug that disables arbitrary menu lines in dive mode if lines are disabled / inactive in surface mode. (mikeller)
heinrichsweikamp
diff
changeset
+ − 180 enableLine(StMXTRA_O2_Fallback);
c4ee952b9425
Fix a bug that disables arbitrary menu lines in dive mode if lines are disabled / inactive in surface mode. (mikeller)
heinrichsweikamp
diff
changeset
+ − 181 }
c4ee952b9425
Fix a bug that disables arbitrary menu lines in dive mode if lines are disabled / inactive in surface mode. (mikeller)
heinrichsweikamp
diff
changeset
+ − 182 strcpy(&text[textPointer],"\n\r");
c4ee952b9425
Fix a bug that disables arbitrary menu lines in dive mode if lines are disabled / inactive in surface mode. (mikeller)
heinrichsweikamp
diff
changeset
+ − 183 textPointer += 2;
c4ee952b9425
Fix a bug that disables arbitrary menu lines in dive mode if lines are disabled / inactive in surface mode. (mikeller)
heinrichsweikamp
diff
changeset
+ − 184 }
707
+ − 185
+ − 186
654
+ − 187 if((line == 0) || (line == 3))
816
c4ee952b9425
Fix a bug that disables arbitrary menu lines in dive mode if lines are disabled / inactive in surface mode. (mikeller)
heinrichsweikamp
diff
changeset
+ − 188 {
c4ee952b9425
Fix a bug that disables arbitrary menu lines in dive mode if lines are disabled / inactive in surface mode. (mikeller)
heinrichsweikamp
diff
changeset
+ − 189 textPointer += snprintf(&text[textPointer], 60,\
c4ee952b9425
Fix a bug that disables arbitrary menu lines in dive mode if lines are disabled / inactive in surface mode. (mikeller)
heinrichsweikamp
diff
changeset
+ − 190 "%c"
c4ee952b9425
Fix a bug that disables arbitrary menu lines in dive mode if lines are disabled / inactive in surface mode. (mikeller)
heinrichsweikamp
diff
changeset
+ − 191 ,TXT_ScrubTime
c4ee952b9425
Fix a bug that disables arbitrary menu lines in dive mode if lines are disabled / inactive in surface mode. (mikeller)
heinrichsweikamp
diff
changeset
+ − 192 );
c4ee952b9425
Fix a bug that disables arbitrary menu lines in dive mode if lines are disabled / inactive in surface mode. (mikeller)
heinrichsweikamp
diff
changeset
+ − 193 strcpy(&text[textPointer],"\n\r");
c4ee952b9425
Fix a bug that disables arbitrary menu lines in dive mode if lines are disabled / inactive in surface mode. (mikeller)
heinrichsweikamp
diff
changeset
+ − 194 textPointer += 2;
c4ee952b9425
Fix a bug that disables arbitrary menu lines in dive mode if lines are disabled / inactive in surface mode. (mikeller)
heinrichsweikamp
diff
changeset
+ − 195 }
654
+ − 196
662
+ − 197 #ifdef ENABLE_PSCR_MODE
845
+ − 198 if((line == 0) || (line == 4))
+ − 199 {
+ − 200 if(pSettings->dive_mode == DIVEMODE_PSCR)
+ − 201 {
+ − 202 textPointer += snprintf(&text[textPointer], 60, "%c",TXT_PSClosedCircuit);
+ − 203 enableLine(StMXTRA_PSCR_O2_Drop);
+ − 204 }
+ − 205 else
+ − 206 {
+ − 207 text[textPointer++] = '\031'; /* change text color */
+ − 208 textPointer += snprintf(&text[textPointer], 60,"%c",TXT_PSClosedCircuit);
+ − 209 text[textPointer++] = '\020'; /* restore text color */
+ − 210 disableLine(StMXTRA_PSCR_O2_Drop);
+ − 211 }
+ − 212 strcpy(&text[textPointer],"\n\r");
+ − 213 textPointer += 2;
+ − 214 }
+ − 215 #endif
883
+ − 216 #ifdef ENABLE_PREDIVE_CHECK
850
+ − 217 if((line == 0) || (line == 5))
662
+ − 218 {
850
+ − 219 if((pSettings->ppo2sensors_source == O2_SENSOR_SOURCE_ANADIG) || (pSettings->ppo2sensors_source == O2_SENSOR_SOURCE_DIGITAL))
845
+ − 220 {
850
+ − 221 textPointer += snprintf(&text[textPointer], 60,"%c",TXT_PreDive);
845
+ − 222 }
850
+ − 223 else
+ − 224 {
+ − 225 text[textPointer++] = '\031'; /* change text color */
+ − 226 textPointer += snprintf(&text[textPointer], 60,"%c",TXT_PreDive);
+ − 227 text[textPointer++] = '\020'; /* restore text color */
+ − 228 disableLine(StMXTRA_Predive_Check);
+ − 229 }
+ − 230 strcpy(&text[textPointer],"\n\r");
+ − 231 textPointer += 2;
662
+ − 232 }
883
+ − 233 #endif
38
+ − 234 }
+ − 235 return StMXTRA;
+ − 236 }
+ − 237
850
+ − 238 void tMXtra_checkLineStatus(void)
+ − 239 {
+ − 240 uint8_t localLineMask = 0;
+ − 241 uint8_t lineMask = getLineMask(StMXTRA);
+ − 242 SSettings *pSettings = settingsGetPointer();
+ − 243
+ − 244 if(pSettings->CCR_Mode != CCRMODE_Sensors)
+ − 245 {
+ − 246 localLineMask |= 1 << 2;
+ − 247 }
+ − 248 if(pSettings->dive_mode != DIVEMODE_PSCR)
+ − 249 {
+ − 250 localLineMask |= 1 << 4;
+ − 251 }
+ − 252 if((pSettings->ppo2sensors_source != O2_SENSOR_SOURCE_ANADIG) && (pSettings->ppo2sensors_source != O2_SENSOR_SOURCE_DIGITAL))
+ − 253 {
+ − 254 localLineMask |= 1 << 5;
+ − 255 }
+ − 256
+ − 257 if(lineMask != localLineMask)
+ − 258 {
+ − 259 updateMenu();
+ − 260 }
+ − 261 }
+ − 262