Mercurial > public > ostc4
annotate Discovery/Src/tMenuSystem.c @ 999:ac25c35a3c97 GasConsumption
New Tab for dynamic configuration:
since more and more functions are added to the OSTC the space in the menus is getting short. To avoid problems a new Tab within the SYS menu has been added which shall focus an functions / views which are configuration dependend. In future this menu may have dynamic content dependend on which views are active or which sensors are connected. The Cview for compass and Timer have been moved to the new tab in the first step
| author | Ideenmodellierer |
|---|---|
| date | Mon, 28 Apr 2025 19:47:41 +0200 |
| parents | 44599695df41 |
| children | 21142f4fa968 |
| rev | line source |
|---|---|
| 38 | 1 /////////////////////////////////////////////////////////////////////////////// |
| 2 /// -*- coding: UTF-8 -*- | |
| 3 /// | |
| 4 /// \file Discovery/Src/tMenuSystem.c | |
| 5 /// \brief Main Template file for Menu Page System settings | |
| 6 /// \author heinrichs weikamp gmbh | |
| 7 /// \date 05-Aug-2014 | |
| 8 /// | |
| 9 /// \details | |
| 10 /// | |
| 11 /// $Id$ | |
| 12 /////////////////////////////////////////////////////////////////////////////// | |
| 13 /// \par Copyright (c) 2014-2018 Heinrichs Weikamp gmbh | |
| 14 /// | |
| 15 /// This program is free software: you can redistribute it and/or modify | |
| 16 /// it under the terms of the GNU General Public License as published by | |
| 17 /// the Free Software Foundation, either version 3 of the License, or | |
| 18 /// (at your option) any later version. | |
| 19 /// | |
| 20 /// This program is distributed in the hope that it will be useful, | |
| 21 /// but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 22 /// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 23 /// GNU General Public License for more details. | |
| 24 /// | |
| 25 /// You should have received a copy of the GNU General Public License | |
| 26 /// along with this program. If not, see <http://www.gnu.org/licenses/>. | |
| 27 ////////////////////////////////////////////////////////////////////////////// | |
| 28 | |
| 29 /* Includes ------------------------------------------------------------------*/ | |
| 30 #include "tMenu.h" | |
| 31 #include "tMenuSystem.h" | |
| 32 #include "tHome.h" // for enum CUSTOMVIEWS and init_t7_compass() | |
| 851 | 33 #include "t7.h" |
| 38 | 34 |
| 379 | 35 static uint8_t customviewsSubpage = 0; |
| 36 | |
| 38 | 37 /* Private function prototypes -----------------------------------------------*/ |
| 38 char customview_TXT2BYTE_helper(uint8_t customViewId); | |
| 39 | |
| 379 | 40 void set_CustomsviewsSubpage(uint8_t page) |
| 41 { | |
| 42 customviewsSubpage = page; | |
| 43 } | |
| 44 | |
| 38 | 45 /* Exported functions --------------------------------------------------------*/ |
| 46 | |
| 47 uint32_t tMSystem_refresh(uint8_t line, char *text, uint16_t *tab, char *subtext) | |
| 48 { | |
| 49 SSettings *data; | |
| 379 | 50 int i; |
| 38 | 51 uint8_t textPointer; |
| 52 uint8_t RTEhigh, RTElow; | |
| 53 RTC_DateTypeDef Sdate; | |
| 54 RTC_TimeTypeDef Stime; | |
| 55 const SDiveState * pStateReal = stateRealGetPointer(); | |
| 56 | |
| 57 data = settingsGetPointer(); | |
| 58 textPointer = 0; | |
| 59 *tab = 300; | |
| 60 *subtext = 0; | |
| 944 | 61 char tmpString[15]; |
| 38 | 62 |
|
815
ce8f71217f45
Bugfix CustomView selection during dive mode:
Ideenmodellierer
parents:
805
diff
changeset
|
63 resetLineMask(StMSYS); |
|
ce8f71217f45
Bugfix CustomView selection during dive mode:
Ideenmodellierer
parents:
805
diff
changeset
|
64 |
| 38 | 65 // dive mode |
| 66 if(actual_menu_content != MENU_SURFACE) | |
| 67 { | |
| 68 uint8_t id; | |
| 69 | |
| 379 | 70 for(i=0; i<5;i++) /* fill maximum 5 items and leave last one for sub page selection */ |
| 38 | 71 { |
| 379 | 72 id = cv_changelist[customviewsSubpage * 5 + i]; |
| 73 if(id == CVIEW_END) /* last list item? */ | |
| 74 { | |
| 75 break; | |
| 76 } | |
| 77 else | |
| 78 { | |
| 79 text[textPointer++] = '\006' - CHECK_BIT_THOME(data->cv_configuration,id); | |
| 80 text[textPointer++] = ' '; | |
| 81 textPointer += snprintf(&text[textPointer], 60, | |
| 82 "%c%c\n\r", | |
| 83 TXT_2BYTE, customview_TXT2BYTE_helper(id)); | |
| 84 } | |
| 38 | 85 } |
| 86 | |
| 379 | 87 for(;i<5;i++) /* clear empty lines in case menu shows less than 5 entries */ |
| 88 { | |
| 89 text[textPointer++]='\n'; | |
| 90 text[textPointer++]='\r'; | |
| 91 text[textPointer] = 0; | |
|
815
ce8f71217f45
Bugfix CustomView selection during dive mode:
Ideenmodellierer
parents:
805
diff
changeset
|
92 switch(i) |
|
ce8f71217f45
Bugfix CustomView selection during dive mode:
Ideenmodellierer
parents:
805
diff
changeset
|
93 { |
|
ce8f71217f45
Bugfix CustomView selection during dive mode:
Ideenmodellierer
parents:
805
diff
changeset
|
94 case 0: disableLine(StMSYS_Custom0); |
|
ce8f71217f45
Bugfix CustomView selection during dive mode:
Ideenmodellierer
parents:
805
diff
changeset
|
95 break; |
|
ce8f71217f45
Bugfix CustomView selection during dive mode:
Ideenmodellierer
parents:
805
diff
changeset
|
96 case 1: disableLine(StMSYS_Custom1); |
|
ce8f71217f45
Bugfix CustomView selection during dive mode:
Ideenmodellierer
parents:
805
diff
changeset
|
97 break; |
|
ce8f71217f45
Bugfix CustomView selection during dive mode:
Ideenmodellierer
parents:
805
diff
changeset
|
98 case 2: disableLine(StMSYS_Custom2); |
|
ce8f71217f45
Bugfix CustomView selection during dive mode:
Ideenmodellierer
parents:
805
diff
changeset
|
99 break; |
|
ce8f71217f45
Bugfix CustomView selection during dive mode:
Ideenmodellierer
parents:
805
diff
changeset
|
100 case 3: disableLine(StMSYS_Custom3); |
|
ce8f71217f45
Bugfix CustomView selection during dive mode:
Ideenmodellierer
parents:
805
diff
changeset
|
101 break; |
|
ce8f71217f45
Bugfix CustomView selection during dive mode:
Ideenmodellierer
parents:
805
diff
changeset
|
102 case 4: disableLine(StMSYS_Custom4); |
|
ce8f71217f45
Bugfix CustomView selection during dive mode:
Ideenmodellierer
parents:
805
diff
changeset
|
103 break; |
|
ce8f71217f45
Bugfix CustomView selection during dive mode:
Ideenmodellierer
parents:
805
diff
changeset
|
104 default: |
|
ce8f71217f45
Bugfix CustomView selection during dive mode:
Ideenmodellierer
parents:
805
diff
changeset
|
105 case 5: disableLine(StMSYS_Custom5); |
|
ce8f71217f45
Bugfix CustomView selection during dive mode:
Ideenmodellierer
parents:
805
diff
changeset
|
106 break; |
|
ce8f71217f45
Bugfix CustomView selection during dive mode:
Ideenmodellierer
parents:
805
diff
changeset
|
107 } |
| 379 | 108 } |
| 109 | |
|
815
ce8f71217f45
Bugfix CustomView selection during dive mode:
Ideenmodellierer
parents:
805
diff
changeset
|
110 text[textPointer++] = TXT_2BYTE; |
|
ce8f71217f45
Bugfix CustomView selection during dive mode:
Ideenmodellierer
parents:
805
diff
changeset
|
111 text[textPointer++] = TXT2BYTE_ButtonNext; |
|
ce8f71217f45
Bugfix CustomView selection during dive mode:
Ideenmodellierer
parents:
805
diff
changeset
|
112 text[textPointer] = 0; |
|
ce8f71217f45
Bugfix CustomView selection during dive mode:
Ideenmodellierer
parents:
805
diff
changeset
|
113 |
| 38 | 114 return StMSYS; |
| 115 } | |
| 116 | |
| 117 // surface mode | |
|
139
decb0461302a
Get version from local memory instead from incoming data
Ideenmodellierer
parents:
138
diff
changeset
|
118 getActualRTEandFONTversion(&RTEhigh,&RTElow,NULL,NULL); |
| 38 | 119 |
| 120 if((RTEhigh == 0xFF) || (RTElow == 0xFF)) | |
| 121 { | |
| 122 RTEhigh = 0; | |
| 123 RTElow = 0; | |
| 124 } | |
| 125 | |
| 126 if((line == 0) || (line == 1)) | |
| 127 { | |
| 128 translateDate(pStateReal->lifeData.dateBinaryFormat, &Sdate); | |
| 129 translateTime(pStateReal->lifeData.timeBinaryFormat, &Stime); | |
| 130 | |
| 944 | 131 text[textPointer++] = TXT_Date; |
| 132 getStringOfFormat_DDMMYY(tmpString,15); | |
| 133 textPointer += snprintf(&text[textPointer], 40,"\016\016 %s ",tmpString); | |
| 134 convertStringOfDate_DDMMYY(tmpString,15,Sdate.Date, Sdate.Month, Sdate.Year); | |
| 135 textPointer += snprintf(&text[textPointer], 40,"\017\t%s ",tmpString); | |
| 38 | 136 |
| 137 textPointer += snprintf(&text[textPointer], 60, | |
| 138 "%02d:%02d:%02d" | |
| 139 "\n\r" | |
| 140 ,Stime.Hours, Stime.Minutes, Stime.Seconds | |
| 141 ); | |
| 142 } | |
| 143 else | |
| 144 { | |
| 145 strcpy(&text[textPointer],"\n\r"); | |
| 146 textPointer += 2; | |
| 147 } | |
| 148 | |
|
805
dd7ce655db26
Adds a simple countdown timer, available as a custom view in surface and dive mode.
heinrichsweikamp
parents:
536
diff
changeset
|
149 if((line == 0) || (line == 3)) |
| 38 | 150 { |
| 151 text[textPointer++] = TXT_Language; | |
| 152 text[textPointer++] = '\t'; | |
| 153 text[textPointer++] = TXT_LanguageName; | |
| 154 text[textPointer++] = '\n'; | |
| 155 text[textPointer++] = '\r'; | |
| 156 text[textPointer] = 0; | |
| 157 } | |
| 158 else | |
| 159 { | |
| 160 strcpy(&text[textPointer],"\n\r"); | |
| 161 textPointer += 2; | |
| 162 } | |
| 163 | |
|
805
dd7ce655db26
Adds a simple countdown timer, available as a custom view in surface and dive mode.
heinrichsweikamp
parents:
536
diff
changeset
|
164 if((line == 0) || (line == 4)) |
| 38 | 165 { |
| 166 text[textPointer++] = TXT_2BYTE; | |
| 167 text[textPointer++] = TXT2BYTE_Layout; | |
| 168 text[textPointer++] = '\t'; | |
| 169 | |
| 170 if(!data->showDebugInfo) | |
| 171 { | |
| 172 text[textPointer++] = TXT_2BYTE; | |
| 173 if(data->nonMetricalSystem == 0) | |
| 174 text[textPointer++] = TXT2BYTE_Units_metric; | |
| 175 else | |
| 176 text[textPointer++] = TXT2BYTE_Units_feet; | |
| 177 | |
| 178 if(data->tX_colorscheme != 0) | |
| 179 { | |
|
536
54c5ec8416c4
Changed visualization of Depth / temperatur / debugview entry
Ideenmodellierer
parents:
520
diff
changeset
|
180 text[textPointer++] = ' '; |
|
54c5ec8416c4
Changed visualization of Depth / temperatur / debugview entry
Ideenmodellierer
parents:
520
diff
changeset
|
181 text[textPointer++] = '/'; |
| 38 | 182 text[textPointer++] = '\027'; |
| 183 text[textPointer++] = ' '; | |
| 184 text[textPointer++] = '0' + data->tX_colorscheme; | |
| 185 text[textPointer++] = '\020'; | |
| 186 } | |
| 187 } | |
| 188 else | |
| 189 { | |
| 190 if(data->nonMetricalSystem == 0) | |
| 191 { | |
| 192 text[textPointer++] = 'm'; | |
|
536
54c5ec8416c4
Changed visualization of Depth / temperatur / debugview entry
Ideenmodellierer
parents:
520
diff
changeset
|
193 text[textPointer++] = ' '; |
| 38 | 194 text[textPointer++] = '/'; |
|
536
54c5ec8416c4
Changed visualization of Depth / temperatur / debugview entry
Ideenmodellierer
parents:
520
diff
changeset
|
195 text[textPointer++] = ' '; |
| 38 | 196 text[textPointer++] = 'C'; |
|
536
54c5ec8416c4
Changed visualization of Depth / temperatur / debugview entry
Ideenmodellierer
parents:
520
diff
changeset
|
197 text[textPointer++] = ' '; |
| 38 | 198 } |
| 199 else | |
| 200 { | |
| 201 text[textPointer++] = 'f'; | |
| 202 text[textPointer++] = 't'; | |
| 203 text[textPointer++] = ' '; | |
| 204 text[textPointer++] = '/'; | |
| 205 text[textPointer++] = ' '; | |
|
536
54c5ec8416c4
Changed visualization of Depth / temperatur / debugview entry
Ideenmodellierer
parents:
520
diff
changeset
|
206 text[textPointer++] = 'F'; |
| 38 | 207 text[textPointer++] = ' '; |
|
536
54c5ec8416c4
Changed visualization of Depth / temperatur / debugview entry
Ideenmodellierer
parents:
520
diff
changeset
|
208 } |
|
54c5ec8416c4
Changed visualization of Depth / temperatur / debugview entry
Ideenmodellierer
parents:
520
diff
changeset
|
209 if(data->tX_colorscheme != 0) |
|
54c5ec8416c4
Changed visualization of Depth / temperatur / debugview entry
Ideenmodellierer
parents:
520
diff
changeset
|
210 { |
|
54c5ec8416c4
Changed visualization of Depth / temperatur / debugview entry
Ideenmodellierer
parents:
520
diff
changeset
|
211 text[textPointer++] = '/'; |
|
54c5ec8416c4
Changed visualization of Depth / temperatur / debugview entry
Ideenmodellierer
parents:
520
diff
changeset
|
212 text[textPointer++] = '\027'; |
|
54c5ec8416c4
Changed visualization of Depth / temperatur / debugview entry
Ideenmodellierer
parents:
520
diff
changeset
|
213 text[textPointer++] = ' '; |
|
54c5ec8416c4
Changed visualization of Depth / temperatur / debugview entry
Ideenmodellierer
parents:
520
diff
changeset
|
214 text[textPointer++] = '0' + data->tX_colorscheme; |
|
54c5ec8416c4
Changed visualization of Depth / temperatur / debugview entry
Ideenmodellierer
parents:
520
diff
changeset
|
215 text[textPointer++] = ' '; |
|
54c5ec8416c4
Changed visualization of Depth / temperatur / debugview entry
Ideenmodellierer
parents:
520
diff
changeset
|
216 text[textPointer++] = '\020'; |
|
54c5ec8416c4
Changed visualization of Depth / temperatur / debugview entry
Ideenmodellierer
parents:
520
diff
changeset
|
217 } |
|
54c5ec8416c4
Changed visualization of Depth / temperatur / debugview entry
Ideenmodellierer
parents:
520
diff
changeset
|
218 text[textPointer++] = '/'; |
| 38 | 219 text[textPointer++] = ' '; |
| 220 text[textPointer++] = 'd'; | |
| 221 text[textPointer++] = 'e'; | |
| 222 text[textPointer++] = 'b'; | |
| 223 text[textPointer++] = 'u'; | |
| 224 text[textPointer++] = 'g'; | |
| 225 } | |
| 226 | |
| 227 text[textPointer++] = '\n'; | |
| 228 text[textPointer++] = '\r'; | |
| 229 text[textPointer] = 0; | |
| 230 } | |
| 231 else | |
| 232 { | |
| 233 strcpy(&text[textPointer],"\n\r"); | |
| 234 textPointer += 2; | |
| 235 } | |
| 236 | |
|
805
dd7ce655db26
Adds a simple countdown timer, available as a custom view in surface and dive mode.
heinrichsweikamp
parents:
536
diff
changeset
|
237 if((line == 0) || (line == 5)) |
| 38 | 238 { |
| 239 text[textPointer++] = TXT_Information; | |
| 240 text[textPointer++] = '\t'; | |
| 241 textPointer += snprintf(&text[textPointer],29,"RTE %u.%u OS %i.%i.%i" | |
| 242 ,RTEhigh | |
| 243 ,RTElow | |
| 244 ,firmwareDataGetPointer()->versionFirst | |
| 245 ,firmwareDataGetPointer()->versionSecond | |
| 246 ,firmwareDataGetPointer()->versionThird | |
| 247 ); | |
| 248 } | |
| 249 strcpy(&text[textPointer],"\n\r"); | |
| 250 textPointer += 2; | |
| 251 | |
|
805
dd7ce655db26
Adds a simple countdown timer, available as a custom view in surface and dive mode.
heinrichsweikamp
parents:
536
diff
changeset
|
252 if((line == 0) || (line == 6)) |
| 38 | 253 { |
| 254 text[textPointer++] = TXT_2BYTE; | |
| 255 text[textPointer++] = TXT2BYTE_ResetMenu; | |
| 256 text[textPointer] = 0; | |
| 257 } | |
| 258 strcpy(&text[textPointer],"\n\r"); | |
| 259 textPointer += 2; | |
| 260 | |
| 261 return StMSYS; | |
| 262 } | |
| 851 | 263 void tMSystem_checkLineStatus(void) |
| 264 { | |
| 265 uint8_t localLineMask = 0; | |
| 266 uint8_t lineMask = getLineMask(StMSYS); | |
| 38 | 267 |
| 851 | 268 if(t7_customview_disabled(CVIEW_Timer)) |
| 269 { | |
| 270 localLineMask |= 1 << 2; | |
| 271 } | |
| 272 if(lineMask != localLineMask) | |
| 273 { | |
| 274 updateMenu(); | |
| 275 } | |
| 276 } | |
| 38 | 277 |
| 278 /* Private functions ---------------------------------------------------------*/ |
