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