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