38
+ − 1 ///////////////////////////////////////////////////////////////////////////////
+ − 2 /// -*- coding: UTF-8 -*-
+ − 3 ///
+ − 4 /// \file Discovery/Src/tMenuEditXtra.c
+ − 5 /// \brief Menu Edit 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 "tMenuEditXtra.h"
+ − 31
+ − 32 #include "gfx_fonts.h"
+ − 33 #include "simulation.h"
+ − 34 #include "timer.h"
+ − 35 #include "tMenuEdit.h"
347
+ − 36 #include "data_exchange_main.h"
547
+ − 37 #include "motion.h"
347
+ − 38
38
+ − 39
+ − 40 /* Private function prototypes -----------------------------------------------*/
+ − 41 void openEdit_CompassHeading(void);
+ − 42 void openEdit_ResetStopwatch(void);
+ − 43 void openEdit_SimFollowDecostops(void);
+ − 44 void openEdit_SetManualMarker(void);
347
+ − 45 void openEdit_SetEndDive(void);
552
+ − 46 void openEdit_CalibViewport(void);
654
+ − 47 static void openEdit_ScrubberTimer(uint8_t line);
+ − 48 static void openEdit_ScrubberReset(void);
+ − 49 static void openEdit_ScrubberTimerMode(void);
38
+ − 50
+ − 51 /* Announced function prototypes -----------------------------------------------*/
+ − 52 uint8_t OnAction_CompassHeading (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);
654
+ − 53 static uint8_t OnAction_ScrubberTimer(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);
38
+ − 54
+ − 55 /* Exported functions --------------------------------------------------------*/
+ − 56
+ − 57 void openEdit_Xtra(uint8_t line)
+ − 58 {
+ − 59 set_globalState_Menu_Line(line);
+ − 60 resetMenuEdit(CLUT_MenuPageXtra);
+ − 61
654
+ − 62 /* DIVE MODE */
+ − 63 if(actual_menu_content != MENU_SURFACE)
38
+ − 64 {
654
+ − 65 switch(line)
+ − 66 {
+ − 67 case 1:
+ − 68 default:
+ − 69 openEdit_ResetStopwatch();
+ − 70 break;
+ − 71 case 2:
+ − 72 openEdit_CompassHeading();
+ − 73 break;
+ − 74 case 3:
+ − 75 openEdit_SetManualMarker();
+ − 76 break;
+ − 77 case 4:
+ − 78 openEdit_CalibViewport();
+ − 79 break;
+ − 80 case 5:
+ − 81 if(is_stateUsedSetToSim())
+ − 82 {
+ − 83 openEdit_SimFollowDecostops();
+ − 84 }
+ − 85 else
+ − 86 {
+ − 87 openEdit_SetEndDive();
+ − 88 }
+ − 89 break;
+ − 90 }
+ − 91 }
+ − 92 else /* surface mode */
+ − 93 {
+ − 94 switch(line)
+ − 95 {
+ − 96 case 1: openEdit_ScrubberTimer(line);
+ − 97 break;
+ − 98 case 2: openEdit_ScrubberReset();
+ − 99 break;
+ − 100 case 3: openEdit_ScrubberTimerMode();
+ − 101 break;
+ − 102 default:
+ − 103 break;
+ − 104 }
38
+ − 105 }
+ − 106 }
+ − 107
+ − 108 /* Private functions ---------------------------------------------------------*/
+ − 109 void openEdit_ResetStopwatch(void)
+ − 110 {
+ − 111 timer_Stopwatch_Restart();
+ − 112 exitMenuEdit_to_Home();
+ − 113 }
+ − 114
+ − 115 void openEdit_SetManualMarker(void)
+ − 116 {
288
+ − 117 stateUsedWrite->events.manualMarker = 1;
38
+ − 118 exitMenuEdit_to_Home();
+ − 119 }
+ − 120
347
+ − 121 void openEdit_SetEndDive(void)
+ − 122 {
+ − 123 dataOutGetPointer()->setEndDive = 1;
+ − 124 exitMenuEdit_to_Home();
+ − 125 }
+ − 126
38
+ − 127 void openEdit_SimFollowDecostops(void)
+ − 128 {
+ − 129 simulation_set_heed_decostops(!simulation_get_heed_decostops());
+ − 130 exitMenuEdit_to_Menu_with_Menu_Update();
+ − 131 }
+ − 132
547
+ − 133 void openEdit_CalibViewport(void)
+ − 134 {
+ − 135 calibrateViewport(stateUsed->lifeData.compass_roll, stateUsed->lifeData.compass_pitch, stateUsed->lifeData.compass_heading);
648
+ − 136 suspendMotionDetection(0); /* exit to focus mode directly */
547
+ − 137 exitMenuEdit_to_Home();
+ − 138 }
+ − 139
654
+ − 140
+ − 141
+ − 142 static void openEdit_ScrubberTimer(uint8_t line)
+ − 143 {
+ − 144 uint16_t localScrubTimer;
+ − 145 uint16_t y_line;
+ − 146
+ − 147 char text[32];
+ − 148 SSettings *pSettings = settingsGetPointer();
+ − 149 localScrubTimer = pSettings->scrubTimerMax;
+ − 150
+ − 151 y_line = ME_Y_LINE_BASE + (line * ME_Y_LINE_STEP);
+ − 152
+ − 153 text[0] = '\001';
+ − 154 text[1] = TXT_ScrubTime;
+ − 155 text[2] = 0;
+ − 156 write_topline(text);
+ − 157
+ − 158 text[0] = '\002';
+ − 159 strcpy(&text[1],"\016\016");
+ − 160 text[3] = TXT_Minutes;
+ − 161 text[4] = 0;
+ − 162 write_label_fix( 20, 800, y_line, &FontT48, TXT_ScrubTime);
+ − 163 write_label_var( 435, 780, y_line, &FontT48, text);
+ − 164 write_field_udigit(StMXTRA_ScrubTimer_Max_Minutes, 600, 779, y_line, &FontT48, "###", (uint32_t)localScrubTimer, 0, 0, 0);
+ − 165
+ − 166 write_buttonTextline(TXT2BYTE_ButtonMinus,TXT2BYTE_ButtonEnter,TXT2BYTE_ButtonPlus);
+ − 167
+ − 168 setEvent(StMXTRA_ScrubTimer_Max_Minutes, (uint32_t)OnAction_ScrubberTimer);
+ − 169 startEdit();
+ − 170 }
+ − 171
+ − 172 static void openEdit_ScrubberReset(void)
+ − 173 {
+ − 174 SSettings *pSettings;
+ − 175 pSettings = settingsGetPointer();
+ − 176 pSettings->scrubTimerCur = pSettings->scrubTimerMax;
+ − 177 exitMenuEdit_to_Menu_with_Menu_Update();
+ − 178 }
+ − 179
+ − 180 static void openEdit_ScrubberTimerMode(void)
+ − 181 {
+ − 182 uint8_t newMode;
+ − 183 SSettings *pSettings;
+ − 184 pSettings = settingsGetPointer();
+ − 185 newMode = pSettings->scrubTimerMode + 1;
+ − 186 if(newMode >= SCRUB_TIMER_END)
+ − 187 {
+ − 188 newMode = SCRUB_TIMER_OFF;
+ − 189 }
+ − 190 pSettings->scrubTimerMode = newMode;
+ − 191 exitMenuEdit_to_Menu_with_Menu_Update();
+ − 192 }
+ − 193
38
+ − 194 void refresh_CompassHeading(void)
+ − 195 {
+ − 196 uint16_t heading;
+ − 197 char text[32];
+ − 198
+ − 199 text[0] = '\001';
+ − 200 text[1] = TXT_2BYTE;
+ − 201 text[2] = TXT2BYTE_CompassHeading;
+ − 202 text[3] = 0;
+ − 203 write_topline(text);
+ − 204
+ − 205 heading = (uint16_t)stateUsed->lifeData.compass_heading;
+ − 206 snprintf(text,32,"\001%03i`",heading);
+ − 207 write_label_var( 0, 800, ME_Y_LINE1, &FontT54, text);
+ − 208
+ − 209 tMenuEdit_refresh_field(StMXTRA_CompassHeading);
+ − 210 }
+ − 211
+ − 212 void openEdit_CompassHeading(void)
+ − 213 {
+ − 214
+ − 215 write_field_button(StMXTRA_CompassHeading,20, 800, ME_Y_LINE4, &FontT48, "Set");
+ − 216
+ − 217 setEvent(StMXTRA_CompassHeading, (uint32_t)OnAction_CompassHeading);
+ − 218 // startEdit();
+ − 219 }
+ − 220
+ − 221
+ − 222 uint8_t OnAction_CompassHeading (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action)
+ − 223 {
272
+ − 224 stateUsedWrite->diveSettings.compassHeading = (uint16_t)stateUsed->lifeData.compass_heading;
38
+ − 225 exitMenuEdit_to_Home_with_Menu_Update();
+ − 226 return EXIT_TO_HOME;
+ − 227 }
654
+ − 228
+ − 229 static uint8_t OnAction_ScrubberTimer(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action)
+ − 230 {
+ − 231 SSettings *pSettings;
+ − 232 uint8_t digitContentNew = EXIT_TO_MENU;
+ − 233 uint32_t newScrubberTime;
+ − 234
+ − 235 if(action == ACTION_BUTTON_ENTER)
+ − 236 {
+ − 237 return digitContent;
+ − 238 }
+ − 239 if(action == ACTION_BUTTON_ENTER_FINAL)
+ − 240 {
+ − 241 evaluateNewString(editId, &newScrubberTime, 0, 0, 0);
+ − 242
+ − 243 if(newScrubberTime > MAX_SCRUBBER_TIME)
+ − 244 newScrubberTime = MAX_SCRUBBER_TIME;
+ − 245
+ − 246 pSettings = settingsGetPointer();
+ − 247 pSettings->scrubTimerMax = newScrubberTime;
+ − 248 if(pSettings->scrubTimerCur > newScrubberTime)
+ − 249 {
+ − 250 pSettings->scrubTimerCur = newScrubberTime;
+ − 251 }
+ − 252
+ − 253 tMenuEdit_newInput(editId, newScrubberTime, 0, 0, 0);
+ − 254 digitContentNew = UPDATE_AND_EXIT_TO_MENU;
+ − 255 }
+ − 256 if(action == ACTION_BUTTON_NEXT)
+ − 257 {
+ − 258 digitContentNew = digitContent + 1;
+ − 259 if(digitContentNew > '9')
+ − 260 digitContentNew = '0';
+ − 261 }
+ − 262 if(action == ACTION_BUTTON_BACK)
+ − 263 {
+ − 264 digitContentNew = digitContent - 1;
+ − 265 if(digitContentNew < '0')
+ − 266 digitContentNew = '9';
+ − 267 }
+ − 268 return digitContentNew;
+ − 269 }
+ − 270