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