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