Mercurial > public > ostc4
comparison Discovery/Src/base.c @ 697:d55817a11f4c
Improvment key event detection:
In previous version the evaluation of a button event was called in the 100ms callback. Assuming an event is signaled at the in line for 100ms there is a potential risk to loose a button event. To avoid this scenarion the evaluation function was moved into the extint callback (called ~50+xms) and the line readback tim was reduced to 40ms.
Reminder: This function is not called in the main loop because the main loop is not executed in UART mode => movement would cause key events to not beeing detected
author | Ideenmodellierer |
---|---|
date | Sun, 25 Sep 2022 21:09:18 +0200 |
parents | 7a352b449055 |
children | b9f699d2e3d0 |
comparison
equal
deleted
inserted
replaced
696:cc542448fb28 | 697:d55817a11f4c |
---|---|
269 | 269 |
270 | 270 |
271 static uint8_t blBoost = 0; | 271 static uint8_t blBoost = 0; |
272 static uint8_t RequestModeChange = 0; | 272 static uint8_t RequestModeChange = 0; |
273 | 273 |
274 static uint8_t LastButtonPressed; | 274 static uint8_t LastButtonPressed = INVALID_BUTTON; |
275 static uint32_t LastButtonPressedTick; | 275 static uint32_t LastButtonPressedTick = 0; |
276 static uint32_t BaseTick100ms; /* Tick at last 100ms cycle */ | 276 static uint32_t BaseTick100ms; /* Tick at last 100ms cycle */ |
277 | 277 |
278 /* SDRAM handler declaration */ | 278 /* SDRAM handler declaration */ |
279 static SDRAM_HandleTypeDef hsdram; | 279 static SDRAM_HandleTypeDef hsdram; |
280 static FMC_SDRAM_TimingTypeDef SDRAM_Timing; | 280 static FMC_SDRAM_TimingTypeDef SDRAM_Timing; |
514 } | 514 } |
515 check_warning(); | 515 check_warning(); |
516 updateMiniLiveLogbook(1); | 516 updateMiniLiveLogbook(1); |
517 | 517 |
518 RefreshDisplay(); | 518 RefreshDisplay(); |
519 DoHousekeeping = 0; /* make sure frames are not cleared before they are transferred */ | |
520 TimeoutControl(); /* exit menus if needed */ | 519 TimeoutControl(); /* exit menus if needed */ |
521 | 520 |
522 #ifdef ENABLE_MOTION_CONTROL | 521 #ifdef ENABLE_MOTION_CONTROL |
523 if((stateUsed->mode == MODE_DIVE) && (settingsGetPointer()->MotionDetection != MOTION_DETECT_OFF)) /* handle motion events in divemode only */ | 522 if((stateUsed->mode == MODE_DIVE) && (settingsGetPointer()->MotionDetection != MOTION_DETECT_OFF)) /* handle motion events in divemode only */ |
524 { | 523 { |
571 #endif | 570 #endif |
572 SStateList status; | 571 SStateList status; |
573 _Bool modeChange = 0; | 572 _Bool modeChange = 0; |
574 | 573 |
575 BaseTick100ms = HAL_GetTick(); /* store start of 100ms cycle */ | 574 BaseTick100ms = HAL_GetTick(); /* store start of 100ms cycle */ |
576 | |
577 EvaluateButton(); | |
578 | 575 |
579 if(returnFromCommCleanUpRequest) | 576 if(returnFromCommCleanUpRequest) |
580 { | 577 { |
581 tComm_exit(); | 578 tComm_exit(); |
582 returnFromCommCleanUpRequest = 0; | 579 returnFromCommCleanUpRequest = 0; |
665 if(buttonAction) | 662 if(buttonAction) |
666 GPIO_Pin = buttonAction; | 663 GPIO_Pin = buttonAction; |
667 else | 664 else |
668 #endif | 665 #endif |
669 */ | 666 */ |
670 return; | 667 |
671 } | 668 } |
672 | 669 if((GPIO_Pin == BUTTON_ENTER_PIN) || (GPIO_Pin == BUTTON_NEXT_PIN) || (GPIO_Pin == BUTTON_BACK_PIN)) |
673 LastButtonPressed = GPIO_Pin; | 670 { |
674 LastButtonPressedTick = HAL_GetTick(); | 671 LastButtonPressed = GPIO_Pin; |
672 LastButtonPressedTick = HAL_GetTick(); | |
673 } | |
674 | |
675 EvaluateButton(); | |
675 | 676 |
676 #ifdef DEMOMODE | 677 #ifdef DEMOMODE |
677 uint8_t demoMachineCall = 0; | 678 uint8_t demoMachineCall = 0; |
678 if(GPIO_Pin & 0x80) | 679 if(GPIO_Pin & 0x80) |
679 { | 680 { |
716 SStateList status; | 717 SStateList status; |
717 SSettings* pSettings; | 718 SSettings* pSettings; |
718 pSettings = settingsGetPointer(); | 719 pSettings = settingsGetPointer(); |
719 | 720 |
720 | 721 |
721 if(ButtonAction != ACTION_END) | 722 if(action != ACTION_END) |
722 { | 723 { |
723 get_globalStateList(&status); | 724 get_globalStateList(&status); |
724 | 725 |
725 if (action == ACTION_BUTTON_CUSTOM) { | 726 if (action == ACTION_BUTTON_CUSTOM) { |
726 GFX_screenshot(); | 727 GFX_screenshot(); |
840 pSettings = settingsGetPointer(); | 841 pSettings = settingsGetPointer(); |
841 | 842 |
842 if (GFX_logoStatus() != 0) | 843 if (GFX_logoStatus() != 0) |
843 return; | 844 return; |
844 | 845 |
845 if ((LastButtonPressed != INVALID_BUTTON) && (time_elapsed_ms(LastButtonPressedTick, HAL_GetTick())) > 50) | 846 if ((LastButtonPressed != INVALID_BUTTON) && (time_elapsed_ms(LastButtonPressedTick, HAL_GetTick()) > 40)) |
846 { | 847 { |
847 if (LastButtonPressed == BUTTON_BACK_PIN) { // links | 848 if (LastButtonPressed == BUTTON_BACK_PIN) { // links |
848 if (HAL_GPIO_ReadPin(BUTTON_BACK_GPIO_PORT, BUTTON_BACK_PIN) == 1) { | 849 if (HAL_GPIO_ReadPin(BUTTON_BACK_GPIO_PORT, BUTTON_BACK_PIN) == 1) { |
849 action = ACTION_BUTTON_BACK; | 850 action = ACTION_BUTTON_BACK; |
850 } | 851 } |