comparison Discovery/Src/t7.c @ 807:9e2ebfc72e8c

Zusammenf?hren
author heinrichsweikamp
date Sat, 26 Aug 2023 13:37:06 +0200
parents dd7ce655db26
children 24b39a432bc2
comparison
equal deleted inserted replaced
806:ee3c0029ed34 807:9e2ebfc72e8c
26 /// along with this program. If not, see <http://www.gnu.org/licenses/>. 26 /// along with this program. If not, see <http://www.gnu.org/licenses/>.
27 ////////////////////////////////////////////////////////////////////////////// 27 //////////////////////////////////////////////////////////////////////////////
28 28
29 /* Includes ------------------------------------------------------------------*/ 29 /* Includes ------------------------------------------------------------------*/
30 #include <stdlib.h> 30 #include <stdlib.h>
31 #include <stdbool.h>
32 31
33 #include "t7.h" 32 #include "t7.h"
34 #include "t3.h" 33 #include "t3.h"
35 #include "settings.h" 34 #include "settings.h"
36 #include "data_exchange_main.h" 35 #include "data_exchange_main.h"
46 #include "motion.h" 45 #include "motion.h"
47 #include "configuration.h" 46 #include "configuration.h"
48 #include "base.h" 47 #include "base.h"
49 #include "tMenuEditSetpoint.h" 48 #include "tMenuEditSetpoint.h"
50 49
50 #define TIMER_ACTION_DELAY_S 10
51
51 /* Private function prototypes -----------------------------------------------*/ 52 /* Private function prototypes -----------------------------------------------*/
52 53
53 void t7_refresh_surface(void); 54 void t7_refresh_surface(void);
54 void t7_refresh_surface_debugmode(void); 55 void t7_refresh_surface_debugmode(void);
55 void t7_refresh_divemode(void); 56 void t7_refresh_divemode(void);
128 CVIEW_Profile, 129 CVIEW_Profile,
129 CVIEW_Gaslist, 130 CVIEW_Gaslist,
130 CVIEW_sensors_mV, 131 CVIEW_sensors_mV,
131 CVIEW_EADTime, 132 CVIEW_EADTime,
132 CVIEW_SummaryOfLeftCorner, 133 CVIEW_SummaryOfLeftCorner,
134 CVIEW_Timer,
133 CVIEW_noneOrDebug, 135 CVIEW_noneOrDebug,
134 CVIEW_END, 136 CVIEW_END,
135 CVIEW_END 137 CVIEW_END
136 }; 138 };
137 139
144 CVIEW_Tissues, 146 CVIEW_Tissues,
145 CVIEW_Gaslist, 147 CVIEW_Gaslist,
146 CVIEW_sensors_mV, 148 CVIEW_sensors_mV,
147 CVIEW_Charger, 149 CVIEW_Charger,
148 CVIEW_CcrSummary, 150 CVIEW_CcrSummary,
151 CVIEW_Timer,
149 CVIEW_END 152 CVIEW_END
150 }; 153 };
151 154
152 155
153 static uint8_t selection_custom_field = LLC_Temperature; 156 static uint8_t selection_custom_field = LLC_Temperature;
994 text[3] = '\016'; 997 text[3] = '\016';
995 text[4] = TXT_2BYTE; 998 text[4] = TXT_2BYTE;
996 text[5] = TXT2BYTE_TimeSinceLastDive; 999 text[5] = TXT2BYTE_TimeSinceLastDive;
997 text[6] = 0; 1000 text[6] = 0;
998 GFX_write_string(&FontT48,&t7surfaceR,text,1); 1001 GFX_write_string(&FontT48,&t7surfaceR,text,1);
1002 }
1003
1004 if (stateUsed->timerState == TIMER_STATE_RUNNING && selection_customview != CVIEW_Timer) {
1005 int timerRemainingS = pSettings->timerDurationS - (current_second() - stateUsed->timerStartedS);
1006 snprintf(text, 20, "\001%u:%02u", timerRemainingS / 60, timerRemainingS % 60);
1007 GFX_write_string(&FontT54, &t7surfaceR, text, 8);
999 } 1008 }
1000 1009
1001 /* beta version */ 1010 /* beta version */
1002 if( firmwareDataGetPointer()->versionBeta ) 1011 if( firmwareDataGetPointer()->versionBeta )
1003 { 1012 {
1971 1980
1972 GFX_write_string(&FontT42, &t7cY0free, data, 1); 1981 GFX_write_string(&FontT42, &t7cY0free, data, 1);
1973 } 1982 }
1974 1983
1975 1984
1985 static void setTimerPrestart(int startTimeS)
1986 {
1987 stateUsedWrite->timerState = TIMER_STATE_PRESTART;
1988 stateUsedWrite->timerStartedS = startTimeS;
1989 }
1990
1991
1992 static void setTimerFinished(int startTimeS)
1993 {
1994 stateUsedWrite->timerState = TIMER_STATE_FINISHED;
1995 stateUsedWrite->timerStartedS = startTimeS;
1996 }
1997
1998
1999 static void updateTimer(SSettings *settings, int nowS, bool switchedToTimerView)
2000 {
2001 int timerElapsedS = nowS - stateUsed->timerStartedS;
2002
2003 if (stateUsed->timerState && timerElapsedS < 0) {
2004 disableTimer();
2005 } else {
2006 switch (stateUsed->timerState) {
2007 case TIMER_STATE_OFF:
2008 if (switchedToTimerView) {
2009 setTimerPrestart(nowS);
2010 }
2011
2012 break;
2013 case TIMER_STATE_PRESTART:
2014 if (timerElapsedS <= TIMER_ACTION_DELAY_S) {
2015 if (switchedToTimerView) {
2016 setTimerPrestart(nowS);
2017 }
2018 } else {
2019 if (selection_customview == CVIEW_Timer) {
2020 stateUsedWrite->timerState = TIMER_STATE_RUNNING;
2021 stateUsedWrite->timerStartedS = stateUsed->timerStartedS + TIMER_ACTION_DELAY_S;
2022 } else {
2023 disableTimer();
2024 }
2025 }
2026
2027 break;
2028 case TIMER_STATE_RUNNING:
2029 if (timerElapsedS >= settings->timerDurationS) {
2030 if (selection_customview == CVIEW_Timer) {
2031 setTimerFinished(stateUsed->timerStartedS + settings->timerDurationS);
2032 } else {
2033 stateUsedWrite->timerState = TIMER_STATE_WAIT_FINISHED;
2034 }
2035 }
2036
2037 break;
2038 case TIMER_STATE_WAIT_FINISHED:
2039 if (switchedToTimerView) {
2040 setTimerFinished(nowS);
2041 }
2042
2043 break;
2044 case TIMER_STATE_FINISHED:
2045 if (timerElapsedS <= TIMER_ACTION_DELAY_S) {
2046 if (switchedToTimerView) {
2047 setTimerPrestart(stateUsed->timerStartedS);
2048 }
2049 } else {
2050 disableTimer();
2051 }
2052
2053 break;
2054 }
2055 }
2056 }
2057
2058
2059 bool t7_isTimerRunning(bool includeBackground)
2060 {
2061 return stateUsed->timerState && (selection_customview == CVIEW_Timer || (includeBackground && stateUsed->timerState == TIMER_STATE_RUNNING));
2062 }
2063
2064
2065 static void showTimer(SSettings *settings, int nowS)
2066 {
2067 char heading[32];
2068 unsigned headingIndex = 0;
2069
2070 char data[32];
2071 unsigned dataIndex = 0;
2072
2073 heading[headingIndex++] = '\032';
2074 heading[headingIndex++] = '\016';
2075 heading[headingIndex++] = '\016';
2076
2077 data[dataIndex++] = '\t';
2078
2079 int timerRemainingS = settings->timerDurationS;
2080 switch (stateUsed->timerState) {
2081 case TIMER_STATE_RUNNING:
2082 timerRemainingS = settings->timerDurationS - (nowS - stateUsed->timerStartedS);
2083
2084 break;
2085 case TIMER_STATE_PRESTART:
2086 case TIMER_STATE_FINISHED:
2087 if (stateUsed->timerState == TIMER_STATE_PRESTART) {
2088 heading[headingIndex++] = TXT_2BYTE;
2089 heading[headingIndex++] = TXT2BYTE_Starting;
2090 } else {
2091 heading[headingIndex++] = TXT_2BYTE;
2092 heading[headingIndex++] = TXT2BYTE_Finished;
2093
2094 timerRemainingS = 0;
2095 }
2096
2097 dataIndex += snprintf(&data[dataIndex], 10, "\020%u", TIMER_ACTION_DELAY_S - (nowS - stateUsed->timerStartedS));
2098
2099 break;
2100 default:
2101
2102 break;
2103 }
2104
2105 char timer[16];
2106 snprintf(timer, 10, "\001\020%u:%02u", timerRemainingS / 60, timerRemainingS % 60);
2107
2108 heading[headingIndex++] = 0;
2109
2110 data[dataIndex++] = 0;
2111
2112 t7cY0free.WindowLineSpacing = 48;
2113 t7cY0free.WindowNumberOfTextLines = 6;
2114 t7cY0free.WindowTab = 375;
2115
2116 t7cY0free.WindowY0 = t7cC.WindowY0 - 10;
2117 if (!settings->FlipDisplay) {
2118 t7cY0free.WindowX0 += 10;
2119 t7cY0free.WindowY0 += 10;
2120 t7cY0free.WindowY1 = 355;
2121 GFX_write_string(&FontT24, &t7cY0free, heading, 1);
2122 t7cY0free.WindowX0 -= 10;
2123 t7cY0free.WindowY0 -= 10;
2124 } else {
2125 t7cY0free.WindowY1 -= 10;
2126 t7cY0free.WindowX1 -= 10;
2127 GFX_write_string(&FontT24, &t7cY0free, heading, 1);
2128 t7cY0free.WindowY1 += 10;
2129 t7cY0free.WindowX1 += 10;
2130 }
2131
2132 t7_colorscheme_mod(data);
2133
2134 GFX_write_string(&FontT42, &t7cY0free, data, 1);
2135
2136 t7_colorscheme_mod(timer);
2137
2138 GFX_write_string(&FontT105, &t7cY0free, timer, 4);
2139 }
2140
2141
1976 void t7_refresh_customview(void) 2142 void t7_refresh_customview(void)
1977 { 2143 {
1978 static uint8_t last_customview = CVIEW_END; 2144 static uint8_t last_customview = CVIEW_END;
1979 2145
1980 char text[256]; 2146 char text[256];
2013 { 2179 {
2014 if(t7_customview_disabled(selection_customview)) 2180 if(t7_customview_disabled(selection_customview))
2015 { 2181 {
2016 t7_change_customview(ACTION_BUTTON_ENTER); 2182 t7_change_customview(ACTION_BUTTON_ENTER);
2017 } 2183 }
2018 last_customview = selection_customview;
2019 } 2184 }
2020 switch(selection_customview) 2185 switch(selection_customview)
2021 { 2186 {
2022 case CVIEW_noneOrDebug: 2187 case CVIEW_noneOrDebug:
2023 if(settingsGetPointer()->showDebugInfo) 2188 if(settingsGetPointer()->showDebugInfo)
2511 GFX_write_string(&FontT42, &t7cH, text, 0); 2676 GFX_write_string(&FontT42, &t7cH, text, 0);
2512 2677
2513 t7_CcrSummary(pSettings); 2678 t7_CcrSummary(pSettings);
2514 2679
2515 break; 2680 break;
2516 } 2681 case CVIEW_Timer:
2682 snprintf(text, 100, "\032\f\001%c%c", TXT_2BYTE, TXT2BYTE_Timer);
2683 GFX_write_string(&FontT42, &t7cH, text, 0);
2684
2685 int nowS = current_second();
2686
2687 updateTimer(pSettings, nowS, last_customview != CVIEW_Timer);
2688
2689 showTimer(pSettings, nowS);
2690
2691 break;
2692 }
2693
2694 last_customview = selection_customview;
2517 } 2695 }
2518
2519 2696
2520 2697
2521 /* DIVE MODE 2698 /* DIVE MODE
2522 */ 2699 */
2523 void t7_refresh_divemode(void) 2700 void t7_refresh_divemode(void)
4481 GFX_graph_print(&t7screen, &wintemp, 1,1,0, 10, getChargeLog(), 60, CLUT_Font031, NULL); 4658 GFX_graph_print(&t7screen, &wintemp, 1,1,0, 10, getChargeLog(), 60, CLUT_Font031, NULL);
4482 } 4659 }
4483 4660
4484 } 4661 }
4485 4662
4663
4486 bool t7_isCompassShowing(void) 4664 bool t7_isCompassShowing(void)
4487 { 4665 {
4488 return selection_customview == CVIEW_Compass || selection_custom_field == LLC_Compass; 4666 return selection_customview == CVIEW_Compass || selection_custom_field == LLC_Compass;
4489 } 4667 }
4668
4669
4670 void t7_tick(void)
4671 {
4672 SSettings *settings = settingsGetPointer();
4673
4674 int nowS = current_second();
4675 updateTimer(settings, nowS, false);
4676 }