Mercurial > public > ostc4
comparison Discovery/Src/tMenuEditHardware.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 | df052f0347fb |
| children | 21142f4fa968 |
comparison
equal
deleted
inserted
replaced
| 998:5a690195b6b7 | 999:ac25c35a3c97 |
|---|---|
| 32 | 32 |
| 33 #include "externCPU2bootloader.h" | 33 #include "externCPU2bootloader.h" |
| 34 #include "gfx_fonts.h" | 34 #include "gfx_fonts.h" |
| 35 #include "ostc.h" | 35 #include "ostc.h" |
| 36 #include "tCCR.h" | 36 #include "tCCR.h" |
| 37 #include "tMenuEdit.h" | |
| 38 #include "tHome.h" | |
| 39 #include "tInfo.h" | |
| 40 #include "tInfoLog.h" | |
| 41 #include "tInfoSensor.h" | |
| 37 #include "tComm.h" | 42 #include "tComm.h" |
| 38 #include "data_exchange_main.h" | 43 #include "data_exchange_main.h" |
| 39 | 44 |
| 45 | |
| 46 extern void tM_build_pages(void); | |
| 40 | 47 |
| 41 /* Private function prototypes -----------------------------------------------*/ | 48 /* Private function prototypes -----------------------------------------------*/ |
| 42 void openEdit_Bluetooth(void); | 49 void openEdit_Bluetooth(void); |
| 43 void openEdit_Compass(void); | 50 void openEdit_Compass(void); |
| 44 void openEdit_O2Sensors(void); | 51 void openEdit_O2Sensors(void); |
| 46 //void openEdit_Luftintegration(void); | 53 //void openEdit_Luftintegration(void); |
| 47 void openEdit_ButtonSens(void); | 54 void openEdit_ButtonSens(void); |
| 48 void openEdit_FlipDisplay(void); | 55 void openEdit_FlipDisplay(void); |
| 49 | 56 |
| 50 /* Announced function prototypes -----------------------------------------------*/ | 57 /* Announced function prototypes -----------------------------------------------*/ |
| 51 uint8_t OnAction_Compass (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); | |
| 52 uint8_t OnAction_Bearing (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); | |
| 53 uint8_t OnAction_BearingClear (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); | |
| 54 uint8_t OnAction_InertiaLevel (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); | |
| 55 //uint8_t OnAction_ExitHardw (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); | |
| 56 uint8_t OnAction_Sensor1 (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); | 58 uint8_t OnAction_Sensor1 (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); |
| 57 uint8_t OnAction_Sensor2 (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); | 59 uint8_t OnAction_Sensor2 (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); |
| 58 uint8_t OnAction_Sensor3 (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); | 60 uint8_t OnAction_Sensor3 (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); |
| 59 uint8_t OnAction_O2_Calibrate (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); | 61 uint8_t OnAction_O2_Calibrate (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); |
| 60 //uint8_t OnAction_O2_Source (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); | |
| 61 uint8_t OnAction_Sensor_Info (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); | 62 uint8_t OnAction_Sensor_Info (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); |
| 62 uint8_t OnAction_Sensor_Detect (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); | 63 uint8_t OnAction_Sensor_Detect (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); |
| 63 uint8_t OnAction_Button (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); | 64 uint8_t OnAction_Button (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); |
| 64 uint8_t OnAction_ButtonBalance (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); | 65 uint8_t OnAction_ButtonBalance (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); |
| 65 uint8_t OnAction_ButtonLock (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); | 66 uint8_t OnAction_ButtonLock (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); |
| 66 // not required uint8_t OnAction_Bluetooth (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); | |
| 67 | 67 |
| 68 /* Exported functions --------------------------------------------------------*/ | 68 /* Exported functions --------------------------------------------------------*/ |
| 69 | 69 |
| 70 | 70 |
| 71 #define O2_CALIB_FRACTION_AIR (0.209F) | 71 #define O2_CALIB_FRACTION_AIR (0.209F) |
| 133 setFlipDisplay(!oldValue); | 133 setFlipDisplay(!oldValue); |
| 134 | 134 |
| 135 exitEditWithUpdate(); | 135 exitEditWithUpdate(); |
| 136 exitMenuEdit_to_Home(); | 136 exitMenuEdit_to_Home(); |
| 137 } | 137 } |
| 138 | |
| 139 static uint8_t OnAction_CompassDeclination(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) | |
| 140 { | |
| 141 SSettings *settings = settingsGetPointer(); | |
| 142 uint8_t digitContentNew; | |
| 143 switch (action) { | |
| 144 case ACTION_BUTTON_ENTER: | |
| 145 | |
| 146 return digitContent; | |
| 147 case ACTION_BUTTON_ENTER_FINAL: | |
| 148 { | |
| 149 int32_t compassDeclinationDeg; | |
| 150 evaluateNewString(editId, (uint32_t *)&compassDeclinationDeg, NULL, NULL, NULL); | |
| 151 | |
| 152 if (compassDeclinationDeg > MAX_COMPASS_DECLINATION_DEG) { | |
| 153 compassDeclinationDeg = MAX_COMPASS_DECLINATION_DEG; | |
| 154 } else if (compassDeclinationDeg < -MAX_COMPASS_DECLINATION_DEG) { | |
| 155 compassDeclinationDeg = -MAX_COMPASS_DECLINATION_DEG; | |
| 156 } | |
| 157 | |
| 158 settings->compassDeclinationDeg = compassDeclinationDeg; | |
| 159 | |
| 160 tMenuEdit_newInput(editId, ((input_u)compassDeclinationDeg).uint32, 0, 0, 0); | |
| 161 } | |
| 162 | |
| 163 break; | |
| 164 case ACTION_BUTTON_NEXT: | |
| 165 if (digitNumber == 0) { | |
| 166 digitContentNew = togglePlusMinus(digitContent); | |
| 167 } else { | |
| 168 digitContentNew = digitContent + 1; | |
| 169 if (digitContentNew > '9') { | |
| 170 digitContentNew = '0'; | |
| 171 } | |
| 172 } | |
| 173 | |
| 174 return digitContentNew; | |
| 175 case ACTION_BUTTON_BACK: | |
| 176 if (digitNumber == 0) { | |
| 177 digitContentNew = togglePlusMinus(digitContent); | |
| 178 } else { | |
| 179 digitContentNew = digitContent - 1; | |
| 180 if (digitContentNew < '0') { | |
| 181 digitContentNew = '9'; | |
| 182 } | |
| 183 } | |
| 184 | |
| 185 return digitContentNew; | |
| 186 } | |
| 187 | |
| 188 return UNSPECIFIC_RETURN; | |
| 189 } | |
| 190 | |
| 191 | |
| 192 static void showCompassDeclination(SSettings *settings, bool isRefresh) | |
| 193 { | |
| 194 char text[16]; | |
| 195 snprintf(text, 16, "%c%c:", TXT_2BYTE, TXT2BYTE_CompassDeclination); | |
| 196 write_label_var(30, 800, ME_Y_LINE6, &FontT48, text); | |
| 197 if (isRefresh) { | |
| 198 tMenuEdit_refresh_field(StMHARD2_Compass_Declination); | |
| 199 } else { | |
| 200 write_field_sdigit(StMHARD2_Compass_Declination, 500, 800, ME_Y_LINE6, &FontT48, "\034###`", settings->compassDeclinationDeg, 0, 0, 0); | |
| 201 } | |
| 202 } | |
| 203 | |
| 204 | |
| 205 void refresh_CompassEdit(void) | |
| 206 { | |
| 207 SSettings *settings = settingsGetPointer(); | |
| 208 | |
| 209 uint16_t heading; | |
| 210 char text[32]; | |
| 211 uint8_t textIndex = 0; | |
| 212 | |
| 213 text[0] = '\001'; | |
| 214 text[1] = TXT_2BYTE; | |
| 215 text[2] = TXT2BYTE_Compass; | |
| 216 text[3] = 0; | |
| 217 write_topline(text); | |
| 218 | |
| 219 if(settings->compassInertia) | |
| 220 { | |
| 221 heading = (uint16_t)compass_getCompensated(); | |
| 222 } | |
| 223 else | |
| 224 { | |
| 225 heading = (uint16_t)stateUsed->lifeData.compass_heading; | |
| 226 } | |
| 227 snprintf(text,32,"\001%03i`",heading); | |
| 228 write_label_var( 0, 800, ME_Y_LINE1, &FontT54, text); | |
| 229 | |
| 230 tMenuEdit_refresh_field(StMHARD2_Compass_SetCourse); | |
| 231 tMenuEdit_refresh_field(StMHARD2_Compass_Calibrate); | |
| 232 tMenuEdit_refresh_field(StMHARD2_Compass_ResetCourse); | |
| 233 text[textIndex++] = TXT_2BYTE; | |
| 234 text[textIndex++] = TXT2BYTE_CompassInertia; | |
| 235 text[textIndex++] = ':'; | |
| 236 text[textIndex++] = ' '; | |
| 237 text[textIndex++] = '0' + settings->compassInertia; | |
| 238 | |
| 239 write_label_var(30, 800, ME_Y_LINE5, &FontT48, text); | |
| 240 | |
| 241 showCompassDeclination(settings, true); | |
| 242 | |
| 243 write_buttonTextline(TXT2BYTE_ButtonBack,TXT2BYTE_ButtonEnter,TXT2BYTE_ButtonNext); | |
| 244 } | |
| 245 | |
| 246 | |
| 247 void openEdit_Compass(void) | |
| 248 { | |
| 249 SSettings *settings = settingsGetPointer(); | |
| 250 | |
| 251 char text[10]; | |
| 252 uint8_t textIndex = 0; | |
| 253 | |
| 254 | |
| 255 set_globalState(StMHARD2_Compass); | |
| 256 resetMenuEdit(CLUT_MenuPageHardware); | |
| 257 | |
| 258 text[textIndex++] = '\001'; | |
| 259 text[textIndex++] = TXT_2BYTE; | |
| 260 text[textIndex++] = TXT2BYTE_Compass; | |
| 261 text[textIndex++] = 0; | |
| 262 write_topline(text); | |
| 263 | |
| 264 text[0] = TXT_2BYTE; | |
| 265 text[2] = 0; | |
| 266 | |
| 267 text[1] = TXT2BYTE_SetBearing; | |
| 268 write_field_button(StMHARD2_Compass_SetCourse, 30, 800, ME_Y_LINE2, &FontT48, text); | |
| 269 | |
| 270 text[1] = TXT2BYTE_ResetBearing; | |
| 271 write_field_button(StMHARD2_Compass_ResetCourse, 30, 800, ME_Y_LINE3, &FontT48, text); | |
| 272 | |
| 273 text[1] = TXT2BYTE_CompassCalib; | |
| 274 write_field_button(StMHARD2_Compass_Calibrate, 30, 800, ME_Y_LINE4, &FontT48, text); | |
| 275 | |
| 276 text[1] = TXT2BYTE_CompassInertia; | |
| 277 textIndex = 2; | |
| 278 text[textIndex++] = ':'; | |
| 279 text[textIndex++] = ' '; | |
| 280 text[textIndex++] = '0' + settings->compassInertia; | |
| 281 text[textIndex++] = 0; | |
| 282 | |
| 283 write_field_button(StMHARD2_Compass_Inertia, 30, 800, ME_Y_LINE5, &FontT48, text); | |
| 284 | |
| 285 showCompassDeclination(settings, false); | |
| 286 | |
| 287 setEvent(StMHARD2_Compass_SetCourse, (uint32_t)OnAction_Bearing); | |
| 288 setEvent(StMHARD2_Compass_ResetCourse, (uint32_t)OnAction_BearingClear); | |
| 289 setEvent(StMHARD2_Compass_Calibrate, (uint32_t)OnAction_Compass); | |
| 290 setEvent(StMHARD2_Compass_Inertia, (uint32_t)OnAction_InertiaLevel); | |
| 291 setEvent(StMHARD2_Compass_Declination, (uint32_t)OnAction_CompassDeclination); | |
| 292 | |
| 293 tMenuEdit_select(StMHARD2_Compass_SetCourse); | |
| 294 | |
| 295 write_buttonTextline(TXT2BYTE_ButtonBack,TXT2BYTE_ButtonEnter,TXT2BYTE_ButtonNext); | |
| 296 } | |
| 297 | |
| 298 | |
| 299 uint8_t OnAction_Compass (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) | |
| 300 { | |
| 301 calibrateCompass(); | |
| 302 return EXIT_TO_INFO_COMPASS; | |
| 303 } | |
| 304 | |
| 305 | |
| 306 uint8_t OnAction_Bearing (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) | |
| 307 { | |
| 308 if((int16_t)stateUsed->lifeData.compass_heading != -1) | |
| 309 { | |
| 310 settingsGetPointer()->compassBearing = (int16_t)stateUsed->lifeData.compass_heading; | |
| 311 } | |
| 312 else | |
| 313 { | |
| 314 settingsGetPointer()->compassBearing = 0; | |
| 315 } | |
| 316 | |
| 317 if(settingsGetPointer()->compassBearing == 0) | |
| 318 settingsGetPointer()->compassBearing = 360; | |
| 319 return UPDATE_AND_EXIT_TO_MENU; | |
| 320 } | |
| 321 | |
| 322 | |
| 323 uint8_t OnAction_BearingClear (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) | |
| 324 { | |
| 325 settingsGetPointer()->compassBearing = 0; | |
| 326 return UPDATE_AND_EXIT_TO_MENU; | |
| 327 } | |
| 328 | |
| 329 | |
| 330 uint8_t OnAction_InertiaLevel (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) | |
| 331 { | |
| 332 uint8_t newLevel = 0; | |
| 333 | |
| 334 newLevel = settingsGetPointer()->compassInertia + 1; | |
| 335 if(newLevel > MAX_COMPASS_COMP) | |
| 336 { | |
| 337 newLevel = 0; | |
| 338 } | |
| 339 settingsGetPointer()->compassInertia = newLevel; | |
| 340 return UPDATE_DIVESETTINGS; | |
| 341 } | |
| 342 | |
| 343 /* | |
| 344 uint8_t OnAction_ExitHardw (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) | |
| 345 { | |
| 346 return EXIT_TO_MENU; | |
| 347 } | |
| 348 */ | |
| 349 | 138 |
| 350 void refresh_O2Sensors(void) | 139 void refresh_O2Sensors(void) |
| 351 { | 140 { |
| 352 char strSensorId[20]; | 141 char strSensorId[20]; |
| 353 char strSensorValue[20]; | 142 char strSensorValue[20]; |
