Mercurial > public > ostc4
comparison Discovery/Src/base.c @ 611:916998f90e39
Suspend MotionDetection events while diver is operationg the OSTC:
In the previous version in some situations the customer selection of the diver was immediatly overwritten by the detection function value (e.g. in sector mode). To prevent this behaviour a timeout for the detection has been added. Also in case the diver is operating a sub menu the handling of motion detection events will now be blocked.
| author | Ideenmodellierer |
|---|---|
| date | Thu, 14 Jan 2021 21:25:15 +0100 |
| parents | 132e7e3d13a7 |
| children | 556df4a8f418 |
comparison
equal
deleted
inserted
replaced
| 610:ae7f8333c900 | 611:916998f90e39 |
|---|---|
| 332 return(ch); | 332 return(ch); |
| 333 } | 333 } |
| 334 */ | 334 */ |
| 335 static uint8_t ButtonAction = ACTION_END; | 335 static uint8_t ButtonAction = ACTION_END; |
| 336 | 336 |
| 337 static void StoreButtonAction(uint8_t action) | 337 void StoreButtonAction(uint8_t action) |
| 338 { | 338 { |
| 339 ButtonAction = action; | 339 ButtonAction = action; |
| 340 } | 340 } |
| 341 | 341 |
| 342 // =============================================================================== | 342 // =============================================================================== |
| 347 // =============================================================================== | 347 // =============================================================================== |
| 348 int main(void) | 348 int main(void) |
| 349 { | 349 { |
| 350 uint32_t pLayerInvisible; | 350 uint32_t pLayerInvisible; |
| 351 uint16_t totalDiveCounterFound; | 351 uint16_t totalDiveCounterFound; |
| 352 uint8_t wasInFocus = 0; | |
| 353 | 352 |
| 354 SStateList status; | 353 SStateList status; |
| 355 #ifdef ENABLE_MOTION_CONTROL | 354 |
| 356 detectionState_t pitchstate; | |
| 357 #endif | |
| 358 set_globalState( StBoot0 ); | 355 set_globalState( StBoot0 ); |
| 359 LastButtonPressed = 0; | 356 LastButtonPressed = 0; |
| 360 | 357 |
| 361 HAL_Init(); | 358 HAL_Init(); |
| 362 HAL_NVIC_SetPriorityGrouping( NVIC_PRIORITYGROUP_2 ); | 359 HAL_NVIC_SetPriorityGrouping( NVIC_PRIORITYGROUP_2 ); |
| 508 TimeoutControl(); /* exit menus if needed */ | 505 TimeoutControl(); /* exit menus if needed */ |
| 509 | 506 |
| 510 #ifdef ENABLE_MOTION_CONTROL | 507 #ifdef ENABLE_MOTION_CONTROL |
| 511 if((stateUsed->mode == MODE_DIVE) && (settingsGetPointer()->MotionDetection != MOTION_DETECT_OFF)) /* handle motion events in divemode only */ | 508 if((stateUsed->mode == MODE_DIVE) && (settingsGetPointer()->MotionDetection != MOTION_DETECT_OFF)) /* handle motion events in divemode only */ |
| 512 { | 509 { |
| 513 evaluateMotionDelta(stateUsed->lifeData.compass_roll, stateUsed->lifeData.compass_pitch, stateUsed->lifeData.compass_heading); | 510 if(get_globalState() != StD) |
| 514 checkViewport(stateUsed->lifeData.compass_roll, stateUsed->lifeData.compass_pitch, stateUsed->lifeData.compass_heading); | |
| 515 | |
| 516 if(viewInFocus()) | |
| 517 { | 511 { |
| 518 wasInFocus = 1; | 512 suspendMotionDetection(1); /* do not change custom views while divers is operating the computer */ |
| 519 set_Backlight_Boost(settingsGetPointer()->viewPortMode & 0x03); | 513 } |
| 520 switch(settingsGetPointer()->MotionDetection) | 514 HandleMotionDetection(); |
| 521 { | |
| 522 case MOTION_DETECT_MOVE: pitchstate = detectPitch(stateRealGetPointer()->lifeData.compass_pitch); | |
| 523 break; | |
| 524 case MOTION_DETECT_SECTOR: pitchstate = detectSectorButtonEvent(stateRealGetPointer()->lifeData.compass_pitch); | |
| 525 break; | |
| 526 case MOTION_DETECT_SCROLL: pitchstate = detectScrollButtonEvent(stateRealGetPointer()->lifeData.compass_pitch); | |
| 527 break; | |
| 528 default: | |
| 529 pitchstate = DETECT_NOTHING; | |
| 530 break; | |
| 531 } | |
| 532 if(DETECT_NEG_PITCH == pitchstate) | |
| 533 { | |
| 534 StoreButtonAction((uint8_t)ACTION_PITCH_NEG); | |
| 535 } | |
| 536 if(DETECT_POS_PITCH == pitchstate) | |
| 537 { | |
| 538 StoreButtonAction((uint8_t)ACTION_PITCH_POS); | |
| 539 } | |
| 540 } | |
| 541 else | |
| 542 { | |
| 543 if(wasInFocus) | |
| 544 { | |
| 545 wasInFocus = 0; | |
| 546 if(settingsGetPointer()->design == 7) | |
| 547 { | |
| 548 t7_set_customview_to_primary(); | |
| 549 } | |
| 550 else | |
| 551 { | |
| 552 t3_set_customview_to_primary(); | |
| 553 } | |
| 554 } | |
| 555 | |
| 556 set_Backlight_Boost(0); | |
| 557 } | |
| 558 } | 515 } |
| 559 #endif | 516 #endif |
| 560 | 517 |
| 561 #ifdef SIM_WRITES_LOGBOOK | 518 #ifdef SIM_WRITES_LOGBOOK |
| 562 if(stateUsed == stateSimGetPointer()) | 519 if(stateUsed == stateSimGetPointer()) |
| 749 | 706 |
| 750 static void TriggerButtonAction() | 707 static void TriggerButtonAction() |
| 751 { | 708 { |
| 752 uint8_t action = ButtonAction; | 709 uint8_t action = ButtonAction; |
| 753 SStateList status; | 710 SStateList status; |
| 711 SSettings* pSettings; | |
| 712 pSettings = settingsGetPointer(); | |
| 713 | |
| 754 | 714 |
| 755 if(ButtonAction != ACTION_END) | 715 if(ButtonAction != ACTION_END) |
| 756 { | 716 { |
| 757 get_globalStateList(&status); | 717 get_globalStateList(&status); |
| 758 | 718 |
| 776 } else if (action == ACTION_BUTTON_BACK) { | 736 } else if (action == ACTION_BUTTON_BACK) { |
| 777 if (get_globalState() == StS) | 737 if (get_globalState() == StS) |
| 778 { | 738 { |
| 779 openInfo(StILOGLIST); | 739 openInfo(StILOGLIST); |
| 780 } | 740 } |
| 781 else if ((status.page == PageDive) && (settingsGetPointer()->design < 7)) | 741 else if ((status.page == PageDive) && (pSettings->design < 7)) |
| 782 { | 742 { |
| 783 if(settingsGetPointer()->design == 3) | 743 if(pSettings->design == 3) |
| 784 { | 744 { |
| 785 if(get_globalState() != StD) /* located in submenu? => return */ | 745 if(get_globalState() != StD) /* located in submenu? => return */ |
| 786 { | 746 { |
| 787 set_globalState(StD); | 747 set_globalState(StD); |
| 788 } | 748 } |
| 789 else /* return to t7 view */ | 749 else /* return to t7 view */ |
| 790 { | 750 { |
| 791 settingsGetPointer()->design = 7; | 751 pSettings->design = 7; |
| 792 if(settingsGetPointer()->MotionDetection == MOTION_DETECT_SECTOR) | 752 if(pSettings->MotionDetection == MOTION_DETECT_SECTOR) |
| 793 { | 753 { |
| 794 DefinePitchSectors(settingsGetPointer()->viewPitch,CUSTOMER_DEFINED_VIEWS); | 754 DefinePitchSectors(pSettings->viewPitch,CUSTOMER_DEFINED_VIEWS); |
| 795 MapCVToSector(); | 755 MapCVToSector(); |
| 796 } | 756 } |
| 797 } | 757 } |
| 798 } | 758 } |
| 799 else | 759 else |
| 800 { | 760 { |
| 801 settingsGetPointer()->design = 7; // auto switch to 9 if necessary | 761 pSettings->design = 7; // auto switch to 9 if necessary |
| 802 } | 762 } |
| 803 } else if ((status.page == PageDive) && (status.line != 0)) | 763 } else if ((status.page == PageDive) && (status.line != 0)) |
| 804 { | 764 { |
| 805 if (settingsGetPointer()->extraDisplay == EXTRADISPLAY_BIGFONT) | 765 if (pSettings->extraDisplay == EXTRADISPLAY_BIGFONT) |
| 806 { | 766 { |
| 807 settingsGetPointer()->design = 3; | 767 pSettings->design = 3; |
| 808 if(settingsGetPointer()->MotionDetection == MOTION_DETECT_SECTOR) | 768 if(pSettings->MotionDetection == MOTION_DETECT_SECTOR) |
| 809 { | 769 { |
| 810 DefinePitchSectors(settingsGetPointer()->viewPitch,CUSTOMER_DEFINED_VIEWS); | 770 DefinePitchSectors(pSettings->viewPitch,CUSTOMER_DEFINED_VIEWS); |
| 811 MapCVToSector(); | 771 MapCVToSector(); |
| 812 } | 772 } |
| 813 } | 773 } |
| 814 else if (settingsGetPointer()->extraDisplay == EXTRADISPLAY_DECOGAME) | 774 else if (pSettings->extraDisplay == EXTRADISPLAY_DECOGAME) |
| 815 settingsGetPointer()->design = 4; | 775 pSettings->design = 4; |
| 816 set_globalState(StD); | 776 set_globalState(StD); |
| 817 } | 777 } |
| 818 else | 778 else |
| 819 { | 779 { |
| 820 tHome_change_field_button_pressed(); | 780 tHome_change_field_button_pressed(); |
| 822 } else if ((action == ACTION_BUTTON_ENTER) || (action == ACTION_PITCH_NEG) || (action == ACTION_PITCH_POS)) | 782 } else if ((action == ACTION_BUTTON_ENTER) || (action == ACTION_PITCH_NEG) || (action == ACTION_PITCH_POS)) |
| 823 { | 783 { |
| 824 | 784 |
| 825 if ((status.page == PageDive) && (status.line == 0)) | 785 if ((status.page == PageDive) && (status.line == 0)) |
| 826 { | 786 { |
| 787 if((action == ACTION_BUTTON_ENTER) && ((pSettings->MotionDetection == MOTION_DETECT_SECTOR) || (pSettings->MotionDetection == MOTION_DETECT_SCROLL))) | |
| 788 { | |
| 789 suspendMotionDetection(10); | |
| 790 } | |
| 827 tHome_change_customview_button_pressed(action); | 791 tHome_change_customview_button_pressed(action); |
| 828 } | 792 } |
| 829 else if (status.page == PageSurface) | 793 else if (status.page == PageSurface) |
| 830 tHome_change_customview_button_pressed(action); | 794 tHome_change_customview_button_pressed(action); |
| 831 else | 795 else |
