Mercurial > public > ostc4
diff Discovery/Src/tMenuEditXtra.c @ 662:1b995079c045 Betatest
PSCR Mode
author | heinrichs weikamp |
---|---|
date | Tue, 14 Dec 2021 15:36:10 +0100 |
parents | 890440ab993a |
children | e81afd727993 |
line wrap: on
line diff
--- a/Discovery/Src/tMenuEditXtra.c Mon Nov 01 12:39:34 2021 +0100 +++ b/Discovery/Src/tMenuEditXtra.c Tue Dec 14 15:36:10 2021 +0100 @@ -35,6 +35,7 @@ #include "tMenuEdit.h" #include "data_exchange_main.h" #include "motion.h" +#include "configuration.h" /* Private function prototypes -----------------------------------------------*/ @@ -47,10 +48,26 @@ static void openEdit_ScrubberTimer(uint8_t line); static void openEdit_ScrubberReset(void); static void openEdit_ScrubberTimerMode(void); +#ifdef ENABLE_PSCR_MODE +static void openEdit_PSCRO2Drop(uint8_t line); +static void openEdit_PSCRLungRatio(uint8_t line); +#endif +#ifdef ENABLE_CO2_SUPPORT +static void openEdit_CO2Sensor(void); +#endif /* Announced function prototypes -----------------------------------------------*/ uint8_t OnAction_CompassHeading (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); static uint8_t OnAction_ScrubberTimer(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); +#ifdef ENABLE_PSCR_MODE +static uint8_t OnAction_PSCRO2Drop(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); +static uint8_t OnAction_PSCRLungRation(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); +#endif + +#ifdef ENABLE_CO2_SUPPORT +static uint8_t OnAction_CO2OnOff(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); +static uint8_t OnAction_CO2Calib(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); +#endif /* Exported functions --------------------------------------------------------*/ @@ -91,6 +108,11 @@ } else /* surface mode */ { + if((settingsGetPointer()->dive_mode != DIVEMODE_PSCR) && (line > 3)) /* PSCR items are only optional */ + { + line = 6; + } + switch(line) { case 1: openEdit_ScrubberTimer(line); @@ -99,6 +121,16 @@ break; case 3: openEdit_ScrubberTimerMode(); break; +#ifdef ENABLE_PSCR_MODE + case 4: openEdit_PSCRO2Drop(line); + break; + case 5: openEdit_PSCRLungRatio(line); + break; +#endif +#ifdef ENABLE_CO2_SUPPORT + case 6: openEdit_CO2Sensor(); + break; +#endif default: break; } @@ -191,6 +223,103 @@ exitMenuEdit_to_Menu_with_Menu_Update(); } +#ifdef ENABLE_PSCR_MODE +static void openEdit_PSCRO2Drop(uint8_t line) +{ + uint8_t localO2Drop; + uint16_t y_line; + + char text[32]; + SSettings *pSettings = settingsGetPointer(); + localO2Drop = pSettings->pscr_o2_drop; + + y_line = ME_Y_LINE_BASE + (line * ME_Y_LINE_STEP); + + text[0] = '\001'; + text[1] = TXT_PSCRO2Drop; + text[2] = 0; + write_topline(text); + + text[0] = '\002'; + text[1] = '\016'; + text[2] = '\016'; + text[3] = '%'; + text[4] = 0; + write_label_fix( 20, 800, y_line, &FontT48, TXT_PSCRO2Drop); + write_label_var( 435, 780, y_line, &FontT48, text); + write_field_udigit(StMXTRA_PSCR_O2_Drop, 710, 779, y_line, &FontT48, "##", (uint32_t)localO2Drop, 0, 0, 0); + + write_buttonTextline(TXT2BYTE_ButtonMinus,TXT2BYTE_ButtonEnter,TXT2BYTE_ButtonPlus); + + setEvent(StMXTRA_PSCR_O2_Drop, (uint32_t)OnAction_PSCRO2Drop); + startEdit(); +} + +static void openEdit_PSCRLungRatio(uint8_t line) +{ + uint8_t localLungRatio; + uint16_t y_line; + + char text[32]; + SSettings *pSettings = settingsGetPointer(); + localLungRatio = pSettings->pscr_lung_ratio; + + y_line = ME_Y_LINE_BASE + (line * ME_Y_LINE_STEP); + + text[0] = '\001'; + text[1] = TXT_PSCRO2Drop; + text[2] = 0; + write_topline(text); + + text[0] = '\002'; + text[1] = '1'; + text[2] = '/'; + text[3] = 0; + + write_label_fix( 20, 800, y_line, &FontT48, TXT_PSCRLungRatio); + write_label_var( 435, 710, y_line, &FontT48, text); + write_field_udigit(StMXTRA_PSCR_LUNG_RATIO, 710, 779, y_line, &FontT48, "##", (uint32_t)localLungRatio, 0, 0, 0); + + write_buttonTextline(TXT2BYTE_ButtonMinus,TXT2BYTE_ButtonEnter,TXT2BYTE_ButtonPlus); + + setEvent(StMXTRA_PSCR_LUNG_RATIO, (uint32_t)OnAction_PSCRLungRation); + startEdit(); +} +#endif + +#ifdef ENABLE_CO2_SUPPORT +static void openEdit_CO2Sensor() +{ + char text[32]; + snprintf(text,32,"\001%c",TXT_CO2Sensor); + write_topline(text); + + refresh_CO2Data(); + if(settingsGetPointer()->co2_sensor_active) + { + text[0] = '\005'; + } + else + { + text[0] = '\006'; + } + text[0] = TXT_CO2Sensor; + text[1] = 0; + + write_field_on_off(StMXTRA_CO2_Sensor, 30, 95, ME_Y_LINE3, &FontT48, text, settingsGetPointer()->co2_sensor_active); + + text[0] = TXT_2BYTE; + text[1] = TXT2BYTE_O2Calib; + text[2] = 0; + write_field_button(StMXTRA_CO2_Sensor_Calib,30, 800, ME_Y_LINE4, &FontT48, text); + + setEvent(StMXTRA_CO2_Sensor, (uint32_t)OnAction_CO2OnOff); + setEvent(StMXTRA_CO2_Sensor_Calib, (uint32_t)OnAction_CO2Calib); + + write_buttonTextline(TXT2BYTE_ButtonBack,TXT2BYTE_ButtonEnter,TXT2BYTE_ButtonNext); +} +#endif + void refresh_CompassHeading(void) { uint16_t heading; @@ -209,6 +338,23 @@ tMenuEdit_refresh_field(StMXTRA_CompassHeading); } +void refresh_CO2Data(void) +{ + char text[32]; + + snprintf(text,32,"\001%c",TXT_CO2Sensor); + write_topline(text); + + snprintf(text,32,"CO2: %d ppm",stateUsed->lifeData.CO2_data.CO2_ppm); + write_label_var( 30, 800, ME_Y_LINE1, &FontT48, text); + + snprintf(text,32,"Signal: %d",stateUsed->lifeData.CO2_data.signalStrength); + write_label_var( 30, 800, ME_Y_LINE2, &FontT48, text); + + tMenuEdit_refresh_field(StMXTRA_CO2_Sensor); + tMenuEdit_refresh_field(StMXTRA_CO2_Sensor_Calib); +} + void openEdit_CompassHeading(void) { @@ -267,4 +413,107 @@ } return digitContentNew; } +#ifdef ENABLE_PSCR_MODE +static uint8_t OnAction_PSCRO2Drop(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) +{ + SSettings *pSettings; + uint8_t digitContentNew = EXIT_TO_MENU; + uint32_t newO2Drop; + if(action == ACTION_BUTTON_ENTER) + { + return digitContent; + } + if(action == ACTION_BUTTON_ENTER_FINAL) + { + evaluateNewString(editId, &newO2Drop, 0, 0, 0); + + if(newO2Drop > PSCR_MAX_O2_DROP) + newO2Drop = PSCR_MAX_O2_DROP; + + pSettings = settingsGetPointer(); + pSettings->pscr_o2_drop = newO2Drop; + + tMenuEdit_newInput(editId, newO2Drop, 0, 0, 0); + digitContentNew = UPDATE_AND_EXIT_TO_MENU; + } + if(action == ACTION_BUTTON_NEXT) + { + digitContentNew = digitContent + 1; + if(digitContentNew > '9') + digitContentNew = '0'; + } + if(action == ACTION_BUTTON_BACK) + { + digitContentNew = digitContent - 1; + if(digitContentNew < '0') + digitContentNew = '9'; + } + return digitContentNew; +} + +static uint8_t OnAction_PSCRLungRation(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) +{ + SSettings *pSettings; + uint8_t digitContentNew = EXIT_TO_MENU; + uint32_t newLungRatio; + + if(action == ACTION_BUTTON_ENTER) + { + return digitContent; + } + if(action == ACTION_BUTTON_ENTER_FINAL) + { + evaluateNewString(editId, &newLungRatio, 0, 0, 0); + + if(newLungRatio > PSCR_MAX_LUNG_RATIO) + newLungRatio = PSCR_MAX_LUNG_RATIO; + + if(newLungRatio < PSCR_MIN_LUNG_RATIO) + newLungRatio = PSCR_MIN_LUNG_RATIO; + + pSettings = settingsGetPointer(); + pSettings->pscr_lung_ratio = newLungRatio; + + tMenuEdit_newInput(editId, newLungRatio, 0, 0, 0); + digitContentNew = UPDATE_AND_EXIT_TO_MENU; + } + if(action == ACTION_BUTTON_NEXT) + { + digitContentNew = digitContent + 1; + if(digitContentNew > '9') + digitContentNew = '0'; + } + if(action == ACTION_BUTTON_BACK) + { + digitContentNew = digitContent - 1; + if(digitContentNew < '0') + digitContentNew = '9'; + } + return digitContentNew; +} +#endif + +#ifdef ENABLE_CO2_SUPPORT +static uint8_t OnAction_CO2OnOff(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) +{ + SSettings *pSettings = settingsGetPointer(); + if(pSettings->co2_sensor_active) + { + pSettings->co2_sensor_active = 0; + tMenuEdit_set_on_off(StMXTRA_CO2_Sensor,0); + } + else + { + pSettings->co2_sensor_active = 1; + tMenuEdit_set_on_off(StMXTRA_CO2_Sensor,1); + } + return UPDATE_DIVESETTINGS; +} + +static uint8_t OnAction_CO2Calib(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) +{ + DataEX_setExtInterface_Cmd(EXT_INTERFACE_CO2_CALIB); + return UPDATE_DIVESETTINGS; +} +#endif