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