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