Mercurial > public > ostc4
annotate Discovery/Src/tMenuSystem.c @ 1028:3d9552e4997c GasConsumption
Code improvment: line <=> menu id function:
In generell the structure of the menus is defined by the tStructure.h using global state defines. In some implementation hardcoded line numbers are used. Risk: In case the order of menu items change the update of other code sections could be forgotten (in the case the update of the top menu) causing unintended behavior. To avoid this the hard coded lines have been replaced by a function connecting the intended function to the menu item defined in the tstructure.h.
| author | Ideenmodellierer |
|---|---|
| date | Sun, 07 Sep 2025 19:08:43 +0200 |
| parents | 158100a84ebd |
| children | 2af07aa38531 |
| 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 | |
| 1027 | 149 if((line == 0) || (line == 2)) |
| 150 { | |
| 151 textPointer += snprintf(&text[textPointer], 40,"%c%c:\t%s\n\r",TXT_2BYTE,TXT2BYTE_Profile,data->profileName[data->activeProfile]); | |
| 152 } | |
| 153 else | |
| 154 { | |
| 155 strcpy(&text[textPointer],"\n\r"); | |
| 156 textPointer += 2; | |
| 157 } | |
|
805
dd7ce655db26
Adds a simple countdown timer, available as a custom view in surface and dive mode.
heinrichsweikamp
parents:
536
diff
changeset
|
158 if((line == 0) || (line == 3)) |
| 38 | 159 { |
| 160 text[textPointer++] = TXT_Language; | |
| 161 text[textPointer++] = '\t'; | |
| 162 text[textPointer++] = TXT_LanguageName; | |
| 163 text[textPointer++] = '\n'; | |
| 164 text[textPointer++] = '\r'; | |
| 165 text[textPointer] = 0; | |
| 166 } | |
| 167 else | |
| 168 { | |
| 169 strcpy(&text[textPointer],"\n\r"); | |
| 170 textPointer += 2; | |
| 171 } | |
| 172 | |
|
805
dd7ce655db26
Adds a simple countdown timer, available as a custom view in surface and dive mode.
heinrichsweikamp
parents:
536
diff
changeset
|
173 if((line == 0) || (line == 4)) |
| 38 | 174 { |
| 175 text[textPointer++] = TXT_2BYTE; | |
| 176 text[textPointer++] = TXT2BYTE_Layout; | |
| 177 text[textPointer++] = '\t'; | |
| 178 | |
| 179 if(!data->showDebugInfo) | |
| 180 { | |
| 181 text[textPointer++] = TXT_2BYTE; | |
| 182 if(data->nonMetricalSystem == 0) | |
| 183 text[textPointer++] = TXT2BYTE_Units_metric; | |
| 184 else | |
| 185 text[textPointer++] = TXT2BYTE_Units_feet; | |
| 186 | |
| 187 if(data->tX_colorscheme != 0) | |
| 188 { | |
|
536
54c5ec8416c4
Changed visualization of Depth / temperatur / debugview entry
Ideenmodellierer
parents:
520
diff
changeset
|
189 text[textPointer++] = ' '; |
|
54c5ec8416c4
Changed visualization of Depth / temperatur / debugview entry
Ideenmodellierer
parents:
520
diff
changeset
|
190 text[textPointer++] = '/'; |
| 38 | 191 text[textPointer++] = '\027'; |
| 192 text[textPointer++] = ' '; | |
| 193 text[textPointer++] = '0' + data->tX_colorscheme; | |
| 194 text[textPointer++] = '\020'; | |
| 195 } | |
| 196 } | |
| 197 else | |
| 198 { | |
| 199 if(data->nonMetricalSystem == 0) | |
| 200 { | |
| 201 text[textPointer++] = 'm'; | |
|
536
54c5ec8416c4
Changed visualization of Depth / temperatur / debugview entry
Ideenmodellierer
parents:
520
diff
changeset
|
202 text[textPointer++] = ' '; |
| 38 | 203 text[textPointer++] = '/'; |
|
536
54c5ec8416c4
Changed visualization of Depth / temperatur / debugview entry
Ideenmodellierer
parents:
520
diff
changeset
|
204 text[textPointer++] = ' '; |
| 38 | 205 text[textPointer++] = 'C'; |
|
536
54c5ec8416c4
Changed visualization of Depth / temperatur / debugview entry
Ideenmodellierer
parents:
520
diff
changeset
|
206 text[textPointer++] = ' '; |
| 38 | 207 } |
| 208 else | |
| 209 { | |
| 210 text[textPointer++] = 'f'; | |
| 211 text[textPointer++] = 't'; | |
| 212 text[textPointer++] = ' '; | |
| 213 text[textPointer++] = '/'; | |
| 214 text[textPointer++] = ' '; | |
|
536
54c5ec8416c4
Changed visualization of Depth / temperatur / debugview entry
Ideenmodellierer
parents:
520
diff
changeset
|
215 text[textPointer++] = 'F'; |
| 38 | 216 text[textPointer++] = ' '; |
|
536
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 if(data->tX_colorscheme != 0) |
|
54c5ec8416c4
Changed visualization of Depth / temperatur / debugview entry
Ideenmodellierer
parents:
520
diff
changeset
|
219 { |
|
54c5ec8416c4
Changed visualization of Depth / temperatur / debugview entry
Ideenmodellierer
parents:
520
diff
changeset
|
220 text[textPointer++] = '/'; |
|
54c5ec8416c4
Changed visualization of Depth / temperatur / debugview entry
Ideenmodellierer
parents:
520
diff
changeset
|
221 text[textPointer++] = '\027'; |
|
54c5ec8416c4
Changed visualization of Depth / temperatur / debugview entry
Ideenmodellierer
parents:
520
diff
changeset
|
222 text[textPointer++] = ' '; |
|
54c5ec8416c4
Changed visualization of Depth / temperatur / debugview entry
Ideenmodellierer
parents:
520
diff
changeset
|
223 text[textPointer++] = '0' + data->tX_colorscheme; |
|
54c5ec8416c4
Changed visualization of Depth / temperatur / debugview entry
Ideenmodellierer
parents:
520
diff
changeset
|
224 text[textPointer++] = ' '; |
|
54c5ec8416c4
Changed visualization of Depth / temperatur / debugview entry
Ideenmodellierer
parents:
520
diff
changeset
|
225 text[textPointer++] = '\020'; |
|
54c5ec8416c4
Changed visualization of Depth / temperatur / debugview entry
Ideenmodellierer
parents:
520
diff
changeset
|
226 } |
|
54c5ec8416c4
Changed visualization of Depth / temperatur / debugview entry
Ideenmodellierer
parents:
520
diff
changeset
|
227 text[textPointer++] = '/'; |
| 38 | 228 text[textPointer++] = ' '; |
| 229 text[textPointer++] = 'd'; | |
| 230 text[textPointer++] = 'e'; | |
| 231 text[textPointer++] = 'b'; | |
| 232 text[textPointer++] = 'u'; | |
| 233 text[textPointer++] = 'g'; | |
| 234 } | |
| 235 | |
| 236 text[textPointer++] = '\n'; | |
| 237 text[textPointer++] = '\r'; | |
| 238 text[textPointer] = 0; | |
| 239 } | |
| 240 else | |
| 241 { | |
| 242 strcpy(&text[textPointer],"\n\r"); | |
| 243 textPointer += 2; | |
| 244 } | |
| 245 | |
|
805
dd7ce655db26
Adds a simple countdown timer, available as a custom view in surface and dive mode.
heinrichsweikamp
parents:
536
diff
changeset
|
246 if((line == 0) || (line == 5)) |
| 38 | 247 { |
| 248 text[textPointer++] = TXT_Information; | |
| 249 text[textPointer++] = '\t'; | |
| 250 textPointer += snprintf(&text[textPointer],29,"RTE %u.%u OS %i.%i.%i" | |
| 251 ,RTEhigh | |
| 252 ,RTElow | |
| 253 ,firmwareDataGetPointer()->versionFirst | |
| 254 ,firmwareDataGetPointer()->versionSecond | |
| 255 ,firmwareDataGetPointer()->versionThird | |
| 256 ); | |
| 257 } | |
| 258 strcpy(&text[textPointer],"\n\r"); | |
| 259 textPointer += 2; | |
| 260 | |
|
805
dd7ce655db26
Adds a simple countdown timer, available as a custom view in surface and dive mode.
heinrichsweikamp
parents:
536
diff
changeset
|
261 if((line == 0) || (line == 6)) |
| 38 | 262 { |
| 263 text[textPointer++] = TXT_2BYTE; | |
| 264 text[textPointer++] = TXT2BYTE_ResetMenu; | |
| 265 text[textPointer] = 0; | |
| 266 } | |
| 267 strcpy(&text[textPointer],"\n\r"); | |
| 268 textPointer += 2; | |
| 269 | |
| 270 return StMSYS; | |
| 271 } | |
| 272 | |
| 273 | |
| 274 /* Private functions ---------------------------------------------------------*/ |
