Mercurial > public > ostc4
comparison Discovery/Src/base.c @ 221:486dddfba7ce
Merged in Ideenmodellierer/ostc4/Improve_IPC_Sync (pull request #12)
Improve IPC Sync
author | heinrichsweikamp <bitbucket@heinrichsweikamp.com> |
---|---|
date | Mon, 01 Apr 2019 09:01:09 +0000 |
parents | ce05c801b002 |
children | 5f535ef6a3db |
comparison
equal
deleted
inserted
replaced
216:7012a521fa95 | 221:486dddfba7ce |
---|---|
290 uint8_t returnFromCommCleanUpRequest = 0; ///< use this to exit bluetooth mode and call tComm_exit() | 290 uint8_t returnFromCommCleanUpRequest = 0; ///< use this to exit bluetooth mode and call tComm_exit() |
291 uint32_t base_tempLightLevel = 0; | 291 uint32_t base_tempLightLevel = 0; |
292 uint8_t updateButtonsToDefault = 0; | 292 uint8_t updateButtonsToDefault = 0; |
293 uint8_t wasFirmwareUpdateCheckBattery = 0; | 293 uint8_t wasFirmwareUpdateCheckBattery = 0; |
294 | 294 |
295 static DoDisplayRefresh = 0; /* trigger to refresh display data */ | |
296 | |
295 /* Private function prototypes -----------------------------------------------*/ | 297 /* Private function prototypes -----------------------------------------------*/ |
296 static void SystemClock_Config(void); | 298 static void SystemClock_Config(void); |
297 static void Error_Handler(void); | 299 static void Error_Handler(void); |
298 static void SDRAM_Initialization_Sequence(SDRAM_HandleTypeDef *hsdram, FMC_SDRAM_CommandTypeDef *Command); | 300 static void SDRAM_Initialization_Sequence(SDRAM_HandleTypeDef *hsdram, FMC_SDRAM_CommandTypeDef *Command); |
299 static void SDRAM_Config(void); | 301 static void SDRAM_Config(void); |
302 static void TIM_BACKLIGHT_init(void); | 304 static void TIM_BACKLIGHT_init(void); |
303 static uint32_t TIM_BACKLIGHT_adjust(void); | 305 static uint32_t TIM_BACKLIGHT_adjust(void); |
304 static void gotoSleep(void); | 306 static void gotoSleep(void); |
305 static void deco_loop(void); | 307 static void deco_loop(void); |
306 static void resetToFirmwareUpdate(void); | 308 static void resetToFirmwareUpdate(void); |
307 void EvaluateButton(void); | 309 static void TriggerButtonAction(void); |
310 static void EvaluateButton(void); | |
311 static void RefreshDisplay(void); | |
308 | 312 |
309 /* ITM Trace-------- ---------------------------------------------------------*/ | 313 /* ITM Trace-------- ---------------------------------------------------------*/ |
310 /* | 314 /* |
311 #define ITM_Port8(n) (*((volatile unsigned char *)(0xE0000000+4*n))) | 315 #define ITM_Port8(n) (*((volatile unsigned char *)(0xE0000000+4*n))) |
312 #define ITM_Port16(n) (*((volatile unsigned short*)(0xE0000000+4*n))) | 316 #define ITM_Port16(n) (*((volatile unsigned short*)(0xE0000000+4*n))) |
493 createDiveSettings(); | 497 createDiveSettings(); |
494 updateMenu(); | 498 updateMenu(); |
495 ext_flash_write_settings(); | 499 ext_flash_write_settings(); |
496 } | 500 } |
497 deco_loop(); | 501 deco_loop(); |
502 TriggerButtonAction(); | |
503 if(DoDisplayRefresh) | |
504 { | |
505 DoDisplayRefresh = 0; | |
506 RefreshDisplay(); | |
507 } | |
498 | 508 |
499 #ifdef DEBUG_RUNTIME | 509 #ifdef DEBUG_RUNTIME |
500 translateTime(stateUsed->lifeData.timeBinaryFormat, &Stime); | 510 translateTime(stateUsed->lifeData.timeBinaryFormat, &Stime); |
501 if(lastsecond == 0xFF) | 511 if(lastsecond == 0xFF) |
502 { | 512 { |
754 } | 764 } |
755 } | 765 } |
756 | 766 |
757 get_globalStateList(&status); | 767 get_globalStateList(&status); |
758 | 768 |
759 switch(status.base) | 769 if(status.base == BaseComm) /* main loop not serviced in com mode */ |
760 { | 770 { |
761 case BaseHome: | 771 tComm_refresh(); |
762 tHome_refresh(); | 772 } |
763 tM_check_content(); | 773 else |
764 break; | 774 { |
765 case BaseMenu: | 775 DoDisplayRefresh = 1; |
766 tM_refresh_live_content(); | |
767 tMenuEdit_refresh_live_content(); | |
768 break; | |
769 case BaseInfo: | |
770 tInfo_refresh(); ///< only compass at the moment 23.Feb.2015 hw | |
771 break; | |
772 case BaseComm: | |
773 tComm_refresh(); | |
774 break; | |
775 default: | |
776 if(get_globalState() == StStop) | |
777 tHome_sleepmode_fun(); | |
778 break; | |
779 } | 776 } |
780 } | 777 } |
781 | 778 |
782 | 779 |
783 /* button and VSYNC IRQ | 780 /* button and VSYNC IRQ |
828 GPIO_Pin &= 0x7F; | 825 GPIO_Pin &= 0x7F; |
829 } | 826 } |
830 #endif | 827 #endif |
831 } | 828 } |
832 | 829 |
833 void EvaluateButton() | 830 static void RefreshDisplay() |
834 { | 831 { |
835 uint8_t action = 0; | |
836 SStateList status; | 832 SStateList status; |
837 SSettings* pSettings; | 833 get_globalStateList(&status); |
838 pSettings = settingsGetPointer(); | 834 switch(status.base) |
839 | |
840 if (GFX_logoStatus() != 0) | |
841 return; | |
842 | |
843 if ((LastButtonPressed != INVALID_BUTTON) && (time_elapsed_ms(LastButtonPressedTick, HAL_GetTick())) > 50) | |
844 { | 835 { |
845 if (LastButtonPressed == BUTTON_BACK_PIN) { // links | 836 case BaseHome: |
846 if (HAL_GPIO_ReadPin(BUTTON_BACK_GPIO_PORT, BUTTON_BACK_PIN) == 1) { | 837 tHome_refresh(); |
847 action = ACTION_BUTTON_BACK; | 838 tM_check_content(); |
848 } | 839 break; |
849 } | 840 case BaseMenu: |
850 | 841 tM_refresh_live_content(); |
851 else if (LastButtonPressed == BUTTON_ENTER_PIN) { // mitte | 842 tMenuEdit_refresh_live_content(); |
852 if (HAL_GPIO_ReadPin(BUTTON_ENTER_GPIO_PORT, BUTTON_ENTER_PIN) == 1) { | 843 break; |
853 action = ACTION_BUTTON_ENTER; | 844 case BaseInfo: |
854 } | 845 tInfo_refresh(); ///< only compass at the moment 23.Feb.2015 hw |
855 } | 846 break; |
856 | 847 case BaseComm: /* refresh already done in tim callback */ |
857 else if (LastButtonPressed == BUTTON_NEXT_PIN) { // rechts | 848 break; |
858 if (HAL_GPIO_ReadPin(BUTTON_NEXT_GPIO_PORT, BUTTON_NEXT_PIN) == 1) { | 849 default: |
859 action = ACTION_BUTTON_NEXT; | 850 if(get_globalState() == StStop) |
860 } | 851 tHome_sleepmode_fun(); |
861 } | 852 break; |
862 | 853 } |
863 if(action != 0) | 854 } |
864 { | 855 static uint8_t ButtonAction = ACTION_END; |
865 time_without_button_pressed_deciseconds = 0; | 856 |
866 if(pSettings->FlipDisplay) /* switch action resulting from pressed button */ | 857 static void StoreButtonAction(uint8_t action) |
867 { | 858 { |
868 if (action == ACTION_BUTTON_BACK) | 859 ButtonAction = action; |
869 { | 860 } |
870 action = ACTION_BUTTON_NEXT; | 861 |
871 } | 862 static void TriggerButtonAction() |
872 else | 863 { |
873 { | 864 uint8_t action = ButtonAction; |
874 if (action == ACTION_BUTTON_NEXT) | 865 SStateList status; |
875 { | 866 |
876 action = ACTION_BUTTON_BACK; | 867 if(ButtonAction != ACTION_END) |
877 } | 868 { |
878 } | |
879 } | |
880 } | |
881 | |
882 #ifdef BUTTON_CUSTOM_PIN | |
883 else | |
884 if(LastButtonPressed == BUTTON_CUSTOM_PIN) // extra | |
885 action = ACTION_BUTTON_CUSTOM; | |
886 #endif | |
887 | |
888 #ifdef DEMOMODE // user pressed button ? | |
889 if((!demoMachineCall) && demoModeActive()) | |
890 { | |
891 demoSendCommand(action); | |
892 return; | |
893 } | |
894 #endif | |
895 | |
896 get_globalStateList(&status); | 869 get_globalStateList(&status); |
897 | 870 |
898 if (action == ACTION_BUTTON_CUSTOM) { | 871 if (action == ACTION_BUTTON_CUSTOM) { |
899 GFX_screenshot(); | 872 GFX_screenshot(); |
900 } | 873 } |
902 switch (status.base) { | 875 switch (status.base) { |
903 case BaseStop: | 876 case BaseStop: |
904 if (action == ACTION_BUTTON_BACK) | 877 if (action == ACTION_BUTTON_BACK) |
905 resetToFirmwareUpdate(); | 878 resetToFirmwareUpdate(); |
906 break; | 879 break; |
907 case BaseComm: | 880 case BaseComm: /* already handled in tim callback */ |
908 if (action == ACTION_BUTTON_BACK) { | |
909 settingsGetPointer()->bluetoothActive = 0; | |
910 MX_Bluetooth_PowerOff(); | |
911 tComm_exit(); | |
912 } | |
913 break; | 881 break; |
914 case BaseHome: | 882 case BaseHome: |
915 if (action == ACTION_BUTTON_NEXT) { | 883 if (action == ACTION_BUTTON_NEXT) { |
916 if (status.page == PageSurface) | 884 if (status.page == PageSurface) |
917 openMenu(1); | 885 openMenu(1); |
959 sendActionToInfo(action); | 927 sendActionToInfo(action); |
960 break; | 928 break; |
961 | 929 |
962 default: | 930 default: |
963 break; | 931 break; |
932 } | |
933 ButtonAction = ACTION_END; | |
934 } | |
935 } | |
936 | |
937 | |
938 void EvaluateButton() | |
939 { | |
940 uint8_t action = 0; | |
941 SStateList status; | |
942 SSettings* pSettings; | |
943 pSettings = settingsGetPointer(); | |
944 | |
945 if (GFX_logoStatus() != 0) | |
946 return; | |
947 | |
948 if ((LastButtonPressed != INVALID_BUTTON) && (time_elapsed_ms(LastButtonPressedTick, HAL_GetTick())) > 50) | |
949 { | |
950 if (LastButtonPressed == BUTTON_BACK_PIN) { // links | |
951 if (HAL_GPIO_ReadPin(BUTTON_BACK_GPIO_PORT, BUTTON_BACK_PIN) == 1) { | |
952 action = ACTION_BUTTON_BACK; | |
953 } | |
954 } | |
955 | |
956 else if (LastButtonPressed == BUTTON_ENTER_PIN) { // mitte | |
957 if (HAL_GPIO_ReadPin(BUTTON_ENTER_GPIO_PORT, BUTTON_ENTER_PIN) == 1) { | |
958 action = ACTION_BUTTON_ENTER; | |
959 } | |
960 } | |
961 | |
962 else if (LastButtonPressed == BUTTON_NEXT_PIN) { // rechts | |
963 if (HAL_GPIO_ReadPin(BUTTON_NEXT_GPIO_PORT, BUTTON_NEXT_PIN) == 1) { | |
964 action = ACTION_BUTTON_NEXT; | |
965 } | |
966 } | |
967 | |
968 if(action != 0) | |
969 { | |
970 time_without_button_pressed_deciseconds = 0; | |
971 if(pSettings->FlipDisplay) /* switch action resulting from pressed button */ | |
972 { | |
973 if (action == ACTION_BUTTON_BACK) | |
974 { | |
975 action = ACTION_BUTTON_NEXT; | |
976 } | |
977 else | |
978 { | |
979 if (action == ACTION_BUTTON_NEXT) | |
980 { | |
981 action = ACTION_BUTTON_BACK; | |
982 } | |
983 } | |
984 } | |
985 } | |
986 | |
987 #ifdef BUTTON_CUSTOM_PIN | |
988 else | |
989 if(LastButtonPressed == BUTTON_CUSTOM_PIN) // extra | |
990 action = ACTION_BUTTON_CUSTOM; | |
991 #endif | |
992 | |
993 #ifdef DEMOMODE // user pressed button ? | |
994 if((!demoMachineCall) && demoModeActive()) | |
995 { | |
996 demoSendCommand(action); | |
997 return; | |
998 } | |
999 #endif | |
1000 | |
1001 get_globalStateList(&status); | |
1002 if(status.base == BaseComm) /* main loop is not serviced in comm mode => react immediately */ | |
1003 { | |
1004 if (action == ACTION_BUTTON_BACK) { | |
1005 settingsGetPointer()->bluetoothActive = 0; | |
1006 MX_Bluetooth_PowerOff(); | |
1007 tComm_exit(); | |
1008 } | |
1009 } | |
1010 else | |
1011 { | |
1012 StoreButtonAction(action); /* Handle action in main loop */ | |
964 } | 1013 } |
965 LastButtonPressed = INVALID_BUTTON; | 1014 LastButtonPressed = INVALID_BUTTON; |
966 } | 1015 } |
967 } | 1016 } |
968 | 1017 |