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