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