Mercurial > public > ostc4
annotate Discovery/Src/base.c @ 1037:2af07aa38531 GasConsumption
Merge with external development branches:
Some features have been prepared for integration: Profiles, DMA UART on Firmware part, Bluetooth discovery and messges logging for development phase. All these new function are deactivated by compile switch and may be activated using the configuration.h for testing purpose.
| author | Ideenmodellierer |
|---|---|
| date | Mon, 15 Sep 2025 21:12:44 +0200 |
| parents | 3d9552e4997c 5865f0aeb438 |
| children | 7efc8baa3ffa |
| rev | line source |
|---|---|
| 38 | 1 /////////////////////////////////////////////////////////////////////////////// |
| 2 /// -*- coding: UTF-8 -*- | |
| 3 /// | |
| 4 /// \file Discovery/Src/base.c | |
| 5 /// \brief main(): init hardware, IRQs and start sub-systems | |
| 6 /// \author heinrichs weikamp gmbh | |
| 7 /// \date 26-February-2014 | |
| 8 /// | |
| 9 /// $Id$ | |
| 10 /////////////////////////////////////////////////////////////////////////////// | |
| 11 /// \par Copyright (c) 2014-2018 Heinrichs Weikamp gmbh | |
| 12 /// | |
| 13 /// This program is free software: you can redistribute it and/or modify | |
| 14 /// it under the terms of the GNU General Public License as published by | |
| 15 /// the Free Software Foundation, either version 3 of the License, or | |
| 16 /// (at your option) any later version. | |
| 17 /// | |
| 18 /// This program is distributed in the hope that it will be useful, | |
| 19 /// but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 20 /// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 21 /// GNU General Public License for more details. | |
| 22 /// | |
| 23 /// You should have received a copy of the GNU General Public License | |
| 24 /// along with this program. If not, see <http://www.gnu.org/licenses/>. | |
| 25 ////////////////////////////////////////////////////////////////////////////// | |
| 26 | |
| 27 /** | |
| 28 @verbatim | |
| 29 ============================================================================== | |
| 30 ##### Firmware Info ##### | |
| 31 ============================================================================== | |
| 32 [..] In settings.c including text and magic stuff | |
| 33 ============================================================================== | |
| 34 ##### IRQs ##### | |
| 35 ============================================================================== | |
| 36 [..] The IRQs are very important and most functions should only run there. | |
| 37 | |
| 38 PreemptPriority are as follows | |
| 39 (#) 2 (low) sprintf _only_ here. Don't use in maintask or anywhere else. | |
| 40 Called by Buttons und Timer3 | |
| 41 Timer3 is 1/10 second | |
| 42 (#) 1 (mid) anything that should work while in IRQ2 like HalDelay(), VSYNC | |
| 43 and DMA2D Transfer Complete for housekeepingFrame(); | |
| 44 (#) 0 (high) _very very short_ interrupts like The HAL hardware part for | |
| 45 spi, uart, i2c. | |
| 46 | |
| 47 SubPriority within PreemptPriority give the order to execute. | |
| 48 Introduced 30.Oct.14 as it used by several HAL examples. | |
| 49 Three levelAmbients are available (2 low,1 mid,0 high) | |
| 50 | |
| 51 The STM32F4 has 4bits for IRQ levelAmbients, divided 2/2 in this code | |
| 52 with the NVIC_PRIORITYGROUP_2 setting. | |
| 53 | |
| 54 ============================================================================== | |
| 55 ##### MainTask ##### | |
| 56 ============================================================================== | |
| 57 [..] For everthing slow without importance to be 'in time'. | |
| 58 Like VPM and Buehlmann. | |
| 59 No sprintf and probably no GFX_SetFramesTopBottom() stuff neither. | |
| 60 If sprintf is called while sprintf is executed it blows up everything. | |
| 61 | |
| 62 ============================================================================== | |
| 63 ##### Frames / the external SDRAM ##### | |
| 64 ============================================================================== | |
| 65 [..] The SDRAM is handled by getFrame() and releaseFrame(). | |
| 66 Each frame with 800*480*2 Bytes. | |
| 67 Be carefull to release every frame | |
| 68 otherwise there will be a memory leakage over time. | |
| 69 housekeepingFrame() in the MainTask takes care of cleaning the frames. | |
| 70 All frames are filled with 0x00. This will be transparent with color of | |
| 71 CLUT_Font020 (is CLUT 0) if the alpha is set for a 16bit pair. | |
| 72 housekeepingFrame() delays the cleaning of frames still used as screen | |
| 73 buffer to prevent flickering. | |
| 74 | |
| 75 [..] use global variable frameCounter[] in gfxengine.c to control memory | |
| 76 all but the last three are identical to caller_id | |
| 77 for example 0x05 are the menu frames | |
| 78 the last but one is a sum for higher numbers (shouldn't be any) | |
| 79 the last but one are those in status RELEASED | |
| 80 the last are those CLEAR (as of 151202 down to 4 in logbook mode) | |
| 81 | |
| 82 [..] 4 pages are used for two double memories for screenshots (since Nov. 15) | |
| 83 | |
| 84 ============================================================================== | |
| 85 ##### Display ##### | |
| 86 ============================================================================== | |
| 87 [..] There is a Top layer, Bottom layer and background color. | |
| 88 All are perfectly alpha-blended by hardware. | |
| 89 | |
| 90 (#) top layer has 800x480 option function calls only | |
| 91 as it is not used for cursors here | |
| 92 (#) bottom layer has free size and start option to be used | |
| 93 for cursors (or sprites in the future ;-) | |
| 94 (#) background only black in the moment. | |
| 95 ToDo: Could be anything else for warnings etc. | |
| 96 if needed | |
| 97 | |
| 98 [..] Frame updates, switching and cursors is done with | |
| 99 | |
| 100 (#) GFX_SetFramesTopBottom() and the subset | |
| 101 GFX_SetFrameTop() + GFX_SetFrameBottom() | |
| 102 Those do not change anything on the display but give commands to.. | |
| 103 (#) GFX_change_LTDC() The only place that changes the pointer. | |
| 104 This prevents erratic behaviour if several changes | |
| 105 are made within one refresh rate of the screen. | |
| 106 Is called in IRQ by PD4 and HAL_GPIO_EXTI_IRQHandler | |
| 107 from VSYNC signal. | |
| 108 | |
| 109 [..] Content | |
| 110 | |
| 111 (#) Colors by LookupTable only. This could be modified by | |
| 112 system settings in the future. (gfx_color.h/.c) | |
| 113 | |
| 114 (#) Text by text_multilinguage.h/.c with one char | |
| 115 necessary only starting from '\x80' | |
| 116 with automatic language switch by | |
| 117 selected_language in SSettings | |
| 118 see openEdit_Language() in tMenuEditSystem.c | |
| 119 Therefore there are differnent functions | |
| 120 for example: | |
| 121 write_label_fix() for single char multilanguage | |
| 122 write_label_var() for strings that could include | |
| 123 multilanguage as well | |
| 124 see GFX_write_string() to get an overview of the controls | |
| 125 as well as the command list in gfx_engine.h | |
| 126 There is no clear before writing, text overlay is always on. | |
| 127 Many options to have LargeFont.SmallFont for numbers etc. | |
| 128 | |
| 129 ============================================================================== | |
| 130 ##### Update, DualBoot and build-in FLASH memory usage ##### | |
| 131 ============================================================================== | |
| 132 [..] Boot0 pin, Boot1/PB2 pin and BFB2 software bit control the behaviour. | |
| 133 PB2 should be tied to GND. | |
| 134 Boot0 == VDD -> bootloader on start, otherwise boot from Bank1 or Bank2 | |
| 135 depending on BFB2. | |
| 136 Bank2 contains the Fonts and should contain a proper test code in future | |
| 137 Bank1 is the main code (Bank1 is 1 MB too, usage as of Oct. 14 is 200 KB) | |
| 138 [..] Bootloader should be either UART or USB (on FS pins _only_) | |
| 139 USB HS to FS like on the Eval board does not work. | |
| 140 [..] Bootloader for the smaller CPU2 is implemented via the SPI used for DMA copy. | |
| 141 | |
| 142 ============================================================================== | |
| 143 ##### Connection to CPU2 (STM32F411 as of Oct.14 ##### | |
| 144 ============================================================================== | |
| 145 [..] Connected via SPI and DMA for every purpose. | |
| 146 two entire arrays are transfered for data security reasons | |
| 147 with respect to master (STM32F429) might interrupt internal | |
| 148 data copy in CPU2 (like hi byte, low byte, etc.). | |
| 149 [..] The entire life data is calculated in CPU2. Like tissues, CNS,... | |
| 150 Therefore the main unit is _not_ necessarily a Real Time system. | |
| 151 Simulation on the main unit can be executed without disrupting life data. | |
| 152 [..] SPI is triggered and timed by calling DataEX_call() in data_exchange_main.c | |
| 153 DataEX_copy_to_LifeData() does the transfer from buffer to variables used. | |
| 154 | |
| 155 ============================================================================== | |
| 156 ##### Menu, MenuEdit, Info ##### | |
| 157 ============================================================================== | |
| 158 [..] tMenu.c, tMenuEdit.c and tInfo.c is the system used. | |
| 159 logbook is part of Info not Menu. | |
| 160 The Info Menu is accessed by button 'Back' | |
| 161 The regular Menu is accessed by button 'Enter' | |
| 162 [..] Menu content is kept in frame memory for fast access. | |
| 163 There is no need to build pages if the 'Enter' button is pressed. | |
| 164 This is in contrast to MenuEdit pages. | |
| 165 [..] Button control for new pages (and pages in general) have to implemented | |
| 166 in tMenu.c, tMenuEdit.c or tInfo.c | |
| 167 | |
| 168 [..] ToDo (Oct. 14) Timeout for menus via Timer3 / IRQ 2 | |
| 169 | |
| 170 ============================================================================== | |
| 171 ##### settings ##### | |
| 172 ============================================================================== | |
| 173 [..] files: settings.c, settings.h | |
| 174 1. adjust struct SSettings in settings.h | |
| 175 2. adjust const SSettings SettingsStandard in settings.c | |
| 176 3. adjust set_new_settings_missing_in_ext_flash() | |
| 177 4. adjust check_and_correct_settings() IMPORTANT as it changes values! | |
| 178 | |
| 179 ============================================================================== | |
| 180 ##### specials ##### | |
| 181 ============================================================================== | |
| 182 [..] There was code for vector graphics from great demos | |
| 183 (peridiummmm and jupiter) that can be fitted again | |
| 184 | |
| 185 ============================================================================== | |
| 186 ##### ppO2 sensors ##### | |
| 187 ============================================================================== | |
| 188 [..] in tCCR.c is function get_ppO2SensorWeightedResult_cbar(); | |
| 189 | |
| 190 @endverbatim | |
| 191 ****************************************************************************** | |
| 192 * @attention | |
| 193 * | |
| 194 * <h2><center>© COPYRIGHT(c) 2014 heinrichs weikamp</center></h2> | |
| 195 * | |
| 196 ****************************************************************************** | |
| 197 */ | |
| 198 | |
| 199 /* Includes ------------------------------------------------------------------*/ | |
| 200 #include "stdio.h" | |
| 201 #include <string.h> // for memcopy | |
|
549
469e93f8633e
Only execute motion detection functions if features is enabled:
Ideenmodellierer
parents:
540
diff
changeset
|
202 #include <math.h> |
|
446
f1257a32f2d4
Introduced configuration header for variant managment:
ideenmodellierer
parents:
427
diff
changeset
|
203 #include "configuration.h" |
| 38 | 204 |
| 205 #include "stm32f4xx_hal.h" | |
| 206 #include "ostc.h" | |
| 207 #include "base.h" | |
| 208 #include "display.h" | |
| 209 #include "gfx_engine.h" | |
| 210 #include "show_logbook.h" | |
| 211 #include "text_multilanguage.h" | |
| 212 #include "tHome.h" | |
| 213 #include "tInfo.h" | |
| 214 #include "tInfoLog.h" | |
|
718
b9f699d2e3d0
Updated menu structure to support new sensor information page:
Ideenmodellierer
parents:
697
diff
changeset
|
215 #include "tInfoSensor.h" |
| 845 | 216 #include "tInfoPreDive.h" |
| 38 | 217 #include "tMenu.h" |
| 218 #include "tMenuEdit.h" | |
| 219 #include "tMenuEditGasOC.h" | |
| 220 #include "tStructure.h" | |
| 221 #include "externLogbookFlash.h" | |
| 222 #include "tComm.h" | |
| 223 #include "tCCR.h" | |
| 224 #include "data_exchange.h" | |
| 225 #include "data_exchange_main.h" | |
| 226 #include "vpm.h" | |
| 227 #include "buehlmann.h" | |
| 228 #include "logbook.h" | |
| 229 #include "check_warning.h" | |
| 230 #include "simulation.h" | |
| 231 #include "decom.h" | |
| 232 #include "timer.h" | |
| 233 #include "logbook_miniLive.h" | |
| 234 #include "test_vpm.h" | |
| 235 #include "tDebug.h" | |
|
360
fc5e9fdcb156
Added trigger of middle button action in case of a detected shake
ideenmodellierer
parents:
272
diff
changeset
|
236 #include "motion.h" |
|
586
bb5ce239741f
Motion control: Jump back to primary view if focus is lost:
Ideenmodellierer
parents:
561
diff
changeset
|
237 #include "t7.h" |
|
bb5ce239741f
Motion control: Jump back to primary view if focus is lost:
Ideenmodellierer
parents:
561
diff
changeset
|
238 #include "t3.h" |
| 651 | 239 #include "tMenuEditSetpoint.h" |
|
1033
5f66e44d69f0
Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents:
1032
diff
changeset
|
240 #include "cv_heartbeat.h" |
|
5f66e44d69f0
Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents:
1032
diff
changeset
|
241 #include "tInfoLogger.h" |
| 38 | 242 |
| 243 #ifdef DEMOMODE | |
| 244 #include "demo.h" | |
| 245 static void TIM_DEMO_init(void); | |
| 246 #endif | |
| 247 | |
| 1036 | 248 #ifdef ENABLE_USART_RADIO |
| 249 #include "demo.h" | |
| 250 #endif | |
|
361
b111fc4250e9
Pass action to customer vie update function.
Ideenmodellierer
parents:
360
diff
changeset
|
251 |
| 38 | 252 //#include "lodepng.h" |
| 253 //#include <stdlib.h> // for malloc and free | |
| 254 | |
| 255 /** @addtogroup OSTC 4 | |
| 256 * @{ | |
| 257 */ | |
| 258 | |
| 259 /* Private typedef -----------------------------------------------------------*/ | |
| 260 | |
| 261 //#define NO_TIMEOUT | |
| 262 //#define QUICK_SLEEP | |
| 263 | |
| 264 /* Private define ------------------------------------------------------------*/ | |
| 265 #define REFRESH_COUNT ((uint32_t)0x0569) /**< for SDRAM refresh counter (90Mhz SD clock) */ | |
|
152
bc7795161549
Moved button evaluation out of interrupt handler
Ideenmodellierer
parents:
149
diff
changeset
|
266 #define INVALID_BUTTON ((uint8_t) 0xFF) |
| 38 | 267 /* Private macro -------------------------------------------------------------*/ |
| 268 /* Private variables ---------------------------------------------------------*/ | |
| 269 | |
|
300
5ca177d2df5d
cleanup: remove commented/unused code, make static
Jan Mulder <jlmulder@xs4all.nl>
parents:
272
diff
changeset
|
270 static RTC_HandleTypeDef RtcHandle; /* used to change time and date, no RTC is running on this MCU */ |
| 38 | 271 TIM_HandleTypeDef TimHandle; /* used in stm32f4xx_it.c too */ |
|
300
5ca177d2df5d
cleanup: remove commented/unused code, make static
Jan Mulder <jlmulder@xs4all.nl>
parents:
272
diff
changeset
|
272 static TIM_HandleTypeDef TimBacklightHandle; |
|
225
2bb1db22b5f5
cleanup: random set of cleanups
Jan Mulder <jlmulder@xs4all.nl>
parents:
223
diff
changeset
|
273 #ifdef DEMOMODE |
| 38 | 274 TIM_HandleTypeDef TimDemoHandle; /* used in stm32f4xx_it.c too */ |
|
225
2bb1db22b5f5
cleanup: random set of cleanups
Jan Mulder <jlmulder@xs4all.nl>
parents:
223
diff
changeset
|
275 #endif |
| 38 | 276 |
|
549
469e93f8633e
Only execute motion detection functions if features is enabled:
Ideenmodellierer
parents:
540
diff
changeset
|
277 |
|
469e93f8633e
Only execute motion detection functions if features is enabled:
Ideenmodellierer
parents:
540
diff
changeset
|
278 static uint8_t blBoost = 0; |
|
422
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
279 static uint8_t RequestModeChange = 0; |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
280 |
| 697 | 281 static uint8_t LastButtonPressed = INVALID_BUTTON; |
| 282 static uint32_t LastButtonPressedTick = 0; | |
|
300
5ca177d2df5d
cleanup: remove commented/unused code, make static
Jan Mulder <jlmulder@xs4all.nl>
parents:
272
diff
changeset
|
283 static uint32_t BaseTick100ms; /* Tick at last 100ms cycle */ |
| 38 | 284 |
| 285 /* SDRAM handler declaration */ | |
|
300
5ca177d2df5d
cleanup: remove commented/unused code, make static
Jan Mulder <jlmulder@xs4all.nl>
parents:
272
diff
changeset
|
286 static SDRAM_HandleTypeDef hsdram; |
|
5ca177d2df5d
cleanup: remove commented/unused code, make static
Jan Mulder <jlmulder@xs4all.nl>
parents:
272
diff
changeset
|
287 static FMC_SDRAM_TimingTypeDef SDRAM_Timing; |
|
5ca177d2df5d
cleanup: remove commented/unused code, make static
Jan Mulder <jlmulder@xs4all.nl>
parents:
272
diff
changeset
|
288 static FMC_SDRAM_CommandTypeDef command; |
| 38 | 289 |
| 290 /* This was used for Dual Boot */ | |
| 291 //FLASH_OBProgramInitTypeDef OBInit; | |
| 292 //FLASH_AdvOBProgramInitTypeDef AdvOBInit; | |
| 293 | |
| 294 /* Private variables with external access ------------------------------------*/ | |
| 295 | |
|
300
5ca177d2df5d
cleanup: remove commented/unused code, make static
Jan Mulder <jlmulder@xs4all.nl>
parents:
272
diff
changeset
|
296 static uint32_t globalStateID = 0; |
|
5ca177d2df5d
cleanup: remove commented/unused code, make static
Jan Mulder <jlmulder@xs4all.nl>
parents:
272
diff
changeset
|
297 static uint32_t time_without_button_pressed_deciseconds = 0; /**< langbeschreibung (eigenes Feld) warum diese variable verwendet wird um den sleepmode zu aktivieren */ |
| 38 | 298 uint8_t bootToBootloader = 0; ///< set in tComm.c to install firmware updates, calls resetToFirmwareUpdate() |
|
300
5ca177d2df5d
cleanup: remove commented/unused code, make static
Jan Mulder <jlmulder@xs4all.nl>
parents:
272
diff
changeset
|
299 static uint8_t returnFromCommCleanUpRequest = 0; ///< use this to exit bluetooth mode and call tComm_exit() |
| 38 | 300 uint32_t base_tempLightLevel = 0; |
|
300
5ca177d2df5d
cleanup: remove commented/unused code, make static
Jan Mulder <jlmulder@xs4all.nl>
parents:
272
diff
changeset
|
301 static uint8_t wasFirmwareUpdateCheckBattery = 0; |
|
740
5078da3845c0
Added button lock after wakeup in surface mode:
Ideenmodellierer
parents:
718
diff
changeset
|
302 static uint8_t DoDisplayRefresh = 0; /* trigger to refresh display data */ |
|
5078da3845c0
Added button lock after wakeup in surface mode:
Ideenmodellierer
parents:
718
diff
changeset
|
303 static uint8_t DoHousekeeping = 0; /* trigger to cleanup the frame buffers */ |
|
5078da3845c0
Added button lock after wakeup in surface mode:
Ideenmodellierer
parents:
718
diff
changeset
|
304 static SButtonLock ButtonLockState = LOCK_OFF; /* Used for button unlock sequence */ |
|
5078da3845c0
Added button lock after wakeup in surface mode:
Ideenmodellierer
parents:
718
diff
changeset
|
305 |
| 896 | 306 #ifdef T7_DEBUG_RUNTIME |
| 307 static uint32_t startTimeMainLoop = 0; | |
| 308 static uint32_t startTimeDecoLoop = 0; | |
| 309 static uint32_t startTimeGfxLoop = 0; | |
| 310 static uint32_t timeMainLoop = 0; | |
| 311 static uint32_t timeDecoLoop = 0; | |
| 312 static uint32_t timeGfxLoop = 0; | |
| 313 #endif | |
|
217
ce05c801b002
Moved display refresh and button action function from tim callback to main loop
ideenmodellierer
parents:
206
diff
changeset
|
314 |
| 38 | 315 /* Private function prototypes -----------------------------------------------*/ |
| 316 static void SystemClock_Config(void); | |
| 317 static void Error_Handler(void); | |
| 318 static void SDRAM_Initialization_Sequence(SDRAM_HandleTypeDef *hsdram, FMC_SDRAM_CommandTypeDef *Command); | |
| 319 static void SDRAM_Config(void); | |
| 320 static void EXTILine_Buttons_Config(void); | |
| 321 static void TIM_init(void); | |
| 322 static void TIM_BACKLIGHT_init(void); | |
| 323 static uint32_t TIM_BACKLIGHT_adjust(void); | |
| 324 static void gotoSleep(void); | |
| 325 static void deco_loop(void); | |
| 326 static void resetToFirmwareUpdate(void); | |
|
217
ce05c801b002
Moved display refresh and button action function from tim callback to main loop
ideenmodellierer
parents:
206
diff
changeset
|
327 static void TriggerButtonAction(void); |
|
740
5078da3845c0
Added button lock after wakeup in surface mode:
Ideenmodellierer
parents:
718
diff
changeset
|
328 static void TriggerButtonUnlock(void); |
|
217
ce05c801b002
Moved display refresh and button action function from tim callback to main loop
ideenmodellierer
parents:
206
diff
changeset
|
329 static void EvaluateButton(void); |
|
ce05c801b002
Moved display refresh and button action function from tim callback to main loop
ideenmodellierer
parents:
206
diff
changeset
|
330 static void RefreshDisplay(void); |
|
422
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
331 static void TimeoutControlRequestModechange(void); |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
332 static void TimeoutControl(void); |
| 38 | 333 |
| 334 /* ITM Trace-------- ---------------------------------------------------------*/ | |
| 335 /* | |
| 336 #define ITM_Port8(n) (*((volatile unsigned char *)(0xE0000000+4*n))) | |
| 337 #define ITM_Port16(n) (*((volatile unsigned short*)(0xE0000000+4*n))) | |
| 338 #define ITM_Port32(n) (*((volatile unsigned long *)(0xE0000000+4*n))) | |
| 339 | |
| 340 #define DEMCR (*((volatile unsigned long *)(0xE000EDFC))) | |
| 341 #define TRCENA 0x01000000 | |
| 342 | |
| 343 struct __FILE { int handle; }; | |
| 344 FILE __stdout; | |
| 345 FILE __stdin; | |
| 346 | |
| 347 int fputc(int ch, FILE *f) { | |
| 348 if (DEMCR & TRCENA) { | |
| 349 while (ITM_Port32(0) == 0); | |
| 350 ITM_Port8(0) = ch; | |
| 351 } | |
| 352 return(ch); | |
| 353 } | |
| 354 */ | |
|
360
fc5e9fdcb156
Added trigger of middle button action in case of a detected shake
ideenmodellierer
parents:
272
diff
changeset
|
355 static uint8_t ButtonAction = ACTION_END; |
|
fc5e9fdcb156
Added trigger of middle button action in case of a detected shake
ideenmodellierer
parents:
272
diff
changeset
|
356 |
|
611
916998f90e39
Suspend MotionDetection events while diver is operationg the OSTC:
Ideenmodellierer
parents:
597
diff
changeset
|
357 void StoreButtonAction(uint8_t action) |
|
360
fc5e9fdcb156
Added trigger of middle button action in case of a detected shake
ideenmodellierer
parents:
272
diff
changeset
|
358 { |
|
fc5e9fdcb156
Added trigger of middle button action in case of a detected shake
ideenmodellierer
parents:
272
diff
changeset
|
359 ButtonAction = action; |
|
fc5e9fdcb156
Added trigger of middle button action in case of a detected shake
ideenmodellierer
parents:
272
diff
changeset
|
360 } |
|
fc5e9fdcb156
Added trigger of middle button action in case of a detected shake
ideenmodellierer
parents:
272
diff
changeset
|
361 |
| 38 | 362 // =============================================================================== |
| 363 // main | |
| 364 /// @brief This function makes initializations and has the nonIRQ endless loop | |
| 365 /// for bluetooth and deco calculations | |
| 366 /// | |
| 367 // =============================================================================== | |
| 368 int main(void) | |
| 369 { | |
| 370 uint32_t pLayerInvisible; | |
| 371 uint16_t totalDiveCounterFound; | |
| 116 | 372 |
|
407
b11e50415982
Bugfix parallel call of external flash functions:
ideenmodellierer
parents:
395
diff
changeset
|
373 SStateList status; |
|
611
916998f90e39
Suspend MotionDetection events while diver is operationg the OSTC:
Ideenmodellierer
parents:
597
diff
changeset
|
374 |
| 38 | 375 set_globalState( StBoot0 ); |
|
152
bc7795161549
Moved button evaluation out of interrupt handler
Ideenmodellierer
parents:
149
diff
changeset
|
376 LastButtonPressed = 0; |
| 38 | 377 |
| 378 HAL_Init(); | |
| 379 HAL_NVIC_SetPriorityGrouping( NVIC_PRIORITYGROUP_2 ); | |
| 380 | |
| 381 SystemClock_Config(); | |
| 382 | |
| 383 MX_GPIO_Init(); | |
| 384 // MX_SmallCPU_NO_Reset_Helper(); //161116 hw | |
|
395
eb7696e0510f
Added start of module configuration after eache modul power on
ideenmodellierer
parents:
384
diff
changeset
|
385 MX_Bluetooth_PowerOff(); /* disable module, needed in case of e.g. a reset event to make sure module is configured from scratch */ |
| 38 | 386 MX_SPI_Init(); |
| 387 MX_UART_Init(); | |
| 388 SDRAM_Config(); | |
| 389 HAL_Delay( 100 ); | |
| 116 | 390 |
| 391 stateRealGetPointerWrite()->lastKnownBatteryPercentage = 0; // damit das nicht in settings kopiert wird. | |
|
1028
3d9552e4997c
Code improvment: line <=> menu id function:
Ideenmodellierer
parents:
998
diff
changeset
|
392 set_settings_to_Standard(EF_SETTINGS); /* initialize setting structure with default value => will be overwritten by flash read operation */ |
| 116 | 393 mod_settings_for_first_start_with_empty_ext_flash(); |
|
1028
3d9552e4997c
Code improvment: line <=> menu id function:
Ideenmodellierer
parents:
998
diff
changeset
|
394 ext_flash_read_settings(EF_SETTINGS); |
| 116 | 395 if( newFirmwareVersionCheckViaSettings() ) // test for old firmware version in loaded settings |
| 396 { | |
| 397 wasFirmwareUpdateCheckBattery = 1; | |
|
765
da8126d5ea9f
After a firmware update, use the factory settings for button sensitivity if these exist, the default settings otherwise.
heinrichsweikamp
parents:
745
diff
changeset
|
398 set_settings_button_to_factory_with_individual_buttonBalance(); // will adapt individual values |
| 116 | 399 } |
| 998 | 400 |
|
1028
3d9552e4997c
Code improvment: line <=> menu id function:
Ideenmodellierer
parents:
998
diff
changeset
|
401 set_new_settings_missing_in_ext_flash(EF_SETTINGS); // includes update of firmware version 161121 |
| 116 | 402 |
| 38 | 403 GFX_init( &pLayerInvisible ); |
| 404 TIM_BACKLIGHT_init(); | |
| 405 | |
| 406 // new 170508: bluetooth on at start | |
| 407 settingsGetPointer()->bluetoothActive = 1; | |
| 408 MX_Bluetooth_PowerOn(); | |
|
395
eb7696e0510f
Added start of module configuration after eache modul power on
ideenmodellierer
parents:
384
diff
changeset
|
409 tComm_StartBlueModConfig(); |
| 38 | 410 |
| 411 /* | |
| 412 if( (hardwareDataGetPointer()->primarySerial == 20+18) | |
| 413 || (hardwareDataGetPointer()->primarySerial == 20+25) | |
| 414 || (hardwareDataGetPointer()->primarySerial == 20+27)) | |
| 415 { | |
| 416 MX_Bluetooth_PowerOn(); | |
| 417 tComm_Set_Bluetooth_Name(1); | |
| 418 } | |
| 419 */ | |
|
1028
3d9552e4997c
Code improvment: line <=> menu id function:
Ideenmodellierer
parents:
998
diff
changeset
|
420 errorsInSettings = check_and_correct_settings(EF_SETTINGS); |
| 38 | 421 createDiveSettings(); |
| 422 | |
| 423 #ifdef QUICK_SLEEP | |
| 424 settingsGetPointer()->timeoutSurfacemode = 20; | |
| 425 #else | |
| 426 settingsGetPointer()->timeoutSurfacemode = 120; | |
| 427 #endif | |
| 428 | |
| 429 #ifdef DEMOMODE | |
| 430 demoConfigureSettings(); | |
| 431 TIM_DEMO_init(); | |
| 432 #endif | |
| 433 | |
| 434 // ----------------------------- | |
| 435 | |
| 436 display_power_on__1_of_2__pre_RGB(); | |
| 437 GFX_LTDC_Init(); | |
| 438 GFX_LTDC_LayerDefaultInit( TOP_LAYER, pLayerInvisible ); | |
| 439 GFX_LTDC_LayerDefaultInit( BACKGRD_LAYER, pLayerInvisible ); | |
| 440 GFX_SetFramesTopBottom( pLayerInvisible, pLayerInvisible, 480 ); | |
| 441 HAL_Delay( 20 ); | |
| 442 display_power_on__2_of_2__post_RGB(); | |
| 443 GFX_use_colorscheme( settingsGetPointer()->tX_colorscheme ); | |
| 444 | |
| 445 tHome_init(); | |
| 446 tI_init(); | |
| 447 tM_init(); | |
| 448 tMenuEdit_init(); | |
| 449 tInfoLog_init(); | |
| 450 tComm_init(); | |
| 451 DataEX_init(); | |
|
476
19cff811616d
Balance value of button responsitivness were not considered during firmware startup:
ideenmodellierer
parents:
447
diff
changeset
|
452 settingsHelperButtonSens_keepPercentageValues(settingsGetPointer()->ButtonResponsiveness[3], settingsGetPointer()->ButtonResponsiveness); |
| 38 | 453 setButtonResponsiveness( settingsGetPointer()->ButtonResponsiveness ); |
| 454 set_globalState_tHome(); | |
| 455 | |
| 456 GFX_start_VSYNC_IRQ(); | |
| 457 tCCR_init(); | |
| 458 | |
| 459 GFX_logoAutoOff(); | |
| 460 EXTILine_Buttons_Config(); | |
| 461 | |
|
447
adc4ccbebbb5
Added compile switch var firmware variant which does trust the memory log => does not check the log consistency at startu (used for test purpose)
ideenmodellierer
parents:
446
diff
changeset
|
462 #ifdef TRUST_LOG_CONSISTENCY |
|
adc4ccbebbb5
Added compile switch var firmware variant which does trust the memory log => does not check the log consistency at startu (used for test purpose)
ideenmodellierer
parents:
446
diff
changeset
|
463 if(!ext_dive_log_consistent()) /* only repair log if an invalid entry was detected */ |
|
adc4ccbebbb5
Added compile switch var firmware variant which does trust the memory log => does not check the log consistency at startu (used for test purpose)
ideenmodellierer
parents:
446
diff
changeset
|
464 { |
|
adc4ccbebbb5
Added compile switch var firmware variant which does trust the memory log => does not check the log consistency at startu (used for test purpose)
ideenmodellierer
parents:
446
diff
changeset
|
465 ext_flash_repair_dive_log(); |
|
adc4ccbebbb5
Added compile switch var firmware variant which does trust the memory log => does not check the log consistency at startu (used for test purpose)
ideenmodellierer
parents:
446
diff
changeset
|
466 } |
|
adc4ccbebbb5
Added compile switch var firmware variant which does trust the memory log => does not check the log consistency at startu (used for test purpose)
ideenmodellierer
parents:
446
diff
changeset
|
467 |
|
adc4ccbebbb5
Added compile switch var firmware variant which does trust the memory log => does not check the log consistency at startu (used for test purpose)
ideenmodellierer
parents:
446
diff
changeset
|
468 #else /* always check and repair log */ |
| 38 | 469 ext_flash_repair_dive_log(); |
| 470 //ext_flash_repair_SPECIAL_dive_numbers_starting_count_with(1); | |
|
447
adc4ccbebbb5
Added compile switch var firmware variant which does trust the memory log => does not check the log consistency at startu (used for test purpose)
ideenmodellierer
parents:
446
diff
changeset
|
471 #endif |
| 38 | 472 totalDiveCounterFound = logbook_lastDive_diveNumber(); |
| 473 if( settingsGetPointer()->totalDiveCounter < totalDiveCounterFound ) | |
| 474 settingsGetPointer()->totalDiveCounter = totalDiveCounterFound; | |
| 475 | |
| 476 if( settingsGetPointer()->debugModeOnStart ) | |
| 477 { | |
| 478 settingsGetPointer()->debugModeOnStart = 0; | |
|
1028
3d9552e4997c
Code improvment: line <=> menu id function:
Ideenmodellierer
parents:
998
diff
changeset
|
479 ext_flash_write_settings(EF_SETTINGS,0); |
| 38 | 480 setDebugMode(); |
| 481 openInfo( StIDEBUG ); | |
| 482 } | |
|
368
50ea68c7a153
Added menu item for motion detection. There are several possibility to use motion detection for user action input. To select of the a new menu entry has been added to the Sys2 =>Custom View Menu (Variables in german)
ideenmodellierer
parents:
367
diff
changeset
|
483 InitMotionDetection(); |
| 38 | 484 |
|
263
a6c0375bc950
Forward 100ms time stamp to RTE and handle logbook in main loop
ideenmodellierer
parents:
250
diff
changeset
|
485 TIM_init(); /* start cylic 100ms task */ |
|
a6c0375bc950
Forward 100ms time stamp to RTE and handle logbook in main loop
ideenmodellierer
parents:
250
diff
changeset
|
486 |
|
740
5078da3845c0
Added button lock after wakeup in surface mode:
Ideenmodellierer
parents:
718
diff
changeset
|
487 if( settingsGetPointer()->buttonLockActive ) |
|
5078da3845c0
Added button lock after wakeup in surface mode:
Ideenmodellierer
parents:
718
diff
changeset
|
488 { |
|
5078da3845c0
Added button lock after wakeup in surface mode:
Ideenmodellierer
parents:
718
diff
changeset
|
489 ButtonLockState = LOCK_FIRST_PRESS; |
|
5078da3845c0
Added button lock after wakeup in surface mode:
Ideenmodellierer
parents:
718
diff
changeset
|
490 } |
|
5078da3845c0
Added button lock after wakeup in surface mode:
Ideenmodellierer
parents:
718
diff
changeset
|
491 |
| 38 | 492 /* @brief main LOOP |
| 493 * | |
| 494 * this is executed while no IRQ interrupts it | |
| 495 * - deco calculation | |
| 496 * - bluetooth | |
| 497 * and resetToFirmwareUpdate() | |
| 498 * because tComm_control() does not exit before disconnection | |
| 499 */ | |
| 500 while( 1 ) | |
| 501 { | |
| 896 | 502 #ifdef T7_DEBUG_RUNTIME |
| 503 startTimeMainLoop = HAL_GetTick(); | |
| 504 #endif | |
| 38 | 505 if( bootToBootloader ) |
| 506 resetToFirmwareUpdate(); | |
| 507 | |
| 508 tCCR_control(); | |
| 1032 | 509 |
| 38 | 510 if( tComm_control() )// will stop while loop if tComm Mode started until exit from UART |
| 511 { | |
| 512 createDiveSettings(); | |
| 513 updateMenu(); | |
|
1028
3d9552e4997c
Code improvment: line <=> menu id function:
Ideenmodellierer
parents:
998
diff
changeset
|
514 ext_flash_write_settings(EF_SETTINGS,0); |
| 38 | 515 } |
|
407
b11e50415982
Bugfix parallel call of external flash functions:
ideenmodellierer
parents:
395
diff
changeset
|
516 |
|
b11e50415982
Bugfix parallel call of external flash functions:
ideenmodellierer
parents:
395
diff
changeset
|
517 /* check if tasks depending on global state are pending */ |
|
b11e50415982
Bugfix parallel call of external flash functions:
ideenmodellierer
parents:
395
diff
changeset
|
518 get_globalStateList(&status); |
|
b11e50415982
Bugfix parallel call of external flash functions:
ideenmodellierer
parents:
395
diff
changeset
|
519 if(status.base == BaseHome) |
|
b11e50415982
Bugfix parallel call of external flash functions:
ideenmodellierer
parents:
395
diff
changeset
|
520 { |
| 427 | 521 tMenuEdit_writeSettingsToFlash(); |
|
407
b11e50415982
Bugfix parallel call of external flash functions:
ideenmodellierer
parents:
395
diff
changeset
|
522 } |
|
b11e50415982
Bugfix parallel call of external flash functions:
ideenmodellierer
parents:
395
diff
changeset
|
523 |
|
b11e50415982
Bugfix parallel call of external flash functions:
ideenmodellierer
parents:
395
diff
changeset
|
524 DataEX_merge_devicedata(); /* data is exchanged at startup and every 10 minutes => check if something changed */ |
|
b11e50415982
Bugfix parallel call of external flash functions:
ideenmodellierer
parents:
395
diff
changeset
|
525 |
| 38 | 526 deco_loop(); |
|
740
5078da3845c0
Added button lock after wakeup in surface mode:
Ideenmodellierer
parents:
718
diff
changeset
|
527 if((ButtonLockState) && (stateUsed->mode == MODE_SURFACE)) |
|
5078da3845c0
Added button lock after wakeup in surface mode:
Ideenmodellierer
parents:
718
diff
changeset
|
528 { |
|
5078da3845c0
Added button lock after wakeup in surface mode:
Ideenmodellierer
parents:
718
diff
changeset
|
529 TriggerButtonUnlock(); |
|
5078da3845c0
Added button lock after wakeup in surface mode:
Ideenmodellierer
parents:
718
diff
changeset
|
530 } |
|
5078da3845c0
Added button lock after wakeup in surface mode:
Ideenmodellierer
parents:
718
diff
changeset
|
531 else |
|
5078da3845c0
Added button lock after wakeup in surface mode:
Ideenmodellierer
parents:
718
diff
changeset
|
532 { |
|
5078da3845c0
Added button lock after wakeup in surface mode:
Ideenmodellierer
parents:
718
diff
changeset
|
533 TriggerButtonAction(); |
|
5078da3845c0
Added button lock after wakeup in surface mode:
Ideenmodellierer
parents:
718
diff
changeset
|
534 } |
| 1034 | 535 #ifdef ENABLE_PULSE_SENSOR_BT |
|
1033
5f66e44d69f0
Added functionality needed for subscription of standard Bluetooth pulse service notifications
Ideenmodellierer
parents:
1032
diff
changeset
|
536 cv_heartbeat_HandleData(); |
| 1034 | 537 #endif |
| 1036 | 538 |
| 539 #ifdef ENABLE_USART_RADIO | |
| 540 demo_HandleData(); | |
| 541 #endif | |
| 623 | 542 if(DoHousekeeping) |
| 543 { | |
| 544 DoHousekeeping = housekeepingFrame(); | |
| 545 } | |
|
395
eb7696e0510f
Added start of module configuration after eache modul power on
ideenmodellierer
parents:
384
diff
changeset
|
546 if(DoDisplayRefresh) /* set every 100ms by timer interrupt */ |
|
217
ce05c801b002
Moved display refresh and button action function from tim callback to main loop
ideenmodellierer
parents:
206
diff
changeset
|
547 { |
| 1034 | 548 #ifdef ENABLE_PULSE_SENSOR_BT |
| 1032 | 549 cv_heartbeat_Control(); |
| 1034 | 550 #endif |
|
217
ce05c801b002
Moved display refresh and button action function from tim callback to main loop
ideenmodellierer
parents:
206
diff
changeset
|
551 DoDisplayRefresh = 0; |
|
615
556df4a8f418
Moved non critical functions from timer interrupt to main loop:
Ideenmodellierer
parents:
611
diff
changeset
|
552 |
| 662 | 553 updateSetpointStateUsed(); |
|
615
556df4a8f418
Moved non critical functions from timer interrupt to main loop:
Ideenmodellierer
parents:
611
diff
changeset
|
554 if(stateUsed == stateSimGetPointer()) |
|
556df4a8f418
Moved non critical functions from timer interrupt to main loop:
Ideenmodellierer
parents:
611
diff
changeset
|
555 { |
|
556df4a8f418
Moved non critical functions from timer interrupt to main loop:
Ideenmodellierer
parents:
611
diff
changeset
|
556 simulation_UpdateLifeData(1); |
|
556df4a8f418
Moved non critical functions from timer interrupt to main loop:
Ideenmodellierer
parents:
611
diff
changeset
|
557 } |
|
556df4a8f418
Moved non critical functions from timer interrupt to main loop:
Ideenmodellierer
parents:
611
diff
changeset
|
558 check_warning(); |
|
556df4a8f418
Moved non critical functions from timer interrupt to main loop:
Ideenmodellierer
parents:
611
diff
changeset
|
559 updateMiniLiveLogbook(1); |
| 896 | 560 #ifdef T7_DEBUG_RUNTIME |
| 561 startTimeGfxLoop = HAL_GetTick(); | |
| 562 #endif | |
|
217
ce05c801b002
Moved display refresh and button action function from tim callback to main loop
ideenmodellierer
parents:
206
diff
changeset
|
563 RefreshDisplay(); |
| 896 | 564 #ifdef T7_DEBUG_RUNTIME |
| 565 timeGfxLoop = time_elapsed_ms(startTimeGfxLoop, HAL_GetTick()); | |
| 566 #endif | |
| 623 | 567 TimeoutControl(); /* exit menus if needed */ |
|
422
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
568 |
|
549
469e93f8633e
Only execute motion detection functions if features is enabled:
Ideenmodellierer
parents:
540
diff
changeset
|
569 #ifdef ENABLE_MOTION_CONTROL |
|
469e93f8633e
Only execute motion detection functions if features is enabled:
Ideenmodellierer
parents:
540
diff
changeset
|
570 if((stateUsed->mode == MODE_DIVE) && (settingsGetPointer()->MotionDetection != MOTION_DETECT_OFF)) /* handle motion events in divemode only */ |
|
368
50ea68c7a153
Added menu item for motion detection. There are several possibility to use motion detection for user action input. To select of the a new menu entry has been added to the Sys2 =>Custom View Menu (Variables in german)
ideenmodellierer
parents:
367
diff
changeset
|
571 { |
|
611
916998f90e39
Suspend MotionDetection events while diver is operationg the OSTC:
Ideenmodellierer
parents:
597
diff
changeset
|
572 if(get_globalState() != StD) |
|
549
469e93f8633e
Only execute motion detection functions if features is enabled:
Ideenmodellierer
parents:
540
diff
changeset
|
573 { |
|
642
c737cf5d9067
Do not show focus indicator in case motion detection is suspended:
Ideenmodellierer
parents:
625
diff
changeset
|
574 suspendMotionDetection(10); /* do not change custom views while divers is operating the computer */ |
|
611
916998f90e39
Suspend MotionDetection events while diver is operationg the OSTC:
Ideenmodellierer
parents:
597
diff
changeset
|
575 } |
|
916998f90e39
Suspend MotionDetection events while diver is operationg the OSTC:
Ideenmodellierer
parents:
597
diff
changeset
|
576 HandleMotionDetection(); |
|
368
50ea68c7a153
Added menu item for motion detection. There are several possibility to use motion detection for user action input. To select of the a new menu entry has been added to the Sys2 =>Custom View Menu (Variables in german)
ideenmodellierer
parents:
367
diff
changeset
|
577 } |
|
549
469e93f8633e
Only execute motion detection functions if features is enabled:
Ideenmodellierer
parents:
540
diff
changeset
|
578 #endif |
| 835 | 579 /* Autofocus for T3 view */ |
| 580 if((settingsGetPointer()->cvAutofocus) && (settingsGetPointer()->design == 3) && (get_globalState() == StD) && (stateUsed->mode == MODE_DIVE)) | |
| 581 { | |
| 582 t3_handleAutofocus(); | |
| 583 } | |
|
272
74a8296a2318
cleanup: simplify stateUsed usage
Jan Mulder <jlmulder@xs4all.nl>
parents:
270
diff
changeset
|
584 #ifdef SIM_WRITES_LOGBOOK |
|
270
2e58a4094770
feature, debug: make simulator write a logbook entry
Jan Mulder <jlmulder@xs4all.nl>
parents:
263
diff
changeset
|
585 if(stateUsed == stateSimGetPointer()) |
|
2e58a4094770
feature, debug: make simulator write a logbook entry
Jan Mulder <jlmulder@xs4all.nl>
parents:
263
diff
changeset
|
586 logbook_InitAndWrite(stateUsed); |
|
2e58a4094770
feature, debug: make simulator write a logbook entry
Jan Mulder <jlmulder@xs4all.nl>
parents:
263
diff
changeset
|
587 #endif |
|
263
a6c0375bc950
Forward 100ms time stamp to RTE and handle logbook in main loop
ideenmodellierer
parents:
250
diff
changeset
|
588 if(stateUsed == stateRealGetPointer()) /* Handle log entries while in dive mode*/ |
| 941 | 589 logbook_InitAndWrite((SDiveState*)stateUsed); |
|
217
ce05c801b002
Moved display refresh and button action function from tim callback to main loop
ideenmodellierer
parents:
206
diff
changeset
|
590 } |
| 896 | 591 #ifdef T7_DEBUG_RUNTIME |
| 592 timeMainLoop = time_elapsed_ms(startTimeMainLoop, HAL_GetTick()); | |
| 593 #endif | |
| 38 | 594 } |
| 595 } | |
| 596 | |
|
360
fc5e9fdcb156
Added trigger of middle button action in case of a detected shake
ideenmodellierer
parents:
272
diff
changeset
|
597 |
|
fc5e9fdcb156
Added trigger of middle button action in case of a detected shake
ideenmodellierer
parents:
272
diff
changeset
|
598 |
|
fc5e9fdcb156
Added trigger of middle button action in case of a detected shake
ideenmodellierer
parents:
272
diff
changeset
|
599 |
| 38 | 600 // =============================================================================== |
| 601 // timer IRQ | |
| 602 /// @brief this is called periodically | |
| 603 /// | |
| 604 /// - refresh screen (the actual change is done in the VSYNC IRQ) | |
| 605 /// - start data transfer with RTE / small CPU (DateEX....) | |
| 606 /// - update logbook | |
| 607 /// - timeouts | |
| 608 /// .... | |
| 609 /// | |
| 610 /// all this in three steps / switch() routines in a given order | |
| 611 /// as the previous switch() might influence the next functions | |
| 612 /// to be called | |
| 613 /// | |
| 614 // =============================================================================== | |
| 348 | 615 |
| 616 //#define NO_TIMEOUT | |
| 38 | 617 void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) |
| 618 { | |
| 619 #ifdef DEMOMODE | |
| 620 if(htim->Instance==TIM7) | |
| 621 { | |
| 622 HAL_GPIO_EXTI_Callback(demoGetCommand()); | |
| 623 return; | |
| 624 } | |
| 625 #endif | |
| 626 SStateList status; | |
|
422
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
627 _Bool modeChange = 0; |
|
263
a6c0375bc950
Forward 100ms time stamp to RTE and handle logbook in main loop
ideenmodellierer
parents:
250
diff
changeset
|
628 |
|
a6c0375bc950
Forward 100ms time stamp to RTE and handle logbook in main loop
ideenmodellierer
parents:
250
diff
changeset
|
629 BaseTick100ms = HAL_GetTick(); /* store start of 100ms cycle */ |
|
a6c0375bc950
Forward 100ms time stamp to RTE and handle logbook in main loop
ideenmodellierer
parents:
250
diff
changeset
|
630 |
| 38 | 631 if(returnFromCommCleanUpRequest) |
| 632 { | |
| 633 tComm_exit(); | |
| 634 returnFromCommCleanUpRequest = 0; | |
| 635 } | |
| 636 | |
| 637 get_globalStateList(&status); | |
| 638 | |
| 639 switch(status.base) | |
| 640 { | |
| 641 case BaseHome: | |
| 642 case BaseMenu: | |
| 643 case BaseInfo: | |
| 644 DateEx_copy_to_dataOut(); | |
| 645 DataEX_copy_to_LifeData(&modeChange); | |
| 646 //foto session :-) stateRealGetPointerWrite()->lifeData.battery_charge = 99; | |
| 647 //foto session :-) stateSimGetPointerWrite()->lifeData.battery_charge = 99; | |
| 648 DataEX_copy_to_deco(); | |
|
132
135eae957389
Add compile switch to disable optimization for specific function
Ideenmodellierer
parents:
116
diff
changeset
|
649 DataEX_call(); |
|
135eae957389
Add compile switch to disable optimization for specific function
Ideenmodellierer
parents:
116
diff
changeset
|
650 |
| 38 | 651 timer_UpdateSecond(1); |
|
132
135eae957389
Add compile switch to disable optimization for specific function
Ideenmodellierer
parents:
116
diff
changeset
|
652 base_tempLightLevel = TIM_BACKLIGHT_adjust(); |
| 38 | 653 tCCR_tick(); |
| 654 tHome_tick(); | |
| 655 break; | |
| 656 case BaseStop: | |
| 657 DateEx_copy_to_dataOut(); | |
| 658 DataEX_call(); | |
| 659 DataEX_control_connection_while_asking_for_sleep(); | |
| 660 break; | |
| 661 default: | |
| 662 case BaseComm: | |
| 663 if(get_globalState() == StUART_RTECONNECT) | |
| 664 { | |
| 665 DateEx_copy_to_dataOut(); | |
| 666 DataEX_call(); | |
| 667 DataEX_copy_to_LifeData(0); | |
| 668 } | |
| 669 break; | |
| 670 } | |
| 671 | |
|
422
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
672 get_globalStateList(&status); |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
673 if(modeChange) |
| 38 | 674 { |
|
422
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
675 TimeoutControlRequestModechange(); |
| 38 | 676 } |
|
217
ce05c801b002
Moved display refresh and button action function from tim callback to main loop
ideenmodellierer
parents:
206
diff
changeset
|
677 if(status.base == BaseComm) /* main loop not serviced in com mode */ |
| 38 | 678 { |
|
217
ce05c801b002
Moved display refresh and button action function from tim callback to main loop
ideenmodellierer
parents:
206
diff
changeset
|
679 tComm_refresh(); |
|
ce05c801b002
Moved display refresh and button action function from tim callback to main loop
ideenmodellierer
parents:
206
diff
changeset
|
680 } |
|
ce05c801b002
Moved display refresh and button action function from tim callback to main loop
ideenmodellierer
parents:
206
diff
changeset
|
681 else |
|
ce05c801b002
Moved display refresh and button action function from tim callback to main loop
ideenmodellierer
parents:
206
diff
changeset
|
682 { |
|
ce05c801b002
Moved display refresh and button action function from tim callback to main loop
ideenmodellierer
parents:
206
diff
changeset
|
683 DoDisplayRefresh = 1; |
| 38 | 684 } |
| 685 } | |
| 686 | |
| 687 | |
| 688 /* button and VSYNC IRQ | |
| 689 * | |
| 690 * VSYNC will switch foreground and background picture | |
| 691 * if demanded. see GFX_change_LTDC() | |
| 692 * | |
| 693 */ | |
| 694 // =============================================================================== | |
| 695 // HAL_GPIO_EXTI_Callback | |
| 696 /// @brief button and VSYNC IRQ | |
| 697 /// | |
| 698 /// VSYNC will switch foreground and background picture if demanded - | |
| 699 /// see GFX_change_LTDC() | |
| 700 /// | |
| 701 // =============================================================================== | |
|
95
2a74647d28d1
Debounce. Bounced buttons fixed.
Dmitry Romanov <kitt@bk.ru>
parents:
91
diff
changeset
|
702 void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) { |
|
2a74647d28d1
Debounce. Bounced buttons fixed.
Dmitry Romanov <kitt@bk.ru>
parents:
91
diff
changeset
|
703 if (!GPIO_Pin) |
|
2a74647d28d1
Debounce. Bounced buttons fixed.
Dmitry Romanov <kitt@bk.ru>
parents:
91
diff
changeset
|
704 return; |
| 38 | 705 |
|
95
2a74647d28d1
Debounce. Bounced buttons fixed.
Dmitry Romanov <kitt@bk.ru>
parents:
91
diff
changeset
|
706 if (GPIO_Pin == VSYNC_IRQ_PIN) // rechts, unten |
|
2a74647d28d1
Debounce. Bounced buttons fixed.
Dmitry Romanov <kitt@bk.ru>
parents:
91
diff
changeset
|
707 { |
|
2a74647d28d1
Debounce. Bounced buttons fixed.
Dmitry Romanov <kitt@bk.ru>
parents:
91
diff
changeset
|
708 GFX_change_LTDC(); |
| 623 | 709 DoHousekeeping = 1; |
|
95
2a74647d28d1
Debounce. Bounced buttons fixed.
Dmitry Romanov <kitt@bk.ru>
parents:
91
diff
changeset
|
710 /* |
|
2a74647d28d1
Debounce. Bounced buttons fixed.
Dmitry Romanov <kitt@bk.ru>
parents:
91
diff
changeset
|
711 #ifdef DEMOMODE |
|
2a74647d28d1
Debounce. Bounced buttons fixed.
Dmitry Romanov <kitt@bk.ru>
parents:
91
diff
changeset
|
712 static uint8_t countCall = 0; |
|
2a74647d28d1
Debounce. Bounced buttons fixed.
Dmitry Romanov <kitt@bk.ru>
parents:
91
diff
changeset
|
713 if(countCall++ < 10) |
|
2a74647d28d1
Debounce. Bounced buttons fixed.
Dmitry Romanov <kitt@bk.ru>
parents:
91
diff
changeset
|
714 return; |
|
2a74647d28d1
Debounce. Bounced buttons fixed.
Dmitry Romanov <kitt@bk.ru>
parents:
91
diff
changeset
|
715 countCall = 0; |
|
2a74647d28d1
Debounce. Bounced buttons fixed.
Dmitry Romanov <kitt@bk.ru>
parents:
91
diff
changeset
|
716 uint8_t buttonAction = demoGetCommand(); |
|
2a74647d28d1
Debounce. Bounced buttons fixed.
Dmitry Romanov <kitt@bk.ru>
parents:
91
diff
changeset
|
717 if(buttonAction) |
|
2a74647d28d1
Debounce. Bounced buttons fixed.
Dmitry Romanov <kitt@bk.ru>
parents:
91
diff
changeset
|
718 GPIO_Pin = buttonAction; |
|
2a74647d28d1
Debounce. Bounced buttons fixed.
Dmitry Romanov <kitt@bk.ru>
parents:
91
diff
changeset
|
719 else |
|
2a74647d28d1
Debounce. Bounced buttons fixed.
Dmitry Romanov <kitt@bk.ru>
parents:
91
diff
changeset
|
720 #endif |
|
2a74647d28d1
Debounce. Bounced buttons fixed.
Dmitry Romanov <kitt@bk.ru>
parents:
91
diff
changeset
|
721 */ |
| 697 | 722 |
|
95
2a74647d28d1
Debounce. Bounced buttons fixed.
Dmitry Romanov <kitt@bk.ru>
parents:
91
diff
changeset
|
723 } |
| 697 | 724 if((GPIO_Pin == BUTTON_ENTER_PIN) || (GPIO_Pin == BUTTON_NEXT_PIN) || (GPIO_Pin == BUTTON_BACK_PIN)) |
| 725 { | |
| 726 LastButtonPressed = GPIO_Pin; | |
| 727 LastButtonPressedTick = HAL_GetTick(); | |
| 728 } | |
| 729 | |
| 730 EvaluateButton(); | |
| 38 | 731 |
| 732 #ifdef DEMOMODE | |
|
95
2a74647d28d1
Debounce. Bounced buttons fixed.
Dmitry Romanov <kitt@bk.ru>
parents:
91
diff
changeset
|
733 uint8_t demoMachineCall = 0; |
|
2a74647d28d1
Debounce. Bounced buttons fixed.
Dmitry Romanov <kitt@bk.ru>
parents:
91
diff
changeset
|
734 if(GPIO_Pin & 0x80) |
|
2a74647d28d1
Debounce. Bounced buttons fixed.
Dmitry Romanov <kitt@bk.ru>
parents:
91
diff
changeset
|
735 { |
|
2a74647d28d1
Debounce. Bounced buttons fixed.
Dmitry Romanov <kitt@bk.ru>
parents:
91
diff
changeset
|
736 demoMachineCall = 1; |
|
2a74647d28d1
Debounce. Bounced buttons fixed.
Dmitry Romanov <kitt@bk.ru>
parents:
91
diff
changeset
|
737 GPIO_Pin &= 0x7F; |
|
2a74647d28d1
Debounce. Bounced buttons fixed.
Dmitry Romanov <kitt@bk.ru>
parents:
91
diff
changeset
|
738 } |
| 38 | 739 #endif |
|
152
bc7795161549
Moved button evaluation out of interrupt handler
Ideenmodellierer
parents:
149
diff
changeset
|
740 } |
| 38 | 741 |
|
217
ce05c801b002
Moved display refresh and button action function from tim callback to main loop
ideenmodellierer
parents:
206
diff
changeset
|
742 static void RefreshDisplay() |
|
ce05c801b002
Moved display refresh and button action function from tim callback to main loop
ideenmodellierer
parents:
206
diff
changeset
|
743 { |
|
ce05c801b002
Moved display refresh and button action function from tim callback to main loop
ideenmodellierer
parents:
206
diff
changeset
|
744 SStateList status; |
|
ce05c801b002
Moved display refresh and button action function from tim callback to main loop
ideenmodellierer
parents:
206
diff
changeset
|
745 get_globalStateList(&status); |
| 1032 | 746 |
| 1035 | 747 #ifdef ENABLE_LOGGER_WINDOW |
| 748 if((status.base != 0) && (get_globalState() != StILOGGER) && (InfoLogger_isUpdated())) | |
| 1032 | 749 { |
| 750 openInfo_Logger(); | |
| 751 get_globalStateList(&status); | |
| 752 } | |
| 1035 | 753 #endif |
| 1032 | 754 |
|
217
ce05c801b002
Moved display refresh and button action function from tim callback to main loop
ideenmodellierer
parents:
206
diff
changeset
|
755 switch(status.base) |
|
ce05c801b002
Moved display refresh and button action function from tim callback to main loop
ideenmodellierer
parents:
206
diff
changeset
|
756 { |
|
ce05c801b002
Moved display refresh and button action function from tim callback to main loop
ideenmodellierer
parents:
206
diff
changeset
|
757 case BaseHome: |
|
ce05c801b002
Moved display refresh and button action function from tim callback to main loop
ideenmodellierer
parents:
206
diff
changeset
|
758 tHome_refresh(); |
|
ce05c801b002
Moved display refresh and button action function from tim callback to main loop
ideenmodellierer
parents:
206
diff
changeset
|
759 tM_check_content(); |
|
ce05c801b002
Moved display refresh and button action function from tim callback to main loop
ideenmodellierer
parents:
206
diff
changeset
|
760 break; |
|
ce05c801b002
Moved display refresh and button action function from tim callback to main loop
ideenmodellierer
parents:
206
diff
changeset
|
761 case BaseMenu: |
|
ce05c801b002
Moved display refresh and button action function from tim callback to main loop
ideenmodellierer
parents:
206
diff
changeset
|
762 tM_refresh_live_content(); |
|
ce05c801b002
Moved display refresh and button action function from tim callback to main loop
ideenmodellierer
parents:
206
diff
changeset
|
763 tMenuEdit_refresh_live_content(); |
|
ce05c801b002
Moved display refresh and button action function from tim callback to main loop
ideenmodellierer
parents:
206
diff
changeset
|
764 break; |
|
ce05c801b002
Moved display refresh and button action function from tim callback to main loop
ideenmodellierer
parents:
206
diff
changeset
|
765 case BaseInfo: |
|
718
b9f699d2e3d0
Updated menu structure to support new sensor information page:
Ideenmodellierer
parents:
697
diff
changeset
|
766 tInfo_refresh(); |
|
217
ce05c801b002
Moved display refresh and button action function from tim callback to main loop
ideenmodellierer
parents:
206
diff
changeset
|
767 break; |
|
718
b9f699d2e3d0
Updated menu structure to support new sensor information page:
Ideenmodellierer
parents:
697
diff
changeset
|
768 case BaseComm: /* refresh already done in time callback */ |
|
217
ce05c801b002
Moved display refresh and button action function from tim callback to main loop
ideenmodellierer
parents:
206
diff
changeset
|
769 break; |
|
ce05c801b002
Moved display refresh and button action function from tim callback to main loop
ideenmodellierer
parents:
206
diff
changeset
|
770 default: |
|
ce05c801b002
Moved display refresh and button action function from tim callback to main loop
ideenmodellierer
parents:
206
diff
changeset
|
771 if(get_globalState() == StStop) |
|
ce05c801b002
Moved display refresh and button action function from tim callback to main loop
ideenmodellierer
parents:
206
diff
changeset
|
772 tHome_sleepmode_fun(); |
|
ce05c801b002
Moved display refresh and button action function from tim callback to main loop
ideenmodellierer
parents:
206
diff
changeset
|
773 break; |
|
ce05c801b002
Moved display refresh and button action function from tim callback to main loop
ideenmodellierer
parents:
206
diff
changeset
|
774 } |
|
ce05c801b002
Moved display refresh and button action function from tim callback to main loop
ideenmodellierer
parents:
206
diff
changeset
|
775 } |
|
ce05c801b002
Moved display refresh and button action function from tim callback to main loop
ideenmodellierer
parents:
206
diff
changeset
|
776 |
|
740
5078da3845c0
Added button lock after wakeup in surface mode:
Ideenmodellierer
parents:
718
diff
changeset
|
777 static void TriggerButtonUnlock() |
|
5078da3845c0
Added button lock after wakeup in surface mode:
Ideenmodellierer
parents:
718
diff
changeset
|
778 { |
|
5078da3845c0
Added button lock after wakeup in surface mode:
Ideenmodellierer
parents:
718
diff
changeset
|
779 static uint32_t lastInput = 0; |
|
5078da3845c0
Added button lock after wakeup in surface mode:
Ideenmodellierer
parents:
718
diff
changeset
|
780 uint8_t action = ButtonAction; |
|
5078da3845c0
Added button lock after wakeup in surface mode:
Ideenmodellierer
parents:
718
diff
changeset
|
781 |
|
5078da3845c0
Added button lock after wakeup in surface mode:
Ideenmodellierer
parents:
718
diff
changeset
|
782 if(action != ACTION_END) |
|
5078da3845c0
Added button lock after wakeup in surface mode:
Ideenmodellierer
parents:
718
diff
changeset
|
783 { |
|
5078da3845c0
Added button lock after wakeup in surface mode:
Ideenmodellierer
parents:
718
diff
changeset
|
784 if(((time_elapsed_ms(lastInput, HAL_GetTick()) < 2000)) || (ButtonLockState == LOCK_FIRST_PRESS)) |
|
5078da3845c0
Added button lock after wakeup in surface mode:
Ideenmodellierer
parents:
718
diff
changeset
|
785 { |
|
5078da3845c0
Added button lock after wakeup in surface mode:
Ideenmodellierer
parents:
718
diff
changeset
|
786 switch(ButtonLockState) |
|
5078da3845c0
Added button lock after wakeup in surface mode:
Ideenmodellierer
parents:
718
diff
changeset
|
787 { |
|
5078da3845c0
Added button lock after wakeup in surface mode:
Ideenmodellierer
parents:
718
diff
changeset
|
788 case LOCK_FIRST_PRESS: |
|
5078da3845c0
Added button lock after wakeup in surface mode:
Ideenmodellierer
parents:
718
diff
changeset
|
789 case LOCK_1: if(action == ACTION_BUTTON_ENTER) |
|
5078da3845c0
Added button lock after wakeup in surface mode:
Ideenmodellierer
parents:
718
diff
changeset
|
790 { |
|
5078da3845c0
Added button lock after wakeup in surface mode:
Ideenmodellierer
parents:
718
diff
changeset
|
791 ButtonLockState = LOCK_2; |
|
5078da3845c0
Added button lock after wakeup in surface mode:
Ideenmodellierer
parents:
718
diff
changeset
|
792 } |
|
5078da3845c0
Added button lock after wakeup in surface mode:
Ideenmodellierer
parents:
718
diff
changeset
|
793 else |
|
5078da3845c0
Added button lock after wakeup in surface mode:
Ideenmodellierer
parents:
718
diff
changeset
|
794 { |
|
5078da3845c0
Added button lock after wakeup in surface mode:
Ideenmodellierer
parents:
718
diff
changeset
|
795 ButtonLockState = LOCK_1; |
|
5078da3845c0
Added button lock after wakeup in surface mode:
Ideenmodellierer
parents:
718
diff
changeset
|
796 } |
|
5078da3845c0
Added button lock after wakeup in surface mode:
Ideenmodellierer
parents:
718
diff
changeset
|
797 break; |
|
5078da3845c0
Added button lock after wakeup in surface mode:
Ideenmodellierer
parents:
718
diff
changeset
|
798 case LOCK_2: if(action == ACTION_BUTTON_NEXT) |
|
5078da3845c0
Added button lock after wakeup in surface mode:
Ideenmodellierer
parents:
718
diff
changeset
|
799 { |
|
5078da3845c0
Added button lock after wakeup in surface mode:
Ideenmodellierer
parents:
718
diff
changeset
|
800 ButtonLockState = LOCK_3; |
|
5078da3845c0
Added button lock after wakeup in surface mode:
Ideenmodellierer
parents:
718
diff
changeset
|
801 } |
|
5078da3845c0
Added button lock after wakeup in surface mode:
Ideenmodellierer
parents:
718
diff
changeset
|
802 else |
|
5078da3845c0
Added button lock after wakeup in surface mode:
Ideenmodellierer
parents:
718
diff
changeset
|
803 { |
|
5078da3845c0
Added button lock after wakeup in surface mode:
Ideenmodellierer
parents:
718
diff
changeset
|
804 ButtonLockState = LOCK_1; |
|
5078da3845c0
Added button lock after wakeup in surface mode:
Ideenmodellierer
parents:
718
diff
changeset
|
805 } |
|
5078da3845c0
Added button lock after wakeup in surface mode:
Ideenmodellierer
parents:
718
diff
changeset
|
806 break; |
|
5078da3845c0
Added button lock after wakeup in surface mode:
Ideenmodellierer
parents:
718
diff
changeset
|
807 case LOCK_3: if(action == ACTION_BUTTON_BACK) |
|
5078da3845c0
Added button lock after wakeup in surface mode:
Ideenmodellierer
parents:
718
diff
changeset
|
808 { |
|
5078da3845c0
Added button lock after wakeup in surface mode:
Ideenmodellierer
parents:
718
diff
changeset
|
809 ButtonLockState = LOCK_OFF; |
|
5078da3845c0
Added button lock after wakeup in surface mode:
Ideenmodellierer
parents:
718
diff
changeset
|
810 } |
|
5078da3845c0
Added button lock after wakeup in surface mode:
Ideenmodellierer
parents:
718
diff
changeset
|
811 else |
|
5078da3845c0
Added button lock after wakeup in surface mode:
Ideenmodellierer
parents:
718
diff
changeset
|
812 { |
|
5078da3845c0
Added button lock after wakeup in surface mode:
Ideenmodellierer
parents:
718
diff
changeset
|
813 ButtonLockState = LOCK_1; |
|
5078da3845c0
Added button lock after wakeup in surface mode:
Ideenmodellierer
parents:
718
diff
changeset
|
814 } |
|
5078da3845c0
Added button lock after wakeup in surface mode:
Ideenmodellierer
parents:
718
diff
changeset
|
815 break; |
|
5078da3845c0
Added button lock after wakeup in surface mode:
Ideenmodellierer
parents:
718
diff
changeset
|
816 |
|
5078da3845c0
Added button lock after wakeup in surface mode:
Ideenmodellierer
parents:
718
diff
changeset
|
817 default: ButtonLockState = LOCK_OFF; |
|
5078da3845c0
Added button lock after wakeup in surface mode:
Ideenmodellierer
parents:
718
diff
changeset
|
818 break; |
|
5078da3845c0
Added button lock after wakeup in surface mode:
Ideenmodellierer
parents:
718
diff
changeset
|
819 } |
|
5078da3845c0
Added button lock after wakeup in surface mode:
Ideenmodellierer
parents:
718
diff
changeset
|
820 } |
|
5078da3845c0
Added button lock after wakeup in surface mode:
Ideenmodellierer
parents:
718
diff
changeset
|
821 else |
|
5078da3845c0
Added button lock after wakeup in surface mode:
Ideenmodellierer
parents:
718
diff
changeset
|
822 { |
|
5078da3845c0
Added button lock after wakeup in surface mode:
Ideenmodellierer
parents:
718
diff
changeset
|
823 ButtonLockState = LOCK_1; |
|
5078da3845c0
Added button lock after wakeup in surface mode:
Ideenmodellierer
parents:
718
diff
changeset
|
824 } |
|
5078da3845c0
Added button lock after wakeup in surface mode:
Ideenmodellierer
parents:
718
diff
changeset
|
825 lastInput = LastButtonPressedTick; |
|
5078da3845c0
Added button lock after wakeup in surface mode:
Ideenmodellierer
parents:
718
diff
changeset
|
826 ButtonAction = ACTION_END; |
|
5078da3845c0
Added button lock after wakeup in surface mode:
Ideenmodellierer
parents:
718
diff
changeset
|
827 } |
|
5078da3845c0
Added button lock after wakeup in surface mode:
Ideenmodellierer
parents:
718
diff
changeset
|
828 } |
|
217
ce05c801b002
Moved display refresh and button action function from tim callback to main loop
ideenmodellierer
parents:
206
diff
changeset
|
829 |
|
ce05c801b002
Moved display refresh and button action function from tim callback to main loop
ideenmodellierer
parents:
206
diff
changeset
|
830 static void TriggerButtonAction() |
|
ce05c801b002
Moved display refresh and button action function from tim callback to main loop
ideenmodellierer
parents:
206
diff
changeset
|
831 { |
|
ce05c801b002
Moved display refresh and button action function from tim callback to main loop
ideenmodellierer
parents:
206
diff
changeset
|
832 uint8_t action = ButtonAction; |
|
ce05c801b002
Moved display refresh and button action function from tim callback to main loop
ideenmodellierer
parents:
206
diff
changeset
|
833 SStateList status; |
|
611
916998f90e39
Suspend MotionDetection events while diver is operationg the OSTC:
Ideenmodellierer
parents:
597
diff
changeset
|
834 SSettings* pSettings; |
|
916998f90e39
Suspend MotionDetection events while diver is operationg the OSTC:
Ideenmodellierer
parents:
597
diff
changeset
|
835 pSettings = settingsGetPointer(); |
|
916998f90e39
Suspend MotionDetection events while diver is operationg the OSTC:
Ideenmodellierer
parents:
597
diff
changeset
|
836 |
|
217
ce05c801b002
Moved display refresh and button action function from tim callback to main loop
ideenmodellierer
parents:
206
diff
changeset
|
837 |
| 697 | 838 if(action != ACTION_END) |
|
217
ce05c801b002
Moved display refresh and button action function from tim callback to main loop
ideenmodellierer
parents:
206
diff
changeset
|
839 { |
|
ce05c801b002
Moved display refresh and button action function from tim callback to main loop
ideenmodellierer
parents:
206
diff
changeset
|
840 get_globalStateList(&status); |
|
ce05c801b002
Moved display refresh and button action function from tim callback to main loop
ideenmodellierer
parents:
206
diff
changeset
|
841 |
|
ce05c801b002
Moved display refresh and button action function from tim callback to main loop
ideenmodellierer
parents:
206
diff
changeset
|
842 if (action == ACTION_BUTTON_CUSTOM) { |
|
ce05c801b002
Moved display refresh and button action function from tim callback to main loop
ideenmodellierer
parents:
206
diff
changeset
|
843 GFX_screenshot(); |
|
ce05c801b002
Moved display refresh and button action function from tim callback to main loop
ideenmodellierer
parents:
206
diff
changeset
|
844 } |
|
ce05c801b002
Moved display refresh and button action function from tim callback to main loop
ideenmodellierer
parents:
206
diff
changeset
|
845 |
|
ce05c801b002
Moved display refresh and button action function from tim callback to main loop
ideenmodellierer
parents:
206
diff
changeset
|
846 switch (status.base) { |
|
ce05c801b002
Moved display refresh and button action function from tim callback to main loop
ideenmodellierer
parents:
206
diff
changeset
|
847 case BaseStop: |
|
ce05c801b002
Moved display refresh and button action function from tim callback to main loop
ideenmodellierer
parents:
206
diff
changeset
|
848 if (action == ACTION_BUTTON_BACK) |
|
ce05c801b002
Moved display refresh and button action function from tim callback to main loop
ideenmodellierer
parents:
206
diff
changeset
|
849 resetToFirmwareUpdate(); |
|
ce05c801b002
Moved display refresh and button action function from tim callback to main loop
ideenmodellierer
parents:
206
diff
changeset
|
850 break; |
|
ce05c801b002
Moved display refresh and button action function from tim callback to main loop
ideenmodellierer
parents:
206
diff
changeset
|
851 case BaseComm: /* already handled in tim callback */ |
|
ce05c801b002
Moved display refresh and button action function from tim callback to main loop
ideenmodellierer
parents:
206
diff
changeset
|
852 break; |
|
ce05c801b002
Moved display refresh and button action function from tim callback to main loop
ideenmodellierer
parents:
206
diff
changeset
|
853 case BaseHome: |
|
ce05c801b002
Moved display refresh and button action function from tim callback to main loop
ideenmodellierer
parents:
206
diff
changeset
|
854 if (action == ACTION_BUTTON_NEXT) { |
|
ce05c801b002
Moved display refresh and button action function from tim callback to main loop
ideenmodellierer
parents:
206
diff
changeset
|
855 if (status.page == PageSurface) |
|
ce05c801b002
Moved display refresh and button action function from tim callback to main loop
ideenmodellierer
parents:
206
diff
changeset
|
856 openMenu(1); |
|
ce05c801b002
Moved display refresh and button action function from tim callback to main loop
ideenmodellierer
parents:
206
diff
changeset
|
857 else |
|
ce05c801b002
Moved display refresh and button action function from tim callback to main loop
ideenmodellierer
parents:
206
diff
changeset
|
858 tHomeDiveMenuControl(action); |
|
ce05c801b002
Moved display refresh and button action function from tim callback to main loop
ideenmodellierer
parents:
206
diff
changeset
|
859 } else if (action == ACTION_BUTTON_BACK) { |
|
ce05c801b002
Moved display refresh and button action function from tim callback to main loop
ideenmodellierer
parents:
206
diff
changeset
|
860 if (get_globalState() == StS) |
| 540 | 861 { |
|
217
ce05c801b002
Moved display refresh and button action function from tim callback to main loop
ideenmodellierer
parents:
206
diff
changeset
|
862 openInfo(StILOGLIST); |
| 540 | 863 } |
|
611
916998f90e39
Suspend MotionDetection events while diver is operationg the OSTC:
Ideenmodellierer
parents:
597
diff
changeset
|
864 else if ((status.page == PageDive) && (pSettings->design < 7)) |
| 540 | 865 { |
|
611
916998f90e39
Suspend MotionDetection events while diver is operationg the OSTC:
Ideenmodellierer
parents:
597
diff
changeset
|
866 if(pSettings->design == 3) |
| 540 | 867 { |
| 868 if(get_globalState() != StD) /* located in submenu? => return */ | |
| 869 { | |
| 870 set_globalState(StD); | |
| 871 } | |
| 872 else /* return to t7 view */ | |
| 873 { | |
|
611
916998f90e39
Suspend MotionDetection events while diver is operationg the OSTC:
Ideenmodellierer
parents:
597
diff
changeset
|
874 pSettings->design = 7; |
|
916998f90e39
Suspend MotionDetection events while diver is operationg the OSTC:
Ideenmodellierer
parents:
597
diff
changeset
|
875 if(pSettings->MotionDetection == MOTION_DETECT_SECTOR) |
|
586
bb5ce239741f
Motion control: Jump back to primary view if focus is lost:
Ideenmodellierer
parents:
561
diff
changeset
|
876 { |
|
625
028d8f3a9410
Switch Sector / Scroll detection to vector implementation:
Ideenmodellierer
parents:
623
diff
changeset
|
877 DefineSectorCount(CUSTOMER_DEFINED_VIEWS); |
|
597
132e7e3d13a7
MotionControl-Sector: Map sectors during switch T7 <=> T3:
Ideenmodellierer
parents:
586
diff
changeset
|
878 MapCVToSector(); |
|
586
bb5ce239741f
Motion control: Jump back to primary view if focus is lost:
Ideenmodellierer
parents:
561
diff
changeset
|
879 } |
| 540 | 880 } |
| 881 } | |
| 882 else | |
| 883 { | |
|
611
916998f90e39
Suspend MotionDetection events while diver is operationg the OSTC:
Ideenmodellierer
parents:
597
diff
changeset
|
884 pSettings->design = 7; // auto switch to 9 if necessary |
| 540 | 885 } |
| 886 } else if ((status.page == PageDive) && (status.line != 0)) | |
| 887 { | |
| 662 | 888 if(get_globalState() == StDMENU) |
|
384
427ae9f8e28e
Consider number of available t3 views in sector handling:
ideenmodellierer
parents:
382
diff
changeset
|
889 { |
|
740
5078da3845c0
Added button lock after wakeup in surface mode:
Ideenmodellierer
parents:
718
diff
changeset
|
890 if ((pSettings->extraDisplay == EXTRADISPLAY_BIGFONT) || (pSettings->extraDisplay == EXTRADISPLAY_BFACTIVE)) |
|
384
427ae9f8e28e
Consider number of available t3 views in sector handling:
ideenmodellierer
parents:
382
diff
changeset
|
891 { |
| 662 | 892 pSettings->design = 3; |
| 893 if(pSettings->MotionDetection == MOTION_DETECT_SECTOR) | |
| 894 { | |
| 895 DefineSectorCount(CUSTOMER_DEFINED_VIEWS); | |
| 896 MapCVToSector(); | |
| 897 } | |
|
384
427ae9f8e28e
Consider number of available t3 views in sector handling:
ideenmodellierer
parents:
382
diff
changeset
|
898 } |
|
740
5078da3845c0
Added button lock after wakeup in surface mode:
Ideenmodellierer
parents:
718
diff
changeset
|
899 #ifdef HAVEDECOGAME |
| 662 | 900 else if (pSettings->extraDisplay == EXTRADISPLAY_DECOGAME) |
| 901 pSettings->design = 4; | |
|
740
5078da3845c0
Added button lock after wakeup in surface mode:
Ideenmodellierer
parents:
718
diff
changeset
|
902 #endif |
|
384
427ae9f8e28e
Consider number of available t3 views in sector handling:
ideenmodellierer
parents:
382
diff
changeset
|
903 } |
|
217
ce05c801b002
Moved display refresh and button action function from tim callback to main loop
ideenmodellierer
parents:
206
diff
changeset
|
904 set_globalState(StD); |
| 540 | 905 } |
| 906 else | |
| 907 { | |
|
217
ce05c801b002
Moved display refresh and button action function from tim callback to main loop
ideenmodellierer
parents:
206
diff
changeset
|
908 tHome_change_field_button_pressed(); |
| 540 | 909 } |
|
368
50ea68c7a153
Added menu item for motion detection. There are several possibility to use motion detection for user action input. To select of the a new menu entry has been added to the Sys2 =>Custom View Menu (Variables in german)
ideenmodellierer
parents:
367
diff
changeset
|
910 } else if ((action == ACTION_BUTTON_ENTER) || (action == ACTION_PITCH_NEG) || (action == ACTION_PITCH_POS)) |
|
361
b111fc4250e9
Pass action to customer vie update function.
Ideenmodellierer
parents:
360
diff
changeset
|
911 { |
|
b111fc4250e9
Pass action to customer vie update function.
Ideenmodellierer
parents:
360
diff
changeset
|
912 |
|
b111fc4250e9
Pass action to customer vie update function.
Ideenmodellierer
parents:
360
diff
changeset
|
913 if ((status.page == PageDive) && (status.line == 0)) |
|
368
50ea68c7a153
Added menu item for motion detection. There are several possibility to use motion detection for user action input. To select of the a new menu entry has been added to the Sys2 =>Custom View Menu (Variables in german)
ideenmodellierer
parents:
367
diff
changeset
|
914 { |
|
642
c737cf5d9067
Do not show focus indicator in case motion detection is suspended:
Ideenmodellierer
parents:
625
diff
changeset
|
915 if(action == ACTION_BUTTON_ENTER) |
|
611
916998f90e39
Suspend MotionDetection events while diver is operationg the OSTC:
Ideenmodellierer
parents:
597
diff
changeset
|
916 { |
|
916998f90e39
Suspend MotionDetection events while diver is operationg the OSTC:
Ideenmodellierer
parents:
597
diff
changeset
|
917 suspendMotionDetection(10); |
|
916998f90e39
Suspend MotionDetection events while diver is operationg the OSTC:
Ideenmodellierer
parents:
597
diff
changeset
|
918 } |
|
361
b111fc4250e9
Pass action to customer vie update function.
Ideenmodellierer
parents:
360
diff
changeset
|
919 tHome_change_customview_button_pressed(action); |
|
368
50ea68c7a153
Added menu item for motion detection. There are several possibility to use motion detection for user action input. To select of the a new menu entry has been added to the Sys2 =>Custom View Menu (Variables in german)
ideenmodellierer
parents:
367
diff
changeset
|
920 } |
|
361
b111fc4250e9
Pass action to customer vie update function.
Ideenmodellierer
parents:
360
diff
changeset
|
921 else if (status.page == PageSurface) |
|
b111fc4250e9
Pass action to customer vie update function.
Ideenmodellierer
parents:
360
diff
changeset
|
922 tHome_change_customview_button_pressed(action); |
|
b111fc4250e9
Pass action to customer vie update function.
Ideenmodellierer
parents:
360
diff
changeset
|
923 else |
|
642
c737cf5d9067
Do not show focus indicator in case motion detection is suspended:
Ideenmodellierer
parents:
625
diff
changeset
|
924 { |
|
361
b111fc4250e9
Pass action to customer vie update function.
Ideenmodellierer
parents:
360
diff
changeset
|
925 tHomeDiveMenuControl(action); |
|
642
c737cf5d9067
Do not show focus indicator in case motion detection is suspended:
Ideenmodellierer
parents:
625
diff
changeset
|
926 } |
|
361
b111fc4250e9
Pass action to customer vie update function.
Ideenmodellierer
parents:
360
diff
changeset
|
927 } |
|
217
ce05c801b002
Moved display refresh and button action function from tim callback to main loop
ideenmodellierer
parents:
206
diff
changeset
|
928 break; |
|
ce05c801b002
Moved display refresh and button action function from tim callback to main loop
ideenmodellierer
parents:
206
diff
changeset
|
929 |
|
ce05c801b002
Moved display refresh and button action function from tim callback to main loop
ideenmodellierer
parents:
206
diff
changeset
|
930 case BaseMenu: |
|
ce05c801b002
Moved display refresh and button action function from tim callback to main loop
ideenmodellierer
parents:
206
diff
changeset
|
931 if (status.line == 0) |
|
ce05c801b002
Moved display refresh and button action function from tim callback to main loop
ideenmodellierer
parents:
206
diff
changeset
|
932 sendActionToMenu(action); |
|
ce05c801b002
Moved display refresh and button action function from tim callback to main loop
ideenmodellierer
parents:
206
diff
changeset
|
933 else |
|
ce05c801b002
Moved display refresh and button action function from tim callback to main loop
ideenmodellierer
parents:
206
diff
changeset
|
934 sendActionToMenuEdit(action); |
|
ce05c801b002
Moved display refresh and button action function from tim callback to main loop
ideenmodellierer
parents:
206
diff
changeset
|
935 break; |
|
ce05c801b002
Moved display refresh and button action function from tim callback to main loop
ideenmodellierer
parents:
206
diff
changeset
|
936 |
|
718
b9f699d2e3d0
Updated menu structure to support new sensor information page:
Ideenmodellierer
parents:
697
diff
changeset
|
937 case BaseInfo: switch(status.page) |
|
b9f699d2e3d0
Updated menu structure to support new sensor information page:
Ideenmodellierer
parents:
697
diff
changeset
|
938 { |
|
b9f699d2e3d0
Updated menu structure to support new sensor information page:
Ideenmodellierer
parents:
697
diff
changeset
|
939 case InfoPageLogList: sendActionToInfoLogList(action); |
|
b9f699d2e3d0
Updated menu structure to support new sensor information page:
Ideenmodellierer
parents:
697
diff
changeset
|
940 break; |
|
b9f699d2e3d0
Updated menu structure to support new sensor information page:
Ideenmodellierer
parents:
697
diff
changeset
|
941 case InfoPageLogShow: sendActionToInfoLogShow(action); |
|
b9f699d2e3d0
Updated menu structure to support new sensor information page:
Ideenmodellierer
parents:
697
diff
changeset
|
942 break; |
|
b9f699d2e3d0
Updated menu structure to support new sensor information page:
Ideenmodellierer
parents:
697
diff
changeset
|
943 case InfoPageSensor: sendActionToInfoSensor(action); |
|
b9f699d2e3d0
Updated menu structure to support new sensor information page:
Ideenmodellierer
parents:
697
diff
changeset
|
944 break; |
| 845 | 945 case InfoPagePreDive: sendActionToInfoPreDive(action); |
| 946 break; | |
| 1035 | 947 case InfoPageLogger: exitInfo(); |
| 948 break; | |
|
718
b9f699d2e3d0
Updated menu structure to support new sensor information page:
Ideenmodellierer
parents:
697
diff
changeset
|
949 default: sendActionToInfo(action); |
|
b9f699d2e3d0
Updated menu structure to support new sensor information page:
Ideenmodellierer
parents:
697
diff
changeset
|
950 break; |
|
b9f699d2e3d0
Updated menu structure to support new sensor information page:
Ideenmodellierer
parents:
697
diff
changeset
|
951 } |
|
217
ce05c801b002
Moved display refresh and button action function from tim callback to main loop
ideenmodellierer
parents:
206
diff
changeset
|
952 break; |
|
ce05c801b002
Moved display refresh and button action function from tim callback to main loop
ideenmodellierer
parents:
206
diff
changeset
|
953 |
|
ce05c801b002
Moved display refresh and button action function from tim callback to main loop
ideenmodellierer
parents:
206
diff
changeset
|
954 default: |
|
ce05c801b002
Moved display refresh and button action function from tim callback to main loop
ideenmodellierer
parents:
206
diff
changeset
|
955 break; |
|
ce05c801b002
Moved display refresh and button action function from tim callback to main loop
ideenmodellierer
parents:
206
diff
changeset
|
956 } |
|
ce05c801b002
Moved display refresh and button action function from tim callback to main loop
ideenmodellierer
parents:
206
diff
changeset
|
957 ButtonAction = ACTION_END; |
|
ce05c801b002
Moved display refresh and button action function from tim callback to main loop
ideenmodellierer
parents:
206
diff
changeset
|
958 } |
|
ce05c801b002
Moved display refresh and button action function from tim callback to main loop
ideenmodellierer
parents:
206
diff
changeset
|
959 } |
|
ce05c801b002
Moved display refresh and button action function from tim callback to main loop
ideenmodellierer
parents:
206
diff
changeset
|
960 |
|
ce05c801b002
Moved display refresh and button action function from tim callback to main loop
ideenmodellierer
parents:
206
diff
changeset
|
961 |
|
300
5ca177d2df5d
cleanup: remove commented/unused code, make static
Jan Mulder <jlmulder@xs4all.nl>
parents:
272
diff
changeset
|
962 static void EvaluateButton() |
|
152
bc7795161549
Moved button evaluation out of interrupt handler
Ideenmodellierer
parents:
149
diff
changeset
|
963 { |
|
bc7795161549
Moved button evaluation out of interrupt handler
Ideenmodellierer
parents:
149
diff
changeset
|
964 uint8_t action = 0; |
|
bc7795161549
Moved button evaluation out of interrupt handler
Ideenmodellierer
parents:
149
diff
changeset
|
965 SStateList status; |
|
bc7795161549
Moved button evaluation out of interrupt handler
Ideenmodellierer
parents:
149
diff
changeset
|
966 SSettings* pSettings; |
|
bc7795161549
Moved button evaluation out of interrupt handler
Ideenmodellierer
parents:
149
diff
changeset
|
967 pSettings = settingsGetPointer(); |
|
95
2a74647d28d1
Debounce. Bounced buttons fixed.
Dmitry Romanov <kitt@bk.ru>
parents:
91
diff
changeset
|
968 |
|
2a74647d28d1
Debounce. Bounced buttons fixed.
Dmitry Romanov <kitt@bk.ru>
parents:
91
diff
changeset
|
969 if (GFX_logoStatus() != 0) |
|
2a74647d28d1
Debounce. Bounced buttons fixed.
Dmitry Romanov <kitt@bk.ru>
parents:
91
diff
changeset
|
970 return; |
| 38 | 971 |
| 697 | 972 if ((LastButtonPressed != INVALID_BUTTON) && (time_elapsed_ms(LastButtonPressedTick, HAL_GetTick()) > 40)) |
|
152
bc7795161549
Moved button evaluation out of interrupt handler
Ideenmodellierer
parents:
149
diff
changeset
|
973 { |
|
bc7795161549
Moved button evaluation out of interrupt handler
Ideenmodellierer
parents:
149
diff
changeset
|
974 if (LastButtonPressed == BUTTON_BACK_PIN) { // links |
|
bc7795161549
Moved button evaluation out of interrupt handler
Ideenmodellierer
parents:
149
diff
changeset
|
975 if (HAL_GPIO_ReadPin(BUTTON_BACK_GPIO_PORT, BUTTON_BACK_PIN) == 1) { |
|
bc7795161549
Moved button evaluation out of interrupt handler
Ideenmodellierer
parents:
149
diff
changeset
|
976 action = ACTION_BUTTON_BACK; |
|
bc7795161549
Moved button evaluation out of interrupt handler
Ideenmodellierer
parents:
149
diff
changeset
|
977 } |
|
95
2a74647d28d1
Debounce. Bounced buttons fixed.
Dmitry Romanov <kitt@bk.ru>
parents:
91
diff
changeset
|
978 } |
|
2a74647d28d1
Debounce. Bounced buttons fixed.
Dmitry Romanov <kitt@bk.ru>
parents:
91
diff
changeset
|
979 |
|
152
bc7795161549
Moved button evaluation out of interrupt handler
Ideenmodellierer
parents:
149
diff
changeset
|
980 else if (LastButtonPressed == BUTTON_ENTER_PIN) { // mitte |
|
bc7795161549
Moved button evaluation out of interrupt handler
Ideenmodellierer
parents:
149
diff
changeset
|
981 if (HAL_GPIO_ReadPin(BUTTON_ENTER_GPIO_PORT, BUTTON_ENTER_PIN) == 1) { |
|
bc7795161549
Moved button evaluation out of interrupt handler
Ideenmodellierer
parents:
149
diff
changeset
|
982 action = ACTION_BUTTON_ENTER; |
|
bc7795161549
Moved button evaluation out of interrupt handler
Ideenmodellierer
parents:
149
diff
changeset
|
983 } |
|
bc7795161549
Moved button evaluation out of interrupt handler
Ideenmodellierer
parents:
149
diff
changeset
|
984 } |
|
bc7795161549
Moved button evaluation out of interrupt handler
Ideenmodellierer
parents:
149
diff
changeset
|
985 |
|
bc7795161549
Moved button evaluation out of interrupt handler
Ideenmodellierer
parents:
149
diff
changeset
|
986 else if (LastButtonPressed == BUTTON_NEXT_PIN) { // rechts |
|
bc7795161549
Moved button evaluation out of interrupt handler
Ideenmodellierer
parents:
149
diff
changeset
|
987 if (HAL_GPIO_ReadPin(BUTTON_NEXT_GPIO_PORT, BUTTON_NEXT_PIN) == 1) { |
|
bc7795161549
Moved button evaluation out of interrupt handler
Ideenmodellierer
parents:
149
diff
changeset
|
988 action = ACTION_BUTTON_NEXT; |
| 108 | 989 } |
| 990 } | |
| 38 | 991 |
|
152
bc7795161549
Moved button evaluation out of interrupt handler
Ideenmodellierer
parents:
149
diff
changeset
|
992 if(action != 0) |
|
bc7795161549
Moved button evaluation out of interrupt handler
Ideenmodellierer
parents:
149
diff
changeset
|
993 { |
|
bc7795161549
Moved button evaluation out of interrupt handler
Ideenmodellierer
parents:
149
diff
changeset
|
994 time_without_button_pressed_deciseconds = 0; |
|
bc7795161549
Moved button evaluation out of interrupt handler
Ideenmodellierer
parents:
149
diff
changeset
|
995 if(pSettings->FlipDisplay) /* switch action resulting from pressed button */ |
|
bc7795161549
Moved button evaluation out of interrupt handler
Ideenmodellierer
parents:
149
diff
changeset
|
996 { |
|
bc7795161549
Moved button evaluation out of interrupt handler
Ideenmodellierer
parents:
149
diff
changeset
|
997 if (action == ACTION_BUTTON_BACK) |
|
bc7795161549
Moved button evaluation out of interrupt handler
Ideenmodellierer
parents:
149
diff
changeset
|
998 { |
|
bc7795161549
Moved button evaluation out of interrupt handler
Ideenmodellierer
parents:
149
diff
changeset
|
999 action = ACTION_BUTTON_NEXT; |
|
bc7795161549
Moved button evaluation out of interrupt handler
Ideenmodellierer
parents:
149
diff
changeset
|
1000 } |
| 158 | 1001 else |
|
152
bc7795161549
Moved button evaluation out of interrupt handler
Ideenmodellierer
parents:
149
diff
changeset
|
1002 { |
| 158 | 1003 if (action == ACTION_BUTTON_NEXT) |
| 1004 { | |
| 1005 action = ACTION_BUTTON_BACK; | |
| 1006 } | |
|
152
bc7795161549
Moved button evaluation out of interrupt handler
Ideenmodellierer
parents:
149
diff
changeset
|
1007 } |
|
bc7795161549
Moved button evaluation out of interrupt handler
Ideenmodellierer
parents:
149
diff
changeset
|
1008 } |
|
bc7795161549
Moved button evaluation out of interrupt handler
Ideenmodellierer
parents:
149
diff
changeset
|
1009 } |
|
bc7795161549
Moved button evaluation out of interrupt handler
Ideenmodellierer
parents:
149
diff
changeset
|
1010 |
|
bc7795161549
Moved button evaluation out of interrupt handler
Ideenmodellierer
parents:
149
diff
changeset
|
1011 #ifdef BUTTON_CUSTOM_PIN |
|
bc7795161549
Moved button evaluation out of interrupt handler
Ideenmodellierer
parents:
149
diff
changeset
|
1012 else |
|
bc7795161549
Moved button evaluation out of interrupt handler
Ideenmodellierer
parents:
149
diff
changeset
|
1013 if(LastButtonPressed == BUTTON_CUSTOM_PIN) // extra |
|
bc7795161549
Moved button evaluation out of interrupt handler
Ideenmodellierer
parents:
149
diff
changeset
|
1014 action = ACTION_BUTTON_CUSTOM; |
| 38 | 1015 #endif |
| 1016 | |
|
152
bc7795161549
Moved button evaluation out of interrupt handler
Ideenmodellierer
parents:
149
diff
changeset
|
1017 #ifdef DEMOMODE // user pressed button ? |
|
bc7795161549
Moved button evaluation out of interrupt handler
Ideenmodellierer
parents:
149
diff
changeset
|
1018 if((!demoMachineCall) && demoModeActive()) |
|
bc7795161549
Moved button evaluation out of interrupt handler
Ideenmodellierer
parents:
149
diff
changeset
|
1019 { |
|
bc7795161549
Moved button evaluation out of interrupt handler
Ideenmodellierer
parents:
149
diff
changeset
|
1020 demoSendCommand(action); |
|
bc7795161549
Moved button evaluation out of interrupt handler
Ideenmodellierer
parents:
149
diff
changeset
|
1021 return; |
|
bc7795161549
Moved button evaluation out of interrupt handler
Ideenmodellierer
parents:
149
diff
changeset
|
1022 } |
|
bc7795161549
Moved button evaluation out of interrupt handler
Ideenmodellierer
parents:
149
diff
changeset
|
1023 #endif |
| 38 | 1024 |
|
152
bc7795161549
Moved button evaluation out of interrupt handler
Ideenmodellierer
parents:
149
diff
changeset
|
1025 get_globalStateList(&status); |
|
217
ce05c801b002
Moved display refresh and button action function from tim callback to main loop
ideenmodellierer
parents:
206
diff
changeset
|
1026 if(status.base == BaseComm) /* main loop is not serviced in comm mode => react immediately */ |
|
ce05c801b002
Moved display refresh and button action function from tim callback to main loop
ideenmodellierer
parents:
206
diff
changeset
|
1027 { |
|
395
eb7696e0510f
Added start of module configuration after eache modul power on
ideenmodellierer
parents:
384
diff
changeset
|
1028 switch(action) |
|
eb7696e0510f
Added start of module configuration after eache modul power on
ideenmodellierer
parents:
384
diff
changeset
|
1029 { |
|
eb7696e0510f
Added start of module configuration after eache modul power on
ideenmodellierer
parents:
384
diff
changeset
|
1030 case ACTION_BUTTON_BACK: tComm_exit(); |
|
eb7696e0510f
Added start of module configuration after eache modul power on
ideenmodellierer
parents:
384
diff
changeset
|
1031 break; |
|
eb7696e0510f
Added start of module configuration after eache modul power on
ideenmodellierer
parents:
384
diff
changeset
|
1032 case ACTION_BUTTON_NEXT: tComm_RequestBluetoothStrength(); |
|
eb7696e0510f
Added start of module configuration after eache modul power on
ideenmodellierer
parents:
384
diff
changeset
|
1033 break; |
|
eb7696e0510f
Added start of module configuration after eache modul power on
ideenmodellierer
parents:
384
diff
changeset
|
1034 default: |
|
eb7696e0510f
Added start of module configuration after eache modul power on
ideenmodellierer
parents:
384
diff
changeset
|
1035 break; |
|
152
bc7795161549
Moved button evaluation out of interrupt handler
Ideenmodellierer
parents:
149
diff
changeset
|
1036 } |
|
217
ce05c801b002
Moved display refresh and button action function from tim callback to main loop
ideenmodellierer
parents:
206
diff
changeset
|
1037 } |
|
ce05c801b002
Moved display refresh and button action function from tim callback to main loop
ideenmodellierer
parents:
206
diff
changeset
|
1038 else |
|
ce05c801b002
Moved display refresh and button action function from tim callback to main loop
ideenmodellierer
parents:
206
diff
changeset
|
1039 { |
|
ce05c801b002
Moved display refresh and button action function from tim callback to main loop
ideenmodellierer
parents:
206
diff
changeset
|
1040 StoreButtonAction(action); /* Handle action in main loop */ |
|
152
bc7795161549
Moved button evaluation out of interrupt handler
Ideenmodellierer
parents:
149
diff
changeset
|
1041 } |
|
bc7795161549
Moved button evaluation out of interrupt handler
Ideenmodellierer
parents:
149
diff
changeset
|
1042 LastButtonPressed = INVALID_BUTTON; |
|
95
2a74647d28d1
Debounce. Bounced buttons fixed.
Dmitry Romanov <kitt@bk.ru>
parents:
91
diff
changeset
|
1043 } |
| 38 | 1044 } |
| 1045 | |
|
300
5ca177d2df5d
cleanup: remove commented/unused code, make static
Jan Mulder <jlmulder@xs4all.nl>
parents:
272
diff
changeset
|
1046 static void gotoSleep(void) |
| 38 | 1047 { |
| 1048 /* not at the moment of testing */ | |
| 1049 // ext_flash_erase_firmware_if_not_empty(); | |
|
878
6b06143cbfea
brightness settings and proper power down for new screen
heinrichsweikamp
parents:
845
diff
changeset
|
1050 GFX_logoAutoOff(); |
|
6b06143cbfea
brightness settings and proper power down for new screen
heinrichsweikamp
parents:
845
diff
changeset
|
1051 display_power_off(); |
|
422
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1052 ext_flash_write_devicedata(true); /* write data at default position */ |
|
1028
3d9552e4997c
Code improvment: line <=> menu id function:
Ideenmodellierer
parents:
998
diff
changeset
|
1053 ext_flash_write_settings(EF_SETTINGS,true); /* write data at default position */ |
| 38 | 1054 set_globalState(StStop); |
| 1055 } | |
| 1056 | |
| 1057 | |
| 1058 // ----------------------------- | |
| 1059 | |
| 1060 uint32_t get_globalState(void) | |
| 1061 { | |
| 1062 return globalStateID; | |
| 1063 } | |
| 1064 | |
| 1065 | |
| 1066 void get_globalStateList(SStateList *output) | |
| 1067 { | |
| 1068 output->base = (uint8_t)((globalStateID >> 28) & 0x0F); | |
| 1069 output->page = (uint8_t)((globalStateID >> 24) & 0x0F); | |
| 1070 output->line = (uint8_t)((globalStateID >> 16) & 0xFF); | |
| 1071 output->field = (uint8_t)((globalStateID >> 8) & 0xFF); | |
| 1072 output->mode = (uint8_t)((globalStateID ) & 0xFF); | |
| 1073 } | |
| 1074 | |
| 1075 | |
| 1076 void get_idSpecificStateList(uint32_t id, SStateList *output) | |
| 1077 { | |
| 1078 output->base = (uint8_t)((id >> 28) & 0x0F); | |
| 1079 output->page = (uint8_t)((id >> 24) & 0x0F); | |
| 1080 output->line = (uint8_t)((id >> 16) & 0xFF); | |
| 1081 output->field = (uint8_t)((id >> 8) & 0xFF); | |
| 1082 output->mode = (uint8_t)((id ) & 0xFF); | |
| 1083 } | |
| 1084 | |
|
1028
3d9552e4997c
Code improvment: line <=> menu id function:
Ideenmodellierer
parents:
998
diff
changeset
|
1085 uint8_t get_lineOfID(uint32_t id) |
|
3d9552e4997c
Code improvment: line <=> menu id function:
Ideenmodellierer
parents:
998
diff
changeset
|
1086 { |
|
3d9552e4997c
Code improvment: line <=> menu id function:
Ideenmodellierer
parents:
998
diff
changeset
|
1087 uint8_t ret = (uint8_t)((id >> 16) & 0xFF); |
|
3d9552e4997c
Code improvment: line <=> menu id function:
Ideenmodellierer
parents:
998
diff
changeset
|
1088 if(ret > 6) |
|
3d9552e4997c
Code improvment: line <=> menu id function:
Ideenmodellierer
parents:
998
diff
changeset
|
1089 { |
|
3d9552e4997c
Code improvment: line <=> menu id function:
Ideenmodellierer
parents:
998
diff
changeset
|
1090 ret = 0; |
|
3d9552e4997c
Code improvment: line <=> menu id function:
Ideenmodellierer
parents:
998
diff
changeset
|
1091 } |
|
3d9552e4997c
Code improvment: line <=> menu id function:
Ideenmodellierer
parents:
998
diff
changeset
|
1092 return ret; |
|
3d9552e4997c
Code improvment: line <=> menu id function:
Ideenmodellierer
parents:
998
diff
changeset
|
1093 } |
|
3d9552e4997c
Code improvment: line <=> menu id function:
Ideenmodellierer
parents:
998
diff
changeset
|
1094 |
|
740
5078da3845c0
Added button lock after wakeup in surface mode:
Ideenmodellierer
parents:
718
diff
changeset
|
1095 SButtonLock get_ButtonLock(void) |
|
5078da3845c0
Added button lock after wakeup in surface mode:
Ideenmodellierer
parents:
718
diff
changeset
|
1096 { |
|
5078da3845c0
Added button lock after wakeup in surface mode:
Ideenmodellierer
parents:
718
diff
changeset
|
1097 return ButtonLockState; |
|
5078da3845c0
Added button lock after wakeup in surface mode:
Ideenmodellierer
parents:
718
diff
changeset
|
1098 } |
| 38 | 1099 |
| 1100 void set_globalState_Menu_Page(uint8_t page) | |
| 1101 { | |
| 1102 globalStateID = ((BaseMenu << 28) + (page << 24)); | |
| 1103 } | |
| 1104 | |
| 1105 void set_globalState_Log_Page(uint8_t pageIsLine) | |
| 1106 { | |
| 1107 globalStateID = StILOGLIST + (pageIsLine << 16); | |
| 1108 } | |
| 1109 | |
| 1110 | |
| 1111 void set_globalState_Menu_Line(uint8_t line) | |
| 1112 { | |
| 1113 globalStateID = ((globalStateID & MaskLineFieldDigit) + (line << 16)); | |
| 1114 } | |
| 1115 | |
| 1116 | |
|
776
45b8f3c2acce
Add support for a configurable compass declination in a range of -99 to 99 degrees.
heinrichsweikamp
parents:
773
diff
changeset
|
1117 uint8_t get_globalState_Menu_Line(void) |
|
45b8f3c2acce
Add support for a configurable compass declination in a range of -99 to 99 degrees.
heinrichsweikamp
parents:
773
diff
changeset
|
1118 { |
|
45b8f3c2acce
Add support for a configurable compass declination in a range of -99 to 99 degrees.
heinrichsweikamp
parents:
773
diff
changeset
|
1119 return (globalStateID & ~MaskLineFieldDigit) >> 16; |
|
45b8f3c2acce
Add support for a configurable compass declination in a range of -99 to 99 degrees.
heinrichsweikamp
parents:
773
diff
changeset
|
1120 } |
|
45b8f3c2acce
Add support for a configurable compass declination in a range of -99 to 99 degrees.
heinrichsweikamp
parents:
773
diff
changeset
|
1121 |
|
45b8f3c2acce
Add support for a configurable compass declination in a range of -99 to 99 degrees.
heinrichsweikamp
parents:
773
diff
changeset
|
1122 |
| 38 | 1123 void set_globalState(uint32_t newID) |
| 1124 { | |
| 1125 globalStateID = newID; | |
| 1126 } | |
| 1127 | |
| 1128 void set_returnFromComm(void) | |
| 1129 { | |
| 1130 returnFromCommCleanUpRequest = 1; | |
| 1131 } | |
| 1132 | |
| 1133 uint8_t font_update_required(void) | |
| 1134 { | |
| 1135 uint8_t *fontVersionHigh; | |
| 1136 uint8_t *fontVersionLow; | |
| 1137 | |
| 1138 fontVersionHigh = (uint8_t *)0x08132000; | |
| 1139 fontVersionLow = (uint8_t *)0x08132001; | |
| 1140 | |
| 1141 if(FONTminimum_required_high() < *fontVersionHigh) | |
| 1142 return 0; | |
| 1143 | |
| 1144 if((FONTminimum_required_high() == *fontVersionHigh) && (FONTminimum_required_low() <= *fontVersionLow)) | |
| 1145 return 0; | |
| 1146 | |
| 1147 return 1; | |
| 1148 } | |
| 1149 | |
| 1150 | |
|
132
135eae957389
Add compile switch to disable optimization for specific function
Ideenmodellierer
parents:
116
diff
changeset
|
1151 __attribute__((optimize("O0"))) void delayMicros(uint32_t micros) |
| 38 | 1152 { |
| 1153 micros = micros * (168/4) - 10; | |
| 1154 while(micros--); | |
| 1155 } | |
| 1156 | |
| 1157 | |
| 1158 void get_RTC_DateTime(RTC_DateTypeDef * sdatestructureget, RTC_TimeTypeDef * stimestructureget) | |
| 1159 { | |
| 1160 /* Get the RTC current Time */ | |
| 1161 if(sdatestructureget) | |
| 1162 HAL_RTC_GetTime(&RtcHandle, stimestructureget, FORMAT_BIN); | |
| 1163 /* Get the RTC current Date */ | |
| 1164 if(stimestructureget) | |
| 1165 HAL_RTC_GetDate(&RtcHandle, sdatestructureget, FORMAT_BIN); | |
| 1166 } | |
| 1167 | |
| 1168 | |
| 1169 void set_RTC_DateTime(RTC_DateTypeDef * sdatestructure, RTC_TimeTypeDef * stimestructure) | |
| 1170 { | |
| 1171 if(sdatestructure) | |
| 1172 if(HAL_RTC_SetDate(&RtcHandle,sdatestructure,FORMAT_BCD) != HAL_OK) | |
| 1173 { | |
| 1174 /* Initialization Error */ | |
| 1175 Error_Handler(); | |
| 1176 } | |
| 1177 | |
| 1178 if(stimestructure) | |
| 1179 if(HAL_RTC_SetTime(&RtcHandle,stimestructure,FORMAT_BCD) != HAL_OK) | |
| 1180 { | |
| 1181 /* Initialization Error */ | |
| 1182 Error_Handler(); | |
| 1183 } | |
| 1184 } | |
| 1185 | |
| 1186 static void TIM_init(void) | |
| 1187 { | |
| 1188 uint16_t uwPrescalerValue = 0; | |
| 1189 | |
| 1190 uwPrescalerValue = (uint32_t) ((SystemCoreClock /2) / 10000) - 1; | |
| 1191 | |
| 1192 /* Set TIMx instance */ | |
| 1193 TimHandle.Instance = TIMx; | |
| 1194 | |
| 1195 /* Initialize TIM3 peripheral as follows: | |
| 1196 + Period = 10000 - 1 | |
| 1197 + Prescaler = ((SystemCoreClock/2)/10000) - 1 | |
| 1198 + ClockDivision = 0 | |
| 1199 + Counter direction = Up | |
| 1200 */ | |
| 1201 TimHandle.Init.Period = 1000 - 1; | |
| 1202 TimHandle.Init.Prescaler = uwPrescalerValue; | |
| 1203 TimHandle.Init.ClockDivision = 0; | |
| 1204 TimHandle.Init.CounterMode = TIM_COUNTERMODE_UP; | |
| 1205 if(HAL_TIM_Base_Init(&TimHandle) != HAL_OK) | |
| 1206 { | |
| 1207 /* Initialization Error */ | |
| 1208 Error_Handler(); | |
| 1209 } | |
| 1210 | |
| 1211 /*##-2- Start the TIM Base generation in interrupt mode ####################*/ | |
| 1212 /* Start Channel1 */ | |
| 1213 if(HAL_TIM_Base_Start_IT(&TimHandle) != HAL_OK) | |
| 1214 { | |
| 1215 /* Starting Error */ | |
| 1216 Error_Handler(); | |
| 1217 } | |
| 1218 } | |
| 1219 | |
| 1220 #ifdef DEMOMODE | |
| 1221 static void TIM_DEMO_init(void) | |
| 1222 { | |
| 1223 uint16_t uwPrescalerValue = 0; | |
| 1224 | |
| 1225 uwPrescalerValue = (uint32_t) ((SystemCoreClock /2) / 10000) - 1; | |
| 1226 | |
| 1227 /* Set TIMx instance */ | |
| 1228 TimDemoHandle.Instance = TIM7; | |
| 1229 | |
| 1230 /* Initialize TIM3 peripheral as follows: | |
| 1231 + Period = 10000 - 1 | |
| 1232 + Prescaler = ((SystemCoreClock/2)/10000) - 1 | |
| 1233 + ClockDivision = 0 | |
| 1234 + Counter direction = Up | |
| 1235 */ | |
| 1236 TimDemoHandle.Init.Period = 1000 - 1; | |
| 1237 TimDemoHandle.Init.Prescaler = uwPrescalerValue; | |
| 1238 TimDemoHandle.Init.ClockDivision = 0; | |
| 1239 TimHandle.Init.CounterMode = TIM_COUNTERMODE_UP; | |
| 1240 if(HAL_TIM_Base_Init(&TimDemoHandle) != HAL_OK) | |
| 1241 { | |
| 1242 /* Initialization Error */ | |
| 1243 Error_Handler(); | |
| 1244 } | |
| 1245 | |
| 1246 /*##-2- Start the TIM Base generation in interrupt mode ####################*/ | |
| 1247 /* Start Channel1 */ | |
| 1248 if(HAL_TIM_Base_Start_IT(&TimDemoHandle) != HAL_OK) | |
| 1249 { | |
| 1250 /* Starting Error */ | |
| 1251 Error_Handler(); | |
| 1252 } | |
| 1253 } | |
| 1254 #endif | |
| 1255 | |
| 1256 | |
| 1257 | |
| 1258 #ifndef TIM_BACKLIGHT | |
| 1259 | |
| 1260 static uint32_t TIM_BACKLIGHT_adjust(void) | |
| 1261 { | |
| 1262 return 0; | |
| 1263 } | |
| 1264 | |
| 1265 static void TIM_BACKLIGHT_init(void) | |
| 1266 { | |
| 1267 } | |
| 1268 #else | |
| 1269 static uint32_t TIM_BACKLIGHT_adjust(void) | |
| 1270 { | |
| 1271 static uint32_t levelActual = 12000; | |
| 1272 static uint8_t brightnessModeLast = 0; | |
| 1273 // static _Bool wasLostConnection = 0; | |
| 1274 | |
| 1275 uint32_t levelAmbient; | |
| 1276 uint32_t levelMax; | |
| 1277 uint32_t levelMin; | |
| 1278 uint32_t levelUpStep_100ms = 200; | |
| 1279 uint32_t levelDnStep_100ms = 20; | |
| 1280 | |
| 1281 TIM_OC_InitTypeDef sConfig; | |
| 1282 sConfig.OCMode = TIM_OCMODE_PWM1; | |
| 1283 sConfig.OCPolarity = TIM_OCPOLARITY_HIGH; | |
| 1284 sConfig.OCFastMode = TIM_OCFAST_DISABLE; | |
| 1285 | |
| 1286 const SDiveState * pStateReal = stateRealGetPointer(); | |
| 1287 | |
| 1288 | |
| 1289 // if(pStateReal->data_old__lost_connection_to_slave) | |
| 1290 // { | |
| 1291 // changed 160613 from 6000 to 12000 | |
| 1292 // removed hw 161209 | |
| 1293 // levelAmbient = 12000; | |
| 1294 // levelActual = 12000; | |
| 1295 // wasLostConnection = 1; | |
| 1296 // } | |
| 1297 // else | |
| 1298 // { | |
| 1299 SSettings *pSettings = settingsGetPointer(); | |
| 1300 /* 300 - 4000 */ | |
| 1301 /* important levelAmbient 300 - 1200 */ | |
| 1302 levelAmbient = 10 * pStateReal->lifeData.ambient_light_level; | |
| 1303 | |
|
670
7a352b449055
Reduce display brightness in case the charger is connected:
Ideenmodellierer
parents:
662
diff
changeset
|
1304 if((pStateReal->chargeStatus == CHARGER_running) || (pStateReal->chargeStatus == CHARGER_lostConnection)) |
|
7a352b449055
Reduce display brightness in case the charger is connected:
Ideenmodellierer
parents:
662
diff
changeset
|
1305 { |
|
7a352b449055
Reduce display brightness in case the charger is connected:
Ideenmodellierer
parents:
662
diff
changeset
|
1306 levelMax = 1000; |
|
7a352b449055
Reduce display brightness in case the charger is connected:
Ideenmodellierer
parents:
662
diff
changeset
|
1307 levelMin = 500; |
|
7a352b449055
Reduce display brightness in case the charger is connected:
Ideenmodellierer
parents:
662
diff
changeset
|
1308 } |
|
7a352b449055
Reduce display brightness in case the charger is connected:
Ideenmodellierer
parents:
662
diff
changeset
|
1309 else |
|
7a352b449055
Reduce display brightness in case the charger is connected:
Ideenmodellierer
parents:
662
diff
changeset
|
1310 { |
|
549
469e93f8633e
Only execute motion detection functions if features is enabled:
Ideenmodellierer
parents:
540
diff
changeset
|
1311 switch( pSettings->brightness + blBoost) |
| 38 | 1312 { |
| 1313 case 0: /* Cave */ | |
| 1314 levelMax = 3000;/* max 25 % (x2) */ | |
| 1315 levelMin = 1500; | |
|
885
8d3f3a635397
Replaced global hardwareDisplay with unit access:
Ideenmodellierer
parents:
878
diff
changeset
|
1316 if( isNewDisplay()) display_1_brightness_cave(); |
| 38 | 1317 break; |
| 1318 case 1: /* Eco */ | |
| 1319 levelMax = 6000;/* max 50 % (x2) */ | |
| 1320 levelMin = 3000; | |
|
885
8d3f3a635397
Replaced global hardwareDisplay with unit access:
Ideenmodellierer
parents:
878
diff
changeset
|
1321 if ( isNewDisplay()) display_1_brightness_eco(); |
| 38 | 1322 break; |
| 1323 case 2: /* Std */ | |
| 1324 levelAmbient += 1000; | |
| 1325 levelMax = 9000; | |
| 1326 levelMin = 4500; | |
| 1327 levelUpStep_100ms += levelUpStep_100ms/2; // 4500 instead of 3000 | |
| 1328 levelDnStep_100ms += levelDnStep_100ms/2; | |
|
885
8d3f3a635397
Replaced global hardwareDisplay with unit access:
Ideenmodellierer
parents:
878
diff
changeset
|
1329 if ( isNewDisplay()) display_1_brightness_std(); |
| 38 | 1330 break; |
| 1331 case 3: /* High */ | |
| 1332 default: | |
| 1333 levelAmbient += 3000; | |
| 1334 levelMax = 12000; /* max 100% (x2) */ | |
| 1335 levelMin = 6000; | |
| 1336 levelUpStep_100ms += levelUpStep_100ms; // 6000 instead of 3000 | |
| 1337 levelDnStep_100ms += levelDnStep_100ms; | |
|
885
8d3f3a635397
Replaced global hardwareDisplay with unit access:
Ideenmodellierer
parents:
878
diff
changeset
|
1338 if ( isNewDisplay()) display_1_brightness_high(); |
| 38 | 1339 break; |
| 1340 case 4: /* New Max */ | |
| 1341 levelAmbient = 12000; | |
| 1342 levelMax = 12000; /* max 100% (x2) */ | |
| 1343 levelMin = 12000; | |
| 1344 levelUpStep_100ms += 12000; | |
| 1345 levelDnStep_100ms += 0; | |
|
885
8d3f3a635397
Replaced global hardwareDisplay with unit access:
Ideenmodellierer
parents:
878
diff
changeset
|
1346 if ( isNewDisplay()) display_1_brightness_max(); |
| 38 | 1347 break; |
| 1348 } | |
| 1349 | |
| 1350 if((pSettings->brightness != brightnessModeLast))// || wasLostConnection) | |
| 1351 { | |
| 1352 levelActual = levelAmbient; | |
| 1353 brightnessModeLast = pSettings->brightness; | |
| 1354 // wasLostConnection = 0; | |
| 1355 } | |
| 1356 // } | |
|
670
7a352b449055
Reduce display brightness in case the charger is connected:
Ideenmodellierer
parents:
662
diff
changeset
|
1357 } |
| 38 | 1358 |
| 1359 if(levelAmbient > levelActual) | |
| 1360 levelActual += levelUpStep_100ms; | |
| 1361 else | |
| 1362 if((levelAmbient < levelActual) && (levelActual > levelMin) && (levelActual > levelDnStep_100ms)) | |
| 1363 levelActual -= levelDnStep_100ms; | |
| 1364 | |
| 1365 if(levelActual > levelMax) | |
| 1366 levelActual = levelMax; | |
| 1367 else | |
| 1368 if(levelActual < levelMin) | |
|
670
7a352b449055
Reduce display brightness in case the charger is connected:
Ideenmodellierer
parents:
662
diff
changeset
|
1369 { |
| 38 | 1370 levelActual = levelMin; |
|
670
7a352b449055
Reduce display brightness in case the charger is connected:
Ideenmodellierer
parents:
662
diff
changeset
|
1371 } |
| 38 | 1372 // sConfig.Pulse = levelActual / 20; |
| 1373 sConfig.Pulse = (levelMin + ((levelMax - levelMin)/2)) / 20; // added 170306 | |
| 1374 | |
| 1375 /* xx - 600 */ | |
| 1376 if(sConfig.Pulse > 600) | |
| 1377 sConfig.Pulse = 600; | |
| 1378 else | |
|
670
7a352b449055
Reduce display brightness in case the charger is connected:
Ideenmodellierer
parents:
662
diff
changeset
|
1379 if(sConfig.Pulse < 25) |
|
7a352b449055
Reduce display brightness in case the charger is connected:
Ideenmodellierer
parents:
662
diff
changeset
|
1380 sConfig.Pulse = 25; |
| 38 | 1381 |
| 1382 HAL_TIM_PWM_ConfigChannel(&TimBacklightHandle, &sConfig, TIM_BACKLIGHT_CHANNEL); | |
| 1383 HAL_TIM_PWM_Start(&TimBacklightHandle, TIM_BACKLIGHT_CHANNEL); | |
| 1384 | |
| 1385 return levelActual; | |
| 1386 } | |
| 1387 | |
| 1388 static void TIM_BACKLIGHT_init(void) | |
| 1389 { | |
| 1390 uint32_t uwPrescalerValue = 0; | |
| 1391 TIM_OC_InitTypeDef sConfig; | |
| 1392 | |
| 1393 uwPrescalerValue = (uint32_t) ((SystemCoreClock /2) / 18000000) - 1; | |
| 1394 | |
| 1395 TimBacklightHandle.Instance = TIM_BACKLIGHT; | |
| 1396 | |
| 1397 /* Initialize TIM3 peripheral as follows: | |
| 1398 30 kHz | |
| 1399 */ | |
| 1400 TimBacklightHandle.Init.Period = 600 - 1; | |
| 1401 TimBacklightHandle.Init.Prescaler = uwPrescalerValue; | |
| 1402 TimBacklightHandle.Init.ClockDivision = 0; | |
| 1403 TimBacklightHandle.Init.CounterMode = TIM_COUNTERMODE_UP; | |
| 1404 HAL_TIM_PWM_Init(&TimBacklightHandle); | |
| 1405 | |
| 1406 sConfig.OCMode = TIM_OCMODE_PWM1; | |
| 1407 sConfig.OCPolarity = TIM_OCPOLARITY_HIGH; | |
| 1408 sConfig.OCFastMode = TIM_OCFAST_DISABLE; | |
|
878
6b06143cbfea
brightness settings and proper power down for new screen
heinrichsweikamp
parents:
845
diff
changeset
|
1409 sConfig.Pulse = 100; /* Initial brightness of display */ |
| 38 | 1410 |
| 1411 HAL_TIM_PWM_ConfigChannel(&TimBacklightHandle, &sConfig, TIM_BACKLIGHT_CHANNEL); | |
| 1412 HAL_TIM_PWM_Start(&TimBacklightHandle, TIM_BACKLIGHT_CHANNEL); | |
| 1413 } | |
| 1414 #endif | |
| 1415 | |
| 1416 | |
|
549
469e93f8633e
Only execute motion detection functions if features is enabled:
Ideenmodellierer
parents:
540
diff
changeset
|
1417 void set_Backlight_Boost(uint8_t level) |
|
469e93f8633e
Only execute motion detection functions if features is enabled:
Ideenmodellierer
parents:
540
diff
changeset
|
1418 { |
|
469e93f8633e
Only execute motion detection functions if features is enabled:
Ideenmodellierer
parents:
540
diff
changeset
|
1419 if(level < 3) |
|
469e93f8633e
Only execute motion detection functions if features is enabled:
Ideenmodellierer
parents:
540
diff
changeset
|
1420 { |
|
469e93f8633e
Only execute motion detection functions if features is enabled:
Ideenmodellierer
parents:
540
diff
changeset
|
1421 blBoost = level; |
|
469e93f8633e
Only execute motion detection functions if features is enabled:
Ideenmodellierer
parents:
540
diff
changeset
|
1422 } |
|
469e93f8633e
Only execute motion detection functions if features is enabled:
Ideenmodellierer
parents:
540
diff
changeset
|
1423 } |
|
469e93f8633e
Only execute motion detection functions if features is enabled:
Ideenmodellierer
parents:
540
diff
changeset
|
1424 |
| 38 | 1425 static void EXTILine_Buttons_Config(void) |
| 1426 { | |
| 1427 GPIO_InitTypeDef GPIO_InitStructure; | |
| 1428 | |
| 1429 BUTTON_ENTER_GPIO_ENABLE(); | |
| 1430 BUTTON_NEXT_GPIO_ENABLE(); | |
| 1431 BUTTON_BACK_GPIO_ENABLE(); | |
| 1432 | |
| 1433 /* Configure pin as weak PULLUP input */ | |
| 1434 /* buttons */ | |
| 1435 GPIO_InitStructure.Mode = GPIO_MODE_IT_RISING; | |
| 1436 GPIO_InitStructure.Pull = GPIO_NOPULL; | |
| 1437 GPIO_InitStructure.Speed = GPIO_SPEED_LOW; | |
| 1438 | |
| 1439 GPIO_InitStructure.Pin = BUTTON_ENTER_PIN; | |
| 1440 HAL_GPIO_Init(BUTTON_ENTER_GPIO_PORT, &GPIO_InitStructure); | |
| 1441 | |
| 1442 GPIO_InitStructure.Pin = BUTTON_NEXT_PIN; | |
| 1443 HAL_GPIO_Init(BUTTON_NEXT_GPIO_PORT, &GPIO_InitStructure); | |
| 1444 | |
| 1445 GPIO_InitStructure.Pin = BUTTON_BACK_PIN; | |
| 1446 HAL_GPIO_Init(BUTTON_BACK_GPIO_PORT, &GPIO_InitStructure); | |
| 1447 | |
| 1448 /* Enable and set EXTI Line0 Interrupt to the lowest priority */ | |
| 1449 HAL_NVIC_SetPriority(BUTTON_ENTER_EXTI_IRQn, 2, 0); | |
| 1450 HAL_NVIC_SetPriority(BUTTON_NEXT_EXTI_IRQn, 2, 0); | |
| 1451 HAL_NVIC_SetPriority(BUTTON_BACK_EXTI_IRQn, 2, 0); | |
| 1452 HAL_NVIC_EnableIRQ(BUTTON_ENTER_EXTI_IRQn); | |
| 1453 HAL_NVIC_EnableIRQ(BUTTON_NEXT_EXTI_IRQn); | |
| 1454 HAL_NVIC_EnableIRQ(BUTTON_BACK_EXTI_IRQn); | |
| 1455 | |
| 1456 #ifdef BUTTON_CUSTOM_PIN | |
| 1457 BUTTON_CUSTOM_GPIO_ENABLE(); | |
| 1458 GPIO_InitStructure.Pin = BUTTON_CUSTOM_PIN; | |
| 1459 HAL_GPIO_Init(BUTTON_CUSTOM_GPIO_PORT, &GPIO_InitStructure); | |
| 1460 HAL_NVIC_SetPriority(BUTTON_CUSTOM_EXTI_IRQn, 2, 0); | |
| 1461 HAL_NVIC_EnableIRQ(BUTTON_CUSTOM_EXTI_IRQn); | |
| 1462 #endif | |
| 1463 } | |
| 1464 | |
| 1465 | |
| 1466 /** | |
| 1467 * @brief System Clock Configuration | |
| 1468 * The system Clock is configured as follow : | |
| 1469 * System Clock source = PLL (HSE) | |
| 1470 * SYSCLK(Hz) = 180000000 | |
| 1471 * HCLK(Hz) = 180000000 | |
| 1472 * AHB Prescaler = 1 | |
| 1473 * APB1 Prescaler = 4 | |
| 1474 * APB2 Prescaler = 2 | |
| 1475 * HSE Frequency(Hz) = 8000000 | |
| 1476 * PLL_M = 8 | |
| 1477 * PLL_N = 360 | |
| 1478 * PLL_P = 2 | |
| 1479 * PLL_Q = 7 | |
| 1480 * VDD(V) = 3.3 | |
| 1481 * Main regulator output voltage = Scale1 mode | |
| 1482 * Flash Latency(WS) = 5 | |
| 1483 * The LTDC Clock is configured as follow : | |
| 1484 * PLLSAIN = 192 | |
| 1485 * PLLSAIR = 4 | |
| 1486 * PLLSAIDivR = 8 | |
| 1487 * @param None | |
| 1488 * @retval None | |
| 1489 */ | |
| 1490 static void SystemClock_Config(void) | |
| 1491 { | |
| 1492 | |
| 1493 /* Enable Power Control clock */ | |
| 1494 __PWR_CLK_ENABLE(); | |
| 1495 | |
| 1496 /* The voltage scaling allows optimizing the power consumption when the device is | |
| 1497 clocked below the maximum system frequency, to update the voltage scaling value | |
| 1498 regarding system frequency refer to product datasheet. */ | |
| 1499 __HAL_PWR_VOLTAGESCALING_CONFIG( PWR_REGULATOR_VOLTAGE_SCALE1 ); | |
| 1500 | |
| 1501 /*##-1- System Clock Configuration #########################################*/ | |
| 1502 /* Enable HighSpeed Oscillator and activate PLL with HSE/HSI as source */ | |
| 1503 RCC_OscInitTypeDef RCC_OscInitStruct = { 0 }; | |
| 1504 #ifdef DISC1_BOARD | |
| 1505 // Use High Speed Internal (HSI) oscillator, running at 16MHz. | |
| 1506 RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI; | |
| 1507 RCC_OscInitStruct.HSIState = RCC_HSI_ON; | |
| 1508 RCC_OscInitStruct.HSICalibrationValue = 0x10; | |
| 1509 RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI; | |
| 1510 RCC_OscInitStruct.PLL.PLLM = 16; // HSI/16 is 1Mhz. | |
| 1511 #else | |
| 1512 // Use High Speed External oscillator, running at 8MHz | |
| 1513 RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; | |
| 1514 RCC_OscInitStruct.HSEState = RCC_HSE_ON; | |
| 1515 RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; | |
| 1516 RCC_OscInitStruct.PLL.PLLM = 8; // HSE/8 is 1Mhz. | |
| 1517 #endif | |
| 1518 // System clock = PLL (1MHz) * N/p = 180 MHz. | |
| 1519 RCC_OscInitStruct.PLL.PLLN = 360; | |
| 1520 RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; | |
| 1521 RCC_OscInitStruct.PLL.PLLQ = 7; | |
| 1522 RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; | |
| 1523 HAL_RCC_OscConfig( &RCC_OscInitStruct ); | |
| 1524 | |
| 1525 // HAL_PWREx_ActivateOverDrive(); | |
| 1526 HAL_PWREx_DeactivateOverDrive(); | |
| 1527 | |
| 1528 /* Select PLL as system clock source and configure the HCLK, PCLK1 and PCLK2 clocks dividers */ | |
| 1529 RCC_ClkInitTypeDef RCC_ClkInitStruct = { 0 }; | |
| 1530 RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | |
| 1531 | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2; | |
| 1532 RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; | |
| 1533 RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; | |
| 1534 RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4; | |
| 1535 RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2; | |
| 1536 HAL_RCC_ClockConfig( &RCC_ClkInitStruct, FLASH_LATENCY_8 ); //FLASH_LATENCY_5); | |
| 1537 | |
| 1538 /*##-2- LTDC Clock Configuration ###########################################*/ | |
| 1539 /* LCD clock configuration */ | |
| 1540 /* PLLSAI_VCO Input = HSE_VALUE/PLL_M = 1 Mhz */ | |
| 1541 /* PLLSAI_VCO Output = PLLSAI_VCO Input * PLLSAIN = 192 Mhz */ | |
| 1542 /* PLLLCDCLK = PLLSAI_VCO Output/PLLSAIR = 192/4 = 48 Mhz */ | |
| 1543 /* LTDC clock frequency = PLLLCDCLK / RCC_PLLSAIDIVR_8 = 48/8 = 6 Mhz */ | |
| 1544 | |
| 1545 /* neu: 8MHz/8*300/5/8 = 7,5 MHz = 19,5 Hz bei 800 x 480 */ | |
| 1546 RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0}; | |
| 1547 PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_LTDC; | |
| 1548 PeriphClkInitStruct.PLLSAI.PLLSAIN = 300; //192; | |
| 1549 PeriphClkInitStruct.PLLSAI.PLLSAIR = 5; //4; | |
| 1550 PeriphClkInitStruct.PLLSAIDivR = RCC_PLLSAIDIVR_8;//RCC_PLLSAIDIVR_4;// RCC_PLLSAIDIVR_2; // RCC_PLLSAIDIVR_8 | |
| 1551 HAL_RCCEx_PeriphCLKConfig( &PeriphClkInitStruct ); | |
| 1552 } | |
| 1553 | |
| 1554 | |
| 1555 /** | |
| 1556 * @brief This function is executed in case of error occurrence. | |
| 1557 * @param None | |
| 1558 * @retval None | |
| 1559 */ | |
| 1560 static void Error_Handler(void) | |
| 1561 { | |
| 1562 /* Turn LED3 on */ | |
| 1563 // BSP_LED_On(LED3); | |
| 1564 while(1) | |
| 1565 { | |
| 1566 } | |
| 1567 } | |
| 1568 | |
|
95
2a74647d28d1
Debounce. Bounced buttons fixed.
Dmitry Romanov <kitt@bk.ru>
parents:
91
diff
changeset
|
1569 /** |
| 38 | 1570 * @brief Perform the SDRAM exernal memory inialization sequence |
| 1571 * @param hsdram: SDRAM handle | |
| 1572 * @param Command: Pointer to SDRAM command structure | |
| 1573 * @retval None | |
| 1574 */ | |
| 1575 static void SDRAM_Initialization_Sequence(SDRAM_HandleTypeDef *hsdram, FMC_SDRAM_CommandTypeDef *Command) | |
| 1576 { | |
| 1577 __IO uint32_t tmpmrd =0; | |
| 1578 /* Step 3: Configure a clock configuration enable command */ | |
| 1579 Command->CommandMode = FMC_SDRAM_CMD_CLK_ENABLE; | |
| 1580 Command->CommandTarget = FMC_SDRAM_CMD_TARGET_BANK2; | |
| 1581 Command->AutoRefreshNumber = 1; | |
| 1582 Command->ModeRegisterDefinition = 0; | |
|
95
2a74647d28d1
Debounce. Bounced buttons fixed.
Dmitry Romanov <kitt@bk.ru>
parents:
91
diff
changeset
|
1583 |
| 38 | 1584 /* Send the command */ |
| 1585 HAL_SDRAM_SendCommand(hsdram, Command, 0x1000); | |
| 1586 | |
| 1587 /* Step 4: Insert 100 ms delay */ | |
| 1588 HAL_Delay(100); | |
|
95
2a74647d28d1
Debounce. Bounced buttons fixed.
Dmitry Romanov <kitt@bk.ru>
parents:
91
diff
changeset
|
1589 |
| 38 | 1590 /* Step 5: Configure a PALL (precharge all) command */ |
| 1591 Command->CommandMode = FMC_SDRAM_CMD_PALL; | |
| 1592 Command->CommandTarget = FMC_SDRAM_CMD_TARGET_BANK2; | |
| 1593 Command->AutoRefreshNumber = 1; | |
| 1594 Command->ModeRegisterDefinition = 0; | |
| 1595 | |
| 1596 /* Send the command */ | |
| 1597 HAL_SDRAM_SendCommand(hsdram, Command, 0x1000); | |
|
95
2a74647d28d1
Debounce. Bounced buttons fixed.
Dmitry Romanov <kitt@bk.ru>
parents:
91
diff
changeset
|
1598 |
| 38 | 1599 /* Step 6 : Configure a Auto-Refresh command */ |
| 1600 Command->CommandMode = FMC_SDRAM_CMD_AUTOREFRESH_MODE; | |
| 1601 Command->CommandTarget = FMC_SDRAM_CMD_TARGET_BANK2; | |
| 1602 Command->AutoRefreshNumber = 4; | |
| 1603 Command->ModeRegisterDefinition = 0; | |
| 1604 | |
| 1605 /* Send the command */ | |
| 1606 HAL_SDRAM_SendCommand(hsdram, Command, 0x1000); | |
|
95
2a74647d28d1
Debounce. Bounced buttons fixed.
Dmitry Romanov <kitt@bk.ru>
parents:
91
diff
changeset
|
1607 |
| 38 | 1608 /* Step 7: Program the external memory mode register */ |
| 1609 tmpmrd = (uint32_t)SDRAM_MODEREG_BURST_LENGTH_2 | | |
| 1610 SDRAM_MODEREG_BURST_TYPE_SEQUENTIAL | | |
| 1611 SDRAM_MODEREG_CAS_LATENCY_3 | | |
| 1612 SDRAM_MODEREG_OPERATING_MODE_STANDARD | | |
| 1613 SDRAM_MODEREG_WRITEBURST_MODE_SINGLE; | |
|
95
2a74647d28d1
Debounce. Bounced buttons fixed.
Dmitry Romanov <kitt@bk.ru>
parents:
91
diff
changeset
|
1614 |
| 38 | 1615 Command->CommandMode = FMC_SDRAM_CMD_LOAD_MODE; |
| 1616 Command->CommandTarget = FMC_SDRAM_CMD_TARGET_BANK2; | |
| 1617 Command->AutoRefreshNumber = 1; | |
| 1618 Command->ModeRegisterDefinition = tmpmrd; | |
|
95
2a74647d28d1
Debounce. Bounced buttons fixed.
Dmitry Romanov <kitt@bk.ru>
parents:
91
diff
changeset
|
1619 |
| 38 | 1620 /* Send the command */ |
| 1621 HAL_SDRAM_SendCommand(hsdram, Command, 0x1000); | |
| 1622 | |
| 1623 /* Step 8: Set the refresh rate counter */ | |
| 1624 /* (15.62 us x Freq) - 20 */ | |
| 1625 /* neu: (8 us x Freq) - 20 */ | |
| 1626 /* Set the device refresh counter */ | |
| 1627 HAL_SDRAM_ProgramRefreshRate(hsdram, REFRESH_COUNT); | |
|
95
2a74647d28d1
Debounce. Bounced buttons fixed.
Dmitry Romanov <kitt@bk.ru>
parents:
91
diff
changeset
|
1628 } |
| 38 | 1629 |
| 1630 | |
| 1631 /** | |
| 1632 ****************************************************************************** | |
| 1633 ****************************************************************************** | |
| 1634 ****************************************************************************** | |
| 1635 */ | |
| 1636 | |
| 1637 | |
| 1638 /** | |
| 1639 * @brief DMA2D configuration. | |
| 1640 * @note This function Configure tha DMA2D peripheral : | |
| 1641 * 1) Configure the transfer mode : memory to memory W/ pixel format conversion | |
| 1642 * 2) Configure the output color mode as ARGB4444 | |
| 1643 * 3) Configure the output memory address at SRAM memory | |
| 1644 * 4) Configure the data size : 320x120 (pixels) | |
| 1645 * 5) Configure the input color mode as ARGB8888 | |
| 1646 * 6) Configure the input memory address at FLASH memory | |
| 1647 * @retval | |
| 1648 * None | |
| 1649 */ | |
| 1650 | |
| 1651 static void SDRAM_Config(void) | |
| 1652 { | |
| 1653 /*##-1- Configure the SDRAM device #########################################*/ | |
| 1654 /* SDRAM device configuration */ | |
| 1655 hsdram.Instance = FMC_SDRAM_DEVICE; | |
| 1656 | |
| 1657 /* Timing configuration for 90 Mhz of SD clock frequency (180Mhz/2) */ | |
| 1658 /* TMRD: 2 Clock cycles */ | |
| 1659 SDRAM_Timing.LoadToActiveDelay = 2; | |
| 1660 /* TXSR: min=70ns (6x11.90ns) */ | |
| 1661 SDRAM_Timing.ExitSelfRefreshDelay = 7; | |
| 1662 /* TRAS: min=42ns (4x11.90ns) max=120k (ns) */ | |
| 1663 SDRAM_Timing.SelfRefreshTime = 4; | |
| 1664 /* TRC: min=63 (6x11.90ns) */ | |
| 1665 SDRAM_Timing.RowCycleDelay = 7; | |
| 1666 /* TWR: 2 Clock cycles */ | |
| 1667 SDRAM_Timing.WriteRecoveryTime = 2; | |
| 1668 /* TRP: 15ns => 2x11.90ns */ | |
| 1669 SDRAM_Timing.RPDelay = 2; | |
| 1670 /* TRCD: 15ns => 2x11.90ns */ | |
| 1671 SDRAM_Timing.RCDDelay = 2; | |
| 1672 | |
| 1673 hsdram.Init.SDBank = FMC_SDRAM_BANK2; | |
| 1674 hsdram.Init.ColumnBitsNumber = FMC_SDRAM_COLUMN_BITS_NUM_9; | |
| 1675 hsdram.Init.RowBitsNumber = FMC_SDRAM_ROW_BITS_NUM_13; | |
| 1676 hsdram.Init.MemoryDataWidth = SDRAM_MEMORY_WIDTH; | |
| 1677 hsdram.Init.InternalBankNumber = FMC_SDRAM_INTERN_BANKS_NUM_4; | |
| 1678 hsdram.Init.CASLatency = FMC_SDRAM_CAS_LATENCY_3; | |
| 1679 hsdram.Init.WriteProtection = FMC_SDRAM_WRITE_PROTECTION_DISABLE; | |
| 1680 hsdram.Init.SDClockPeriod = SDCLOCK_PERIOD; | |
| 1681 hsdram.Init.ReadBurst = FMC_SDRAM_RBURST_DISABLE; | |
| 1682 hsdram.Init.ReadPipeDelay = FMC_SDRAM_RPIPE_DELAY_1; | |
| 1683 | |
| 1684 /* Initialize the SDRAM controller */ | |
| 1685 if(HAL_SDRAM_Init(&hsdram, &SDRAM_Timing) != HAL_OK) | |
| 1686 { | |
| 1687 /* Initialization Error */ | |
| 1688 Error_Handler(); | |
| 1689 } | |
|
95
2a74647d28d1
Debounce. Bounced buttons fixed.
Dmitry Romanov <kitt@bk.ru>
parents:
91
diff
changeset
|
1690 |
| 38 | 1691 /* Program the SDRAM external device */ |
| 1692 SDRAM_Initialization_Sequence(&hsdram, &command); | |
| 1693 } | |
| 1694 | |
| 1695 | |
| 1696 #ifdef USE_FULL_ASSERT | |
| 1697 | |
| 1698 /** | |
| 1699 * @brief Reports the name of the source file and the source line number | |
| 1700 * where the assert_param error has occurred. | |
| 1701 * @param file: pointer to the source file name | |
| 1702 * @param line: assert_param error line source number | |
| 1703 * @retval None | |
| 1704 */ | |
| 1705 void assert_failed(uint8_t* file, uint32_t line) | |
| 1706 { | |
| 1707 /* User can add his own implementation to report the file name and line number, | |
| 1708 ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ | |
| 1709 | |
| 1710 /* Infinite loop */ | |
| 1711 while (1) | |
| 1712 { | |
| 1713 } | |
| 1714 } | |
| 1715 #endif | |
| 1716 | |
| 1717 | |
|
300
5ca177d2df5d
cleanup: remove commented/unused code, make static
Jan Mulder <jlmulder@xs4all.nl>
parents:
272
diff
changeset
|
1718 static void deco_loop(void) |
| 38 | 1719 { |
| 1720 typedef enum | |
| 1721 { | |
| 1722 CALC_VPM, | |
| 1723 CALC_VPM_FUTURE, | |
| 1724 CALC_BUEHLMANN, | |
| 1725 CALC_BUEHLMANN_FUTURE, | |
| 149 | 1726 CALC_INVALID |
| 38 | 1727 } CALC_WHAT; |
| 1728 | |
| 149 | 1729 static CALC_WHAT what = CALC_INVALID; |
|
223
5f535ef6a3db
Bugfix, minor: properly alternate VPM/Buhlmann in deco loop
Jan Mulder <jlmulder@xs4all.nl>
parents:
217
diff
changeset
|
1730 static int counter = 0; |
| 412 | 1731 if((stateUsed->mode != MODE_DIVE) || (stateUsed->diveSettings.diveMode == DIVEMODE_Apnea) || (stateUsed->diveSettings.diveMode == DIVEMODE_Gauge) || (decoLock != DECO_CALC_ready )) |
| 38 | 1732 return; |
| 1733 | |
| 651 | 1734 if((stateUsed->warnings.betterSetpoint) && (settingsGetPointer()->autoSetpoint) && (settingsGetPointer()->CCR_Mode == CCRMODE_FixedSetpoint)) |
| 1735 { | |
|
773
2c243233c999
Menu shortcut for bailout / return to circuit when diving in CCR mode (mikeller)
heinrichsweikamp
parents:
765
diff
changeset
|
1736 openEdit_DiveSelectBetterSetpoint(false); |
| 651 | 1737 } |
| 1738 | |
| 38 | 1739 decoLock = DECO_CALC_running; |
| 1740 | |
| 1741 if(stateDeco.diveSettings.deco_type.ub.standard == GF_MODE) | |
| 1742 { | |
| 1743 // hw 151110 mh wants future TTS even in deco zone if((what == CALC_BUEHLMANN) && (stateDeco.lifeData.pressure_ambient_bar > stateDeco.diveSettings.internal__pressure_first_stop_ambient_bar_as_upper_limit_for_gf_low_otherwise_zero)) | |
| 1744 if(what == CALC_BUEHLMANN) | |
| 1745 { | |
| 1746 //Calc future | |
| 1747 what = CALC_BUEHLMANN_FUTURE; | |
| 1748 } | |
| 1749 else | |
| 1750 what = CALC_BUEHLMANN; | |
| 1751 | |
| 1752 } | |
| 1753 else | |
| 1754 { | |
| 1755 // hw 151110 mh wants future TTS even in deco zone if((what == CALC_VPM) && (!stateDeco.vpm.deco_zone_reached)) | |
| 1756 if(what == CALC_VPM) | |
| 1757 { | |
| 1758 //Calc future | |
| 1759 what = CALC_VPM_FUTURE; | |
| 1760 } | |
| 1761 else | |
| 1762 what = CALC_VPM; | |
| 1763 } | |
| 1764 | |
| 1765 //In one of ten calc the other option | |
| 1766 if(counter == 10) | |
| 1767 { | |
| 1768 if(what == CALC_VPM) | |
| 1769 what = CALC_BUEHLMANN; | |
| 1770 if(what == CALC_BUEHLMANN) | |
| 1771 what = CALC_VPM; | |
| 1772 counter = 0; | |
| 1773 } | |
| 1774 | |
| 1775 decom_CreateGasChangeList(&stateDeco.diveSettings, &stateDeco.lifeData); | |
| 1776 | |
| 1777 switch(what) | |
| 1778 { | |
| 149 | 1779 case CALC_VPM: |
| 896 | 1780 #ifdef T7_DEBUG_RUNTIME |
| 1781 startTimeDecoLoop = HAL_GetTick(); | |
| 1782 #endif | |
| 149 | 1783 vpm_calc(&stateDeco.lifeData,&stateDeco.diveSettings,&stateDeco.vpm,&stateDeco.decolistVPM, DECOSTOPS); |
| 896 | 1784 #ifdef T7_DEBUG_RUNTIME |
| 1785 timeDecoLoop = time_elapsed_ms(startTimeDecoLoop, HAL_GetTick()); | |
| 1786 #endif | |
| 149 | 1787 decoLock = DECO_CALC_FINSHED_vpm; |
| 1788 return; | |
| 1789 case CALC_VPM_FUTURE: | |
| 1790 decom_tissues_exposure(stateDeco.diveSettings.future_TTS_minutes * 60,&stateDeco.lifeData); | |
| 1791 vpm_calc(&stateDeco.lifeData,&stateDeco.diveSettings,&stateDeco.vpm,&stateDeco.decolistFutureVPM, FUTURESTOPS); | |
| 1792 decoLock = DECO_CALC_FINSHED_Futurevpm; | |
| 1793 return; | |
| 1794 case CALC_BUEHLMANN: | |
| 1795 buehlmann_calc_deco(&stateDeco.lifeData,&stateDeco.diveSettings,&stateDeco.decolistBuehlmann); | |
|
250
822416168585
Buelmann: new implementation for ceiling
Jan Mulder <jlmulder@xs4all.nl>
parents:
248
diff
changeset
|
1796 buehlmann_ceiling_calculator(&stateDeco.lifeData, &stateDeco.decolistBuehlmann); |
| 248 | 1797 buehlmann_super_saturation_calculator(&stateDeco.lifeData,&stateDeco.decolistBuehlmann); |
| 149 | 1798 decoLock = DECO_CALC_FINSHED_Buehlmann; |
| 1799 return; | |
| 1800 case CALC_BUEHLMANN_FUTURE: | |
| 1801 decom_tissues_exposure(stateDeco.diveSettings.future_TTS_minutes * 60,&stateDeco.lifeData); | |
| 1802 buehlmann_calc_deco(&stateDeco.lifeData,&stateDeco.diveSettings,&stateDeco.decolistFutureBuehlmann); | |
| 1803 decoLock = DECO_CALC_FINSHED_FutureBuehlmann; | |
| 1804 return; | |
| 1805 default: break; | |
| 38 | 1806 } |
| 1807 counter++; | |
| 1808 } | |
| 1809 | |
|
300
5ca177d2df5d
cleanup: remove commented/unused code, make static
Jan Mulder <jlmulder@xs4all.nl>
parents:
272
diff
changeset
|
1810 static void resetToFirmwareUpdate(void) |
| 38 | 1811 { |
| 1812 __HAL_RCC_CLEAR_RESET_FLAGS(); | |
| 1813 HAL_NVIC_SystemReset(); | |
| 1814 } | |
| 1815 | |
|
422
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1816 static void TimeoutControlRequestModechange(void) |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1817 { |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1818 RequestModeChange = 1; |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1819 } |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1820 |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1821 static void TimeoutControl(void) |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1822 { |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1823 static uint8_t last_base; |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1824 |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1825 SStateList status; |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1826 uint32_t timeout_in_seconds; |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1827 uint32_t timeout_limit_Surface_in_seconds; |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1828 _Bool InDiveMode = 0; |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1829 |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1830 get_globalStateList(&status); |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1831 |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1832 if(stateUsed->mode == MODE_DIVE) |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1833 { |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1834 InDiveMode = 1; |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1835 } |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1836 else |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1837 { |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1838 InDiveMode = 0; |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1839 } |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1840 /* timeout control */ |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1841 if(RequestModeChange) ///< from RTE, set in data_exchange_main.c |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1842 time_without_button_pressed_deciseconds = (settingsGetPointer()->timeoutSurfacemode / 4) * 3; |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1843 if(status.base != last_base) |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1844 time_without_button_pressed_deciseconds = 0; |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1845 last_base = status.base; |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1846 timeout_in_seconds = time_without_button_pressed_deciseconds / 10; |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1847 time_without_button_pressed_deciseconds += 1; |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1848 if(RequestModeChange || (timeout_in_seconds != time_without_button_pressed_deciseconds / 10)) |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1849 { |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1850 #ifdef NO_TIMEOUT |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1851 timeout_in_seconds = 0; |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1852 #else |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1853 timeout_in_seconds += 1; |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1854 #endif |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1855 |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1856 if(InDiveMode) |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1857 { |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1858 switch(status.base) |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1859 { |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1860 case BaseHome: |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1861 if((status.line != 0) && (timeout_in_seconds >= settingsGetPointer()->timeoutEnterButtonSelectDive)) |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1862 { |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1863 set_globalState(StD); |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1864 timeout_in_seconds = 0; |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1865 } |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1866 break; |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1867 |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1868 case BaseMenu: |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1869 if((status.line == 0) && ((timeout_in_seconds >= settingsGetPointer()->timeoutMenuDive) || RequestModeChange)) |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1870 { |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1871 exitMenu(); |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1872 timeout_in_seconds = 0; |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1873 } |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1874 if((status.line != 0) && ((timeout_in_seconds >= settingsGetPointer()->timeoutMenuEdit) || RequestModeChange)) |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1875 { |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1876 exitMenuEdit_to_Home(); |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1877 timeout_in_seconds = 0; |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1878 } |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1879 break; |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1880 default: |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1881 break; |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1882 } |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1883 } |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1884 else /* surface mode */ |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1885 { |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1886 switch(status.base) |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1887 { |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1888 case BaseHome: |
|
670
7a352b449055
Reduce display brightness in case the charger is connected:
Ideenmodellierer
parents:
662
diff
changeset
|
1889 /* The RTE will mark a charge value as suspect after startup. Main know the update condition and may confirm that the value is most likely valid */ |
|
7a352b449055
Reduce display brightness in case the charger is connected:
Ideenmodellierer
parents:
662
diff
changeset
|
1890 // if(!(stateRealGetPointer()->warnings.lowBattery) && ((stateRealGetPointer()->lifeData.battery_charge > 9) || (wasFirmwareUpdateCheckBattery))) |
|
422
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1891 { |
|
670
7a352b449055
Reduce display brightness in case the charger is connected:
Ideenmodellierer
parents:
662
diff
changeset
|
1892 if(stateRealGetPointer()->lifeData.battery_charge < 0.0) |
|
7a352b449055
Reduce display brightness in case the charger is connected:
Ideenmodellierer
parents:
662
diff
changeset
|
1893 { |
|
7a352b449055
Reduce display brightness in case the charger is connected:
Ideenmodellierer
parents:
662
diff
changeset
|
1894 if(fabs(stateRealGetPointerWrite()->lastKnownBatteryPercentage - fabs(stateRealGetPointer()->lifeData.battery_charge)) < 1.0) |
|
7a352b449055
Reduce display brightness in case the charger is connected:
Ideenmodellierer
parents:
662
diff
changeset
|
1895 { |
|
7a352b449055
Reduce display brightness in case the charger is connected:
Ideenmodellierer
parents:
662
diff
changeset
|
1896 setBatteryPercentage(settingsGetPointer()->lastKnownBatteryPercentage); /* confirm that value provided by RTE is valid (maybe reset happened) */ |
|
7a352b449055
Reduce display brightness in case the charger is connected:
Ideenmodellierer
parents:
662
diff
changeset
|
1897 } |
|
7a352b449055
Reduce display brightness in case the charger is connected:
Ideenmodellierer
parents:
662
diff
changeset
|
1898 } |
|
7a352b449055
Reduce display brightness in case the charger is connected:
Ideenmodellierer
parents:
662
diff
changeset
|
1899 else |
|
7a352b449055
Reduce display brightness in case the charger is connected:
Ideenmodellierer
parents:
662
diff
changeset
|
1900 { |
|
7a352b449055
Reduce display brightness in case the charger is connected:
Ideenmodellierer
parents:
662
diff
changeset
|
1901 if(!(stateRealGetPointer()->warnings.lowBattery) && (stateRealGetPointer()->lifeData.battery_charge > 9)) |
|
7a352b449055
Reduce display brightness in case the charger is connected:
Ideenmodellierer
parents:
662
diff
changeset
|
1902 { |
|
7a352b449055
Reduce display brightness in case the charger is connected:
Ideenmodellierer
parents:
662
diff
changeset
|
1903 stateRealGetPointerWrite()->lastKnownBatteryPercentage = stateRealGetPointer()->lifeData.battery_charge; |
|
7a352b449055
Reduce display brightness in case the charger is connected:
Ideenmodellierer
parents:
662
diff
changeset
|
1904 } |
|
7a352b449055
Reduce display brightness in case the charger is connected:
Ideenmodellierer
parents:
662
diff
changeset
|
1905 } |
|
422
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1906 } |
|
670
7a352b449055
Reduce display brightness in case the charger is connected:
Ideenmodellierer
parents:
662
diff
changeset
|
1907 if((wasFirmwareUpdateCheckBattery) && (timeout_in_seconds > 3)) |
|
422
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1908 { |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1909 wasFirmwareUpdateCheckBattery = 0; |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1910 setButtonResponsiveness(settingsGetPointer()->ButtonResponsiveness); // added 170306 |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1911 if( (settingsGetPointer()->lastKnownBatteryPercentage > 0) |
|
670
7a352b449055
Reduce display brightness in case the charger is connected:
Ideenmodellierer
parents:
662
diff
changeset
|
1912 && (settingsGetPointer()->lastKnownBatteryPercentage <= 101.0) |
|
422
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1913 && (stateRealGetPointer()->warnings.lowBattery)) |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1914 { |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1915 setBatteryPercentage(settingsGetPointer()->lastKnownBatteryPercentage); |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1916 } |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1917 } |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1918 // stuff before and new @161121 CCR-sensor limit 10 minutes |
| 662 | 1919 if(isLoopMode(settingsGetPointer()->dive_mode) && (settingsGetPointer()->CCR_Mode == CCRMODE_Sensors)) |
|
422
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1920 { |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1921 timeout_limit_Surface_in_seconds = settingsGetPointer()->timeoutSurfacemodeWithSensors; |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1922 } |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1923 else |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1924 { |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1925 timeout_limit_Surface_in_seconds = settingsGetPointer()->timeoutSurfacemode; |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1926 } |
|
805
dd7ce655db26
Adds a simple countdown timer, available as a custom view in surface and dive mode.
heinrichsweikamp
parents:
776
diff
changeset
|
1927 if (timeout_in_seconds >= timeout_limit_Surface_in_seconds) { |
|
dd7ce655db26
Adds a simple countdown timer, available as a custom view in surface and dive mode.
heinrichsweikamp
parents:
776
diff
changeset
|
1928 if (t7_isTimerRunning(true)) { |
|
dd7ce655db26
Adds a simple countdown timer, available as a custom view in surface and dive mode.
heinrichsweikamp
parents:
776
diff
changeset
|
1929 // Delay sleep until the timer has elapsed |
|
dd7ce655db26
Adds a simple countdown timer, available as a custom view in surface and dive mode.
heinrichsweikamp
parents:
776
diff
changeset
|
1930 timeout_in_seconds = timeout_limit_Surface_in_seconds - 1; |
|
dd7ce655db26
Adds a simple countdown timer, available as a custom view in surface and dive mode.
heinrichsweikamp
parents:
776
diff
changeset
|
1931 } else { |
|
dd7ce655db26
Adds a simple countdown timer, available as a custom view in surface and dive mode.
heinrichsweikamp
parents:
776
diff
changeset
|
1932 gotoSleep(); |
|
dd7ce655db26
Adds a simple countdown timer, available as a custom view in surface and dive mode.
heinrichsweikamp
parents:
776
diff
changeset
|
1933 } |
|
422
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1934 } |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1935 break; |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1936 case BaseMenu: |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1937 if((status.line == 0) && ((timeout_in_seconds >= settingsGetPointer()->timeoutMenuSurface) || RequestModeChange)) |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1938 { |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1939 exitMenu(); |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1940 timeout_in_seconds = 0; |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1941 } |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1942 if((status.line != 0) && ((timeout_in_seconds >= settingsGetPointer()->timeoutMenuEdit) || RequestModeChange)) |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1943 { |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1944 if((status.page != (uint8_t)((StMPLAN >> 24) & 0x0F)) || (timeout_in_seconds >= 10*(settingsGetPointer()->timeoutMenuEdit))) |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1945 { |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1946 exitMenuEdit_to_Home(); |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1947 timeout_in_seconds = 0; |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1948 } |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1949 } |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1950 break; |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1951 |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1952 case BaseInfo: |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1953 if((timeout_in_seconds >= settingsGetPointer()->timeoutInfo) || RequestModeChange) |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1954 { |
|
718
b9f699d2e3d0
Updated menu structure to support new sensor information page:
Ideenmodellierer
parents:
697
diff
changeset
|
1955 timeout_in_seconds = 0; |
|
b9f699d2e3d0
Updated menu structure to support new sensor information page:
Ideenmodellierer
parents:
697
diff
changeset
|
1956 |
|
b9f699d2e3d0
Updated menu structure to support new sensor information page:
Ideenmodellierer
parents:
697
diff
changeset
|
1957 switch(status.page) |
|
422
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1958 { |
|
718
b9f699d2e3d0
Updated menu structure to support new sensor information page:
Ideenmodellierer
parents:
697
diff
changeset
|
1959 case InfoPageLogList: exitLog(); |
|
b9f699d2e3d0
Updated menu structure to support new sensor information page:
Ideenmodellierer
parents:
697
diff
changeset
|
1960 break; |
|
b9f699d2e3d0
Updated menu structure to support new sensor information page:
Ideenmodellierer
parents:
697
diff
changeset
|
1961 case InfoPageLogShow: show_logbook_exit(); |
|
b9f699d2e3d0
Updated menu structure to support new sensor information page:
Ideenmodellierer
parents:
697
diff
changeset
|
1962 exitLog(); |
|
b9f699d2e3d0
Updated menu structure to support new sensor information page:
Ideenmodellierer
parents:
697
diff
changeset
|
1963 break; |
|
b9f699d2e3d0
Updated menu structure to support new sensor information page:
Ideenmodellierer
parents:
697
diff
changeset
|
1964 case InfoPageCompass: /* compass has individual timeout */ |
|
b9f699d2e3d0
Updated menu structure to support new sensor information page:
Ideenmodellierer
parents:
697
diff
changeset
|
1965 break; |
|
b9f699d2e3d0
Updated menu structure to support new sensor information page:
Ideenmodellierer
parents:
697
diff
changeset
|
1966 case InfoPageSensor: exitInfoToBack(); |
|
b9f699d2e3d0
Updated menu structure to support new sensor information page:
Ideenmodellierer
parents:
697
diff
changeset
|
1967 break; |
|
b9f699d2e3d0
Updated menu structure to support new sensor information page:
Ideenmodellierer
parents:
697
diff
changeset
|
1968 default: exitInfo(); |
|
b9f699d2e3d0
Updated menu structure to support new sensor information page:
Ideenmodellierer
parents:
697
diff
changeset
|
1969 break; |
|
422
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1970 } |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1971 } |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1972 break; |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1973 default: |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1974 break; |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1975 } |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1976 } |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1977 } |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1978 RequestModeChange = 0; |
|
b67327177159
Moved Timeout handling out of 100ms callback:
ideenmodellierer
parents:
412
diff
changeset
|
1979 } |
| 896 | 1980 |
| 1981 #ifdef T7_DEBUG_RUNTIME | |
| 1982 uint32_t getMainLoopTime() | |
| 1983 { | |
| 1984 return timeMainLoop; | |
| 1985 } | |
| 1986 uint32_t getDecoLoopTime() | |
| 1987 { | |
| 1988 return timeDecoLoop; | |
| 1989 } | |
| 1990 uint32_t getGfxLoopTime() | |
| 1991 { | |
| 1992 return timeGfxLoop; | |
| 1993 } | |
| 1994 #endif | |
| 38 | 1995 // debugging by https://blog.feabhas.com/2013/02/developing-a-generic-hard-fault-handler-for-arm-cortex-m3cortex-m4/ |
| 1996 | |
| 1997 /* | |
| 1998 void printErrorMsg(const char * errMsg) | |
| 1999 { | |
| 2000 | |
| 2001 // printf(errMsg); | |
| 2002 // return; | |
| 2003 | |
| 2004 while(*errMsg != 0){ | |
| 2005 ITM_SendChar(*errMsg); | |
| 2006 ++errMsg; | |
| 2007 } | |
| 2008 } | |
| 2009 | |
| 2010 enum { r0, r1, r2, r3, r12, lr, pc, psr}; | |
| 2011 | |
| 2012 void stackDump(uint32_t stack[]) | |
| 2013 { | |
| 2014 static char msg[80]; | |
| 2015 sprintf(msg, "r0 = 0x%08x\n", stack[r0]); printErrorMsg(msg); | |
| 2016 sprintf(msg, "r1 = 0x%08x\n", stack[r1]); printErrorMsg(msg); | |
| 2017 sprintf(msg, "r2 = 0x%08x\n", stack[r2]); printErrorMsg(msg); | |
| 2018 sprintf(msg, "r3 = 0x%08x\n", stack[r3]); printErrorMsg(msg); | |
| 2019 sprintf(msg, "r12 = 0x%08x\n", stack[r12]); printErrorMsg(msg); | |
| 2020 sprintf(msg, "lr = 0x%08x\n", stack[lr]); printErrorMsg(msg); | |
| 2021 sprintf(msg, "pc = 0x%08x\n", stack[pc]); printErrorMsg(msg); | |
| 2022 sprintf(msg, "psr = 0x%08x\n", stack[psr]); printErrorMsg(msg); | |
| 2023 } | |
| 2024 | |
| 2025 void printUsageErrorMsg(uint32_t CFSRValue) | |
| 2026 { | |
| 2027 printErrorMsg("Usage fault: "); | |
| 2028 CFSRValue >>= 16; // right shift to lsb | |
| 2029 if((CFSRValue & (1 << 9)) != 0) { | |
| 2030 printErrorMsg("Divide by zero\n"); | |
| 2031 } | |
| 2032 } | |
| 2033 | |
| 2034 void Hard_Fault_Handler()//uint32_t stack[]) | |
| 2035 { | |
| 2036 static char msg[80]; | |
| 2037 printErrorMsg("In Hard Fault Handler\n"); | |
| 2038 sprintf(msg, "SCB->HFSR = 0x%08x\n", SCB->HFSR); | |
| 2039 printErrorMsg(msg); | |
| 2040 if ((SCB->HFSR & (1 << 30)) != 0) { | |
| 2041 printErrorMsg("Forced Hard Fault\n"); | |
| 2042 sprintf(msg, "SCB->CFSR = 0x%08x\n", SCB->CFSR ); | |
| 2043 printErrorMsg(msg); | |
| 2044 if((SCB->CFSR & 0xFFFF0000) != 0) { | |
| 2045 printUsageErrorMsg(SCB->CFSR); | |
| 2046 } | |
| 2047 } | |
| 2048 __ASM volatile("BKPT #01"); | |
| 2049 while(1); | |
| 2050 } | |
| 2051 | |
| 2052 int my_store_of_MSP; | |
| 2053 | |
| 2054 void HardFault_Handler(void) | |
| 2055 { | |
| 2056 __asm ("MRS my_store_of_MSP, MSP"); | |
| 2057 Hard_Fault_Handler(); | |
| 2058 } | |
| 2059 */ | |
| 2060 | |
| 2061 /* | |
| 2062 __asm void HardFault_Handler(void) | |
| 2063 { | |
| 2064 TST lr, #4 // Test for MSP or PSP | |
| 2065 ITE EQ | |
| 2066 MRSEQ r0, MSP | |
| 2067 MRSNE r0, PSP | |
| 2068 B __cpp(Hard_Fault_Handler) | |
| 2069 } | |
| 2070 */ | |
| 2071 /* | |
| 2072 HardFault_Handler\ | |
| 2073 PROC | |
| 2074 EXPORT HardFault_Handler | |
| 2075 B . | |
| 2076 ENDP | |
| 2077 */ | |
| 2078 | |
| 2079 /* | |
| 2080 __asm int f(int i) | |
| 2081 { | |
| 2082 ADD i, i, #1 // error | |
| 2083 } | |
| 2084 | |
| 2085 EXPORT HardFault_Handler | |
| 2086 HardFault_Handler FUNCTION | |
| 2087 MRS r0, MSP | |
| 2088 B __cpp(Hard_Fault_Handler) | |
| 2089 ENDFUNC | |
| 2090 */ |
