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