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