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