Mercurial > public > ostc4
changeset 1073:734f84b72b30 Icon_Integration tip
CV Option Menu added sub menus for O2 and CO2 sensors:
In the previous implementation by the external sensor menu the problem exists that only three sensor could be displayed. If three o2 sensors were active then the CO2 sensor was not accessible. With the new dynamic view the CO2 sensor is a standalone menu element. The three sensor view was reused from the external sensor menu by introducing a filter (sensor type) functionality. O" and CO2 sensors may now be calibrated using the cv option sub menus.
| author | Ideenmodellierer |
|---|---|
| date | Fri, 20 Feb 2026 17:26:46 +0100 |
| parents | 8b97003dbb60 |
| children | |
| files | Discovery/Inc/tInfoSensor.h Discovery/Inc/tMenu.h Discovery/Inc/tMenuEditHardware.h Discovery/Src/tInfoSensor.c Discovery/Src/tMenu.c Discovery/Src/tMenuCvOptionText.c Discovery/Src/tMenuEditCvOption.c Discovery/Src/tMenuEditHardware.c |
| diffstat | 8 files changed, 341 insertions(+), 192 deletions(-) [+] |
line wrap: on
line diff
--- a/Discovery/Inc/tInfoSensor.h Thu Feb 19 21:37:34 2026 +0100 +++ b/Discovery/Inc/tInfoSensor.h Fri Feb 20 17:26:46 2026 +0100 @@ -28,8 +28,11 @@ #ifndef TINFO_SENSOR_H #define TINFO_SENSOR_H +#include "data_central.h" + /* Exported functions --------------------------------------------------------*/ void openInfo_Sensor(uint8_t sensorId); +void openInfo_SetSensorType(externalInterfaceSensorType Type); void refreshInfo_Sensor(GFX_DrawCfgScreen s); void sendActionToInfoSensor(uint8_t sendAction);
--- a/Discovery/Inc/tMenu.h Thu Feb 19 21:37:34 2026 +0100 +++ b/Discovery/Inc/tMenu.h Fri Feb 20 17:26:46 2026 +0100 @@ -77,6 +77,7 @@ void sendActionToMenu(uint8_t sendAction); void exitMenu(void); +void tM_setLinesForPage(uint32_t pageID, uint8_t lineCnt); void tM_check_content(void); void tM_refresh_live_content(void); void tM_rebuild_menu_after_tComm(void);
--- a/Discovery/Inc/tMenuEditHardware.h Thu Feb 19 21:37:34 2026 +0100 +++ b/Discovery/Inc/tMenuEditHardware.h Fri Feb 20 17:26:46 2026 +0100 @@ -36,6 +36,9 @@ #include "data_central.h" void openEdit_Hardware(uint8_t line); +void openEdit_SensorsO2(); +void openEdit_SensorsCO2(); + void refresh_O2Sensors(void); void refresh_CompassEdit(void); void refresh_ButtonValuesFromPIC(void);
--- a/Discovery/Src/tInfoSensor.c Thu Feb 19 21:37:34 2026 +0100 +++ b/Discovery/Src/tInfoSensor.c Fri Feb 20 17:26:46 2026 +0100 @@ -39,12 +39,13 @@ #include <string.h> #include <inttypes.h> -extern void openEdit_O2Sensors(void); +extern void openEdit_Sensors(uint8_t filter); uint8_t OnAction_Sensor (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); /* Private variables ---------------------------------------------------------*/ static uint8_t activeSensorId = 0; static uint8_t sensorActive = 0; +static externalInterfaceSensorType sensorType = SENSOR_NONE; /* Exported functions --------------------------------------------------------*/ void openInfo_Sensor(uint8_t sensorId) { @@ -53,39 +54,36 @@ set_globalState(StISENINFO); switch (activeSensorId) { - case 2: setBackMenu((uint32_t)openEdit_O2Sensors,0,3); + case 2: setBackMenu((uint32_t)openEdit_Sensors,SENSOR_END,3); break; - case 1: setBackMenu((uint32_t)openEdit_O2Sensors,0,2); + case 1: setBackMenu((uint32_t)openEdit_Sensors,SENSOR_END,2); break; default: - case 0: setBackMenu((uint32_t)openEdit_O2Sensors,0,1); + case 0: setBackMenu((uint32_t)openEdit_Sensors,SENSOR_END,1); break; } sensorActive = 1; - if(pSettings->ppo2sensors_deactivated & (1 << (activeSensorId))) + switch(sensorType) /* type has to be set using the set function before info dialog is used */ { - sensorActive = 0; + case SENSOR_CO2: + case SENSOR_CO2M: sensorActive = pSettings->co2_sensor_active; + break; + case SENSOR_DIGO2: DataEX_setExtInterface_Cmd(EXT_INTERFACE_O2_INDICATE, activeSensorId); + /*no break*/ + default: if(pSettings->ppo2sensors_deactivated & (1 << (activeSensorId))) + { + sensorActive = 0; + } + break; } - DataEX_setExtInterface_Cmd(EXT_INTERFACE_O2_INDICATE, activeSensorId); -} -uint8_t OnAction_Sensor(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) -{ - if(settingsGetPointer()->ppo2sensors_deactivated & (1 << (activeSensorId))) - { - settingsGetPointer()->ppo2sensors_deactivated &= ~(1 << (activeSensorId)); - tMenuEdit_set_on_off(editId, 1); - } - else - { - settingsGetPointer()->ppo2sensors_deactivated |= (1 << (activeSensorId)); - tMenuEdit_set_on_off(editId, 0); - } - return UPDATE_DIVESETTINGS; } - +void openInfo_SetSensorType(externalInterfaceSensorType Type) +{ + sensorType = Type; +} uint64_t mod64(uint64_t a, uint64_t b) { @@ -221,11 +219,12 @@ text[6] = 0; tInfo_write_content_simple( 30, 770, ME_Y_LINE_BASE, &FontT48, text, CLUT_MenuPageHardware); - switch(pStateReal->lifeData.extIf_sensor_map[activeSensorId]) + switch(sensorType) { default: case SENSOR_DIGO2M: refreshInfo_SensorO2(s); break; + case SENSOR_CO2: case SENSOR_CO2M: refreshInfo_SensorCo2(s); break; } @@ -233,32 +232,42 @@ void sendActionToInfoSensor(uint8_t sendAction) { + SSettings *pSettings = settingsGetPointer(); + switch(sendAction) { case ACTION_BUTTON_BACK: exitMenuEdit_to_BackMenu(); break; - case ACTION_BUTTON_ENTER: if(settingsGetPointer()->ppo2sensors_deactivated & (1 << (activeSensorId))) - { - if(stateRealGetPointer()->lifeData.extIf_sensor_map[activeSensorId] == SENSOR_CO2M) - { - settingsGetPointer()->co2_sensor_active = 1; - } - settingsGetPointer()->ppo2sensors_deactivated &= ~(uint8_t)(1 << (activeSensorId)); - sensorActive = 1; - } - else - { - if(stateRealGetPointer()->lifeData.extIf_sensor_map[activeSensorId] == SENSOR_CO2M) - { - settingsGetPointer()->co2_sensor_active = 0; - } - settingsGetPointer()->ppo2sensors_deactivated |= (uint8_t)(1 << (activeSensorId)); - sensorActive = 0; - } + case ACTION_BUTTON_ENTER: switch(sensorType) + { + case SENSOR_CO2: + case SENSOR_CO2M: if(pSettings->co2_sensor_active) + { + pSettings->co2_sensor_active = 0; + sensorActive = 0; + } + else + { + pSettings->co2_sensor_active = 1; + sensorActive = 1; + } + break; + default: if(pSettings->ppo2sensors_deactivated & (1 << (activeSensorId))) + { + pSettings->ppo2sensors_deactivated &= ~(1 << (activeSensorId)); + sensorActive = 1; + } + else + { + pSettings->ppo2sensors_deactivated |= (1 << (activeSensorId)); + sensorActive = 0; + } + break; + } break; - case ACTION_BUTTON_NEXT: if(stateRealGetPointer()->lifeData.extIf_sensor_map[activeSensorId] == SENSOR_CO2M) + case ACTION_BUTTON_NEXT: if((sensorType == SENSOR_CO2M) || (sensorType == SENSOR_CO2)) { DataEX_setExtInterface_Cmd(EXT_INTERFACE_CO2_CALIB, activeSensorId); }
--- a/Discovery/Src/tMenu.c Thu Feb 19 21:37:34 2026 +0100 +++ b/Discovery/Src/tMenu.c Fri Feb 20 17:26:46 2026 +0100 @@ -963,6 +963,17 @@ } } +tM_setLinesForPage(uint32_t pageID, uint8_t lineCnt) +{ + SStateList list; + get_idSpecificStateList(pageID, &list); + + if(list.page < MAXPAGES) + { + menu.linesAvailableForPage[list.page] = lineCnt; + } +} + void block_diluent_page(void) { block_diluent_handler(0);
--- a/Discovery/Src/tMenuCvOptionText.c Thu Feb 19 21:37:34 2026 +0100 +++ b/Discovery/Src/tMenuCvOptionText.c Fri Feb 20 17:26:46 2026 +0100 @@ -157,7 +157,7 @@ SSettings *settings = settingsGetPointer(); memset(SensorActive, 0, sizeof(SensorActive)); - + activeLines = 0; for (index = 0; index < EXT_INTERFACE_SENSOR_CNT; index++) { @@ -223,7 +223,6 @@ { tMCvOption_SetOpenFnct(CVOPT_END, index); } - return activeLines; }
--- a/Discovery/Src/tMenuEditCvOption.c Thu Feb 19 21:37:34 2026 +0100 +++ b/Discovery/Src/tMenuEditCvOption.c Fri Feb 20 17:26:46 2026 +0100 @@ -29,6 +29,7 @@ /* Includes ------------------------------------------------------------------*/ #include "tMenuEditCvOption.h" #include "tMenuCvOptionText.h" +#include "tMenuEditHardware.h" #include "tMenuEdit.h" #include "gfx_fonts.h" @@ -68,7 +69,12 @@ break; case CVOPT_END: openFctPointerTable[index] = NULL; break; - default: break; + case CVOPT_O2_Sensor: openFctPointerTable[index] = openEdit_SensorsO2; + break; + case CVOPT_CO2_Sensor: openFctPointerTable[index] = openEdit_SensorsCO2; + break; + default: + break; } } }
--- a/Discovery/Src/tMenuEditHardware.c Thu Feb 19 21:37:34 2026 +0100 +++ b/Discovery/Src/tMenuEditHardware.c Fri Feb 20 17:26:46 2026 +0100 @@ -41,13 +41,14 @@ #include "tInfoSensor.h" #include "tComm.h" #include "data_exchange_main.h" +#include "tMenuCvOptionText.h" //extern void tM_build_pages(void); /* Private function prototypes -----------------------------------------------*/ void openEdit_Bluetooth(void); -void openEdit_O2Sensors(void); +void openEdit_Sensors(uint8_t filter); void openEdit_Brightness(void); //void openEdit_Luftintegration(void); void openEdit_ButtonSens(void); @@ -59,6 +60,7 @@ uint8_t OnAction_Sensor2 (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); uint8_t OnAction_Sensor3 (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); uint8_t OnAction_O2_Calibrate (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); +uint8_t OnAction_CO2_Calibrate (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); uint8_t OnAction_Sensor_Info (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); uint8_t OnAction_Sensor_Detect (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); uint8_t OnAction_Button (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); @@ -73,6 +75,9 @@ static uint8_t O2_calib_gas = 21; +static externalInterfaceSensorType sensorFilter = SENSOR_NONE; /* used to have only a specific type of sensor in the sensor list view */ +static externalInterfaceSensorType localSensorMap[3]; /* reduce the complete external sensor map to the three entries which are displayed by the menu */ + void openEdit_Hardware(uint8_t line) { set_globalState_Menu_Line(line); @@ -82,7 +87,7 @@ case 1: default: openEdit_Bluetooth(); break; - case 2: openEdit_O2Sensors(); + case 2: openEdit_Sensors(SENSOR_NONE); break; case 3: openEdit_Brightness(); break; @@ -143,10 +148,11 @@ uint16_t y_line; uint8_t index = 0; + const SDiveState *pStateReal = stateRealGetPointer(); SSettings *pSettings = settingsGetPointer(); - if(memcmp(pSettings->ext_sensor_map, pStateReal->lifeData.extIf_sensor_map, EXT_INTERFACE_SENSOR_CNT) != 0) + if((memcmp(pSettings->ext_sensor_map, pStateReal->lifeData.extIf_sensor_map, EXT_INTERFACE_SENSOR_CNT) != 0) && (sensorFilter == SENSOR_NONE)) { memcpy(pSettings->ext_sensor_map, pStateReal->lifeData.extIf_sensor_map, EXT_INTERFACE_SENSOR_CNT); pSettings->ppo2sensors_deactivated = 0x0; /* deactivation will be done by openEditO2Sensor if need */ @@ -188,7 +194,18 @@ break; } } - openEdit_O2Sensors(); + if(pSettings->ext_sensor_map[0] != SENSOR_SEARCH) + { + index = tMCvOptText_BuildDynamicContentList(); + tM_setLinesForPage(StMOption, index); + openEdit_Sensors(SENSOR_NONE); + } + else + { + openEdit_Sensors(SENSOR_SEARCH); + } + + } strSensorId[0] = '\001'; @@ -210,7 +227,7 @@ strSensorId[4] = 'X'; strSensorId[5] = '1' + index; - switch(pSettings->ext_sensor_map[index]) + switch(localSensorMap[index]) { case SENSOR_SEARCH: strSensorId[1] = TXT2BYTE_SensorDetect; strSensorId[2] = 0; @@ -224,13 +241,13 @@ case SENSOR_DIGO2M: strSensorId[4] = TXT2BYTE_O2IFDigital; break; case SENSOR_CO2: - case SENSOR_CO2M: strSensorId[3] = 'C'; - strSensorId[4] = 'O'; - strSensorId[5] = '2'; + case SENSOR_CO2M: strSensorId[3] = 'C'; + strSensorId[4] = 'O'; + strSensorId[5] = '2'; break; case SENSOR_SENTINEL: - case SENSOR_SENTINELM: strSensorId[3] = 'S'; - strSensorId[4] = 'e'; + case SENSOR_SENTINELM: strSensorId[3] = 'S'; + strSensorId[4] = 'e'; break; case SENSOR_GNSS: case SENSOR_GNSSM: strSensorId[3] = 'G'; @@ -245,11 +262,11 @@ write_label_var( 96, 340, ME_Y_LINE1 + (index * ME_Y_LINE_STEP), &FontT48, strSensorId); } strSensorValue[0] = 0; - if((pSettings->ext_sensor_map[index] >= SENSOR_OPTIC) && (pSettings->ext_sensor_map[index] < SENSOR_TYPE_O2_END)) + if((localSensorMap[index] >= SENSOR_OPTIC) && (localSensorMap[index] < SENSOR_TYPE_O2_END)) { snprintf(strSensorValue, 20,"%01.2f, %01.1f mV", pStateReal->lifeData.ppO2Sensor_bar[index], pStateReal->lifeData.sensorVoltage_mV[index]); } - else if(pSettings->ext_sensor_map[index] == SENSOR_CO2M) + else if(localSensorMap[index] == SENSOR_CO2M) { snprintf(strSensorValue, 20,"%ld ppm", pStateReal->lifeData.CO2_data.CO2_ppm); } @@ -260,7 +277,7 @@ } } - if(pSettings->ext_sensor_map[0] == SENSOR_OPTIC) + if(localSensorMap[0] == SENSOR_OPTIC) { strSensorId[0] = TXT_2BYTE; strSensorId[1] = TXT2BYTE_HUDbattery; @@ -272,11 +289,11 @@ } else { - if((pSettings->ppo2sensors_source == O2_SENSOR_SOURCE_ANALOG) || (pSettings->ppo2sensors_source == O2_SENSOR_SOURCE_ANADIG) + if(((pSettings->ppo2sensors_source == O2_SENSOR_SOURCE_ANALOG) || (pSettings->ppo2sensors_source == O2_SENSOR_SOURCE_ANADIG) #ifdef ENABLE_SENTINEL_MODE || (pSettings->ppo2sensors_source == O2_SENSOR_SOURCE_SENTINEL) #endif - ) + ) && ((sensorFilter == SENSOR_NONE) || (sensorFilter == SENSOR_DIGO2))) { strSensorId[0] = TXT_2BYTE; strSensorId[1] = TXT2BYTE_O2Calib; @@ -285,8 +302,16 @@ snprintf(strSensorId, 20,"%d%%", O2_calib_gas); write_label_var( 480, 800, ME_Y_LINE4, &FontT48, strSensorId); } + else if(sensorFilter == SENSOR_CO2) + { + strSensorId[0] = TXT_2BYTE; + strSensorId[1] = TXT2BYTE_O2Calib; + strSensorId[2] = 0; + write_label_var( 30, 340, ME_Y_LINE4, &FontT48, strSensorId); + } + } - if(DataEX_external_ADC_Present()) + if((DataEX_external_ADC_Present()) && (sensorFilter == SENSOR_NONE)) { strSensorId[0] = TXT_2BYTE; strSensorId[1] = TXT2BYTE_SensorDetect; @@ -295,15 +320,15 @@ write_label_var( 30, 340, ME_Y_LINE6, &FontT48, strSensorId); } - if((pSettings->ext_sensor_map[0] >= SENSOR_OPTIC) && (pSettings->ext_sensor_map[0] < SENSOR_MUX)) + if((localSensorMap[0] >= SENSOR_OPTIC) && (localSensorMap[0] < SENSOR_MUX)) { tMenuEdit_refresh_field(StMHARD3_O2_Sensor1); } - if((pSettings->ext_sensor_map[1] >= SENSOR_OPTIC) && (pSettings->ext_sensor_map[1] < SENSOR_MUX)) + if((localSensorMap[1] >= SENSOR_OPTIC) && (localSensorMap[1] < SENSOR_MUX)) { tMenuEdit_refresh_field(StMHARD3_O2_Sensor2); } - if((pSettings->ext_sensor_map[2] >= SENSOR_OPTIC) && (pSettings->ext_sensor_map[2] < SENSOR_MUX)) + if((localSensorMap[2] >= SENSOR_OPTIC) && (localSensorMap[2] < SENSOR_MUX)) { tMenuEdit_refresh_field(StMHARD3_O2_Sensor3); } @@ -319,8 +344,9 @@ } -void openEdit_O2Sensors(void) +void openEdit_Sensors(uint8_t filter) { + static externalInterfaceSensorType lastFilter; SSettings *pSettings = settingsGetPointer(); uint8_t sensorActive[3]; uint8_t index = 0; @@ -330,144 +356,220 @@ set_globalState(StMHARD3_Sensors); resetMenuEdit(CLUT_MenuPageHardware); - for(index = 0; index < 3; index++ ) + if(filter == SENSOR_SEARCH) { - if(pSettings->ppo2sensors_deactivated & (0x01 << index)) - { - sensorActive[index] = 0; - } - else - { - sensorActive[index] = 1; - } - } - - if(((pSettings->ext_sensor_map[0] < SENSOR_OPTIC) || (pSettings->ext_sensor_map[0] >= SENSOR_TYPE_O2_END))) - { - pSettings->ppo2sensors_deactivated |= 1; - if(pSettings->ext_sensor_map[0] == SENSOR_CO2M) - { - write_field_on_off(StMHARD3_O2_Sensor1, 30, 95, ME_Y_LINE1, &FontT48, "", pSettings->co2_sensor_active); - } - } - else - { - write_field_on_off(StMHARD3_O2_Sensor1, 30, 95, ME_Y_LINE1, &FontT48, "", sensorActive[0]); - if(firstSensorId == 0) + for(index = 0; index < 3; index++ ) { - firstSensorId = StMHARD3_O2_Sensor1; - } - } - if(((pSettings->ext_sensor_map[1] < SENSOR_OPTIC) || (pSettings->ext_sensor_map[1] >= SENSOR_TYPE_O2_END))) - { - pSettings->ppo2sensors_deactivated |= 2; - if(pSettings->ext_sensor_map[1] == SENSOR_CO2M) - { - write_field_on_off(StMHARD3_O2_Sensor2, 30, 95, ME_Y_LINE2, &FontT48, "", pSettings->co2_sensor_active); - } - } - else - { - write_field_on_off(StMHARD3_O2_Sensor2, 30, 95, ME_Y_LINE2, &FontT48, "", sensorActive[1]); - if(firstSensorId == 0) - { - firstSensorId = StMHARD3_O2_Sensor2; - } - } - if(((pSettings->ext_sensor_map[2] < SENSOR_OPTIC) || (pSettings->ext_sensor_map[2] >= SENSOR_TYPE_O2_END))) - { - pSettings->ppo2sensors_deactivated |= 4; - if(pSettings->ext_sensor_map[2] == SENSOR_CO2M) - { - write_field_on_off(StMHARD3_O2_Sensor3, 30, 95, ME_Y_LINE3, &FontT48, "", pSettings->co2_sensor_active); + localSensorMap[index] = SENSOR_SEARCH; } } else { - write_field_on_off(StMHARD3_O2_Sensor3, 30, 95, ME_Y_LINE3, &FontT48, "", sensorActive[2]); - if(firstSensorId == 0) + if(filter == SENSOR_END) /* use last filter settings. e.g. for return from submenu */ + { + sensorFilter = lastFilter; + } + else + { + sensorFilter = filter; + } + lastFilter = sensorFilter; + + for(index = 0; index < 3; index++ ) + { + localSensorMap[index] = SENSOR_NONE; + if(pSettings->ppo2sensors_deactivated & (0x01 << index)) + { + sensorActive[index] = 0; + } + else + { + sensorActive[index] = 1; + } + } + if(sensorFilter != SENSOR_CO2) + { + if(((pSettings->ext_sensor_map[0] < SENSOR_OPTIC) || (pSettings->ext_sensor_map[0] >= SENSOR_TYPE_O2_END))) + { + pSettings->ppo2sensors_deactivated |= 1; + if((pSettings->ext_sensor_map[0] == SENSOR_CO2M) && (sensorFilter == SENSOR_NONE)) + { + write_field_on_off(StMHARD3_O2_Sensor1, 30, 95, ME_Y_LINE1, &FontT48, "", pSettings->co2_sensor_active); + } + } + else + { + write_field_on_off(StMHARD3_O2_Sensor1, 30, 95, ME_Y_LINE1, &FontT48, "", sensorActive[0]); + if(firstSensorId == 0) + { + firstSensorId = StMHARD3_O2_Sensor1; + } + } + if(((pSettings->ext_sensor_map[1] < SENSOR_OPTIC) || (pSettings->ext_sensor_map[1] >= SENSOR_TYPE_O2_END))) + { + pSettings->ppo2sensors_deactivated |= 2; + if((pSettings->ext_sensor_map[1] == SENSOR_CO2M) && (sensorFilter == SENSOR_NONE)) + { + write_field_on_off(StMHARD3_O2_Sensor2, 30, 95, ME_Y_LINE2, &FontT48, "", pSettings->co2_sensor_active); + } + } + else + { + write_field_on_off(StMHARD3_O2_Sensor2, 30, 95, ME_Y_LINE2, &FontT48, "", sensorActive[1]); + if(firstSensorId == 0) + { + firstSensorId = StMHARD3_O2_Sensor2; + } + } + if(((pSettings->ext_sensor_map[2] < SENSOR_OPTIC) || (pSettings->ext_sensor_map[2] >= SENSOR_TYPE_O2_END))) + { + pSettings->ppo2sensors_deactivated |= 4; + if((pSettings->ext_sensor_map[2] == SENSOR_CO2M) && (sensorFilter == SENSOR_NONE)) + { + write_field_on_off(StMHARD3_O2_Sensor3, 30, 95, ME_Y_LINE3, &FontT48, "", pSettings->co2_sensor_active); + } + } + else + { + write_field_on_off(StMHARD3_O2_Sensor3, 30, 95, ME_Y_LINE3, &FontT48, "", sensorActive[2]); + if(firstSensorId == 0) + { + firstSensorId = StMHARD3_O2_Sensor3; + } + } + } + else + { + write_field_on_off(StMHARD3_O2_Sensor1, 30, 95, ME_Y_LINE1, &FontT48, "", pSettings->co2_sensor_active); /* only one CO2 supporterd => show at first line */ + firstSensorId = StMHARD3_O2_Sensor1; + } + stateRealGetPointerWrite()->diveSettings.ppo2sensors_deactivated = pSettings->ppo2sensors_deactivated; + + if(settingsGetPointer()->ppo2sensors_deactivated & 1) + sensorActive[0] = 0; + if(settingsGetPointer()->ppo2sensors_deactivated & 2) + sensorActive[1] = 0; + if(settingsGetPointer()->ppo2sensors_deactivated & 4) + sensorActive[2] = 0; + + if (sensorFilter == SENSOR_CO2) + { + write_field_button(StMHARD3_O2_Calibrate, 30, 800, ME_Y_LINE4, &FontT48, ""); + } + else { - firstSensorId = StMHARD3_O2_Sensor3; + if(((pSettings->ppo2sensors_source == O2_SENSOR_SOURCE_ANALOG) || (pSettings->ppo2sensors_source == O2_SENSOR_SOURCE_ANADIG) +#ifdef ENABLE_SENTINEL_MODE + || (settingsGetPointer()->ppo2sensors_source == O2_SENSOR_SOURCE_SENTINEL) +#endif + ) && ((sensorFilter == SENSOR_NONE) || (sensorFilter == SENSOR_DIGO2))) + { + write_label_fix( 30, 800, ME_Y_LINE4, &FontT48, TXT2BYTE_O2Calib); + write_label_var( 400, 800, ME_Y_LINE4, &FontT48, "\016\016 %\017"); + + write_field_toggle(StMHARD3_O2_Calibrate, 400, 800, ME_Y_LINE4, &FontT48, "", 21, 98); + } + } + if((DataEX_external_ADC_Present()) && (sensorFilter == SENSOR_NONE)) + { + text[0] = TXT_2BYTE; + text[1] = TXT2BYTE_SensorDetect; + text[2] = 0; + + write_label_var( 30, 340, ME_Y_LINE6, &FontT48, text); + + write_field_button(StMHARD3_Sensor_Detect, 30, 800, ME_Y_LINE6, &FontT48, text); + } + + switch(sensorFilter) + { + case SENSOR_NONE: + default: if((pSettings->ext_sensor_map[0] >= SENSOR_OPTIC) && (pSettings->ext_sensor_map[0] < SENSOR_MUX)) + { + setEvent(StMHARD3_O2_Sensor1, (uint32_t)OnAction_Sensor1); + localSensorMap[0] =pSettings->ext_sensor_map[0]; + } + if((pSettings->ext_sensor_map[1] >= SENSOR_OPTIC) && (pSettings->ext_sensor_map[1] < SENSOR_MUX)) + { + setEvent(StMHARD3_O2_Sensor2, (uint32_t)OnAction_Sensor2); + localSensorMap[1] =pSettings->ext_sensor_map[1]; + } + if((pSettings->ext_sensor_map[2] >= SENSOR_OPTIC) && (pSettings->ext_sensor_map[2] < SENSOR_MUX)) + { + setEvent(StMHARD3_O2_Sensor3, (uint32_t)OnAction_Sensor3); + localSensorMap[2] =pSettings->ext_sensor_map[2]; + } + break; + case SENSOR_DIGO2: if((pSettings->ext_sensor_map[0] >= SENSOR_OPTIC) && (pSettings->ext_sensor_map[0] < SENSOR_TYPE_O2_END)) + { + setEvent(StMHARD3_O2_Sensor1, (uint32_t)OnAction_Sensor1); + localSensorMap[0] = pSettings->ext_sensor_map[0]; + } + if((pSettings->ext_sensor_map[1] >= SENSOR_OPTIC) && (pSettings->ext_sensor_map[1] < SENSOR_TYPE_O2_END)) + { + setEvent(StMHARD3_O2_Sensor2, (uint32_t)OnAction_Sensor2); + localSensorMap[1] = pSettings->ext_sensor_map[1]; + } + if((pSettings->ext_sensor_map[2] >= SENSOR_OPTIC) && (pSettings->ext_sensor_map[2] < SENSOR_TYPE_O2_END)) + { + setEvent(StMHARD3_O2_Sensor3, (uint32_t)OnAction_Sensor3); + localSensorMap[2] = pSettings->ext_sensor_map[2]; + } + break; + case SENSOR_CO2: setEvent(StMHARD3_O2_Sensor1, (uint32_t)OnAction_Sensor1); + localSensorMap[0] = SENSOR_CO2M; + break; + } + + if (sensorFilter == SENSOR_CO2) + { + setEvent(StMHARD3_O2_Calibrate, (uint32_t)OnAction_CO2_Calibrate); + } + else + { + if((((settingsGetPointer()->ppo2sensors_source == O2_SENSOR_SOURCE_ANALOG) || (settingsGetPointer()->ppo2sensors_source == O2_SENSOR_SOURCE_ANADIG)) + && ((sensorFilter == SENSOR_NONE) || (sensorFilter == SENSOR_DIGO2))) +#ifdef ENABLE_SENTINEL_MODE + || (settingsGetPointer()->ppo2sensors_source == O2_SENSOR_SOURCE_SENTINEL) +#endif + ) + { + setEvent(StMHARD3_O2_Calibrate, (uint32_t)OnAction_O2_Calibrate); + } + } + if((DataEX_external_ADC_Present()) && (sensorFilter == SENSOR_NONE)) + { + setEvent(StMHARD3_Sensor_Detect, (uint32_t)OnAction_Sensor_Detect); + } + write_buttonTextline(TXT2BYTE_ButtonBack,TXT2BYTE_ButtonEnter,TXT2BYTE_ButtonNext); + + switch(firstSensorId) + { + case StMHARD3_O2_Sensor2: tMenuEdit_select(StMHARD3_O2_Sensor2); + break; + case StMHARD3_O2_Sensor3: tMenuEdit_select(StMHARD3_O2_Sensor3); + break; + default: break; } } - - stateRealGetPointerWrite()->diveSettings.ppo2sensors_deactivated = pSettings->ppo2sensors_deactivated; - - if(settingsGetPointer()->ppo2sensors_deactivated & 1) - sensorActive[0] = 0; - if(settingsGetPointer()->ppo2sensors_deactivated & 2) - sensorActive[1] = 0; - if(settingsGetPointer()->ppo2sensors_deactivated & 4) - sensorActive[2] = 0; - - if((pSettings->ppo2sensors_source == O2_SENSOR_SOURCE_ANALOG) || (pSettings->ppo2sensors_source == O2_SENSOR_SOURCE_ANADIG) -#ifdef ENABLE_SENTINEL_MODE - || (settingsGetPointer()->ppo2sensors_source == O2_SENSOR_SOURCE_SENTINEL) -#endif - ) - { - write_label_fix( 30, 800, ME_Y_LINE4, &FontT48, TXT2BYTE_O2Calib); - write_label_var( 400, 800, ME_Y_LINE4, &FontT48, "\016\016 %\017"); - - write_field_toggle(StMHARD3_O2_Calibrate, 400, 800, ME_Y_LINE4, &FontT48, "", 21, 98); - } - - if(DataEX_external_ADC_Present()) - { - text[0] = TXT_2BYTE; - text[1] = TXT2BYTE_SensorDetect; - text[2] = 0; - - write_label_var( 30, 340, ME_Y_LINE6, &FontT48, text); - - write_field_button(StMHARD3_Sensor_Detect, 30, 800, ME_Y_LINE6, &FontT48, text); - } +} - if((pSettings->ext_sensor_map[0] >= SENSOR_OPTIC) && (pSettings->ext_sensor_map[0] < SENSOR_MUX)) - { - setEvent(StMHARD3_O2_Sensor1, (uint32_t)OnAction_Sensor1); - } - if((pSettings->ext_sensor_map[1] >= SENSOR_OPTIC) && (pSettings->ext_sensor_map[1] < SENSOR_MUX)) - { - setEvent(StMHARD3_O2_Sensor2, (uint32_t)OnAction_Sensor2); - } - if((pSettings->ext_sensor_map[2] >= SENSOR_OPTIC) && (pSettings->ext_sensor_map[2] < SENSOR_MUX)) - { - setEvent(StMHARD3_O2_Sensor3, (uint32_t)OnAction_Sensor3); - } +void openEdit_SensorsO2() +{ + openEdit_Sensors(SENSOR_DIGO2); /* used for o2 sensors in general */ +} - if((settingsGetPointer()->ppo2sensors_source == O2_SENSOR_SOURCE_ANALOG) || (settingsGetPointer()->ppo2sensors_source == O2_SENSOR_SOURCE_ANADIG) -#ifdef ENABLE_SENTINEL_MODE - || (settingsGetPointer()->ppo2sensors_source == O2_SENSOR_SOURCE_SENTINEL) -#endif - ) - { - setEvent(StMHARD3_O2_Calibrate, (uint32_t)OnAction_O2_Calibrate); - } - - if(DataEX_external_ADC_Present()) - { - setEvent(StMHARD3_Sensor_Detect, (uint32_t)OnAction_Sensor_Detect); - } - write_buttonTextline(TXT2BYTE_ButtonBack,TXT2BYTE_ButtonEnter,TXT2BYTE_ButtonNext); - - switch(firstSensorId) - { - case StMHARD3_O2_Sensor2: tMenuEdit_select(StMHARD3_O2_Sensor2); - break; - case StMHARD3_O2_Sensor3: tMenuEdit_select(StMHARD3_O2_Sensor3); - break; - default: break; - } +void openEdit_SensorsCO2() +{ + openEdit_Sensors(SENSOR_CO2); } uint8_t OnAction_Sensor1(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) { - const SDiveState *pStateReal = stateRealGetPointer(); - - if((pStateReal->lifeData.extIf_sensor_map[0] == SENSOR_DIGO2M) || (pStateReal->lifeData.extIf_sensor_map[0] == SENSOR_CO2M)) + if((localSensorMap[0] == SENSOR_DIGO2M) || (localSensorMap[0] == SENSOR_CO2M) || (localSensorMap[0] == SENSOR_CO2M)) { + openInfo_SetSensorType(localSensorMap[0]); return EXIT_TO_INFO_SENSOR; } else @@ -490,10 +592,9 @@ uint8_t OnAction_Sensor2(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) { - const SDiveState *pStateReal = stateRealGetPointer(); - - if((pStateReal->lifeData.extIf_sensor_map[1] == SENSOR_DIGO2M) || (pStateReal->lifeData.extIf_sensor_map[1] == SENSOR_CO2M)) + if((localSensorMap[1] == SENSOR_DIGO2M) || (localSensorMap[1] == SENSOR_CO2M)) { + openInfo_SetSensorType(localSensorMap[1]); return EXIT_TO_INFO_SENSOR; } else @@ -515,10 +616,9 @@ uint8_t OnAction_Sensor3(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) { - const SDiveState *pStateReal = stateRealGetPointer(); - - if((pStateReal->lifeData.extIf_sensor_map[2] == SENSOR_DIGO2M) || (pStateReal->lifeData.extIf_sensor_map[2] == SENSOR_CO2M)) + if((localSensorMap[2] == SENSOR_DIGO2M) || (localSensorMap[2] == SENSOR_CO2M)) { + openInfo_SetSensorType(localSensorMap[2]); return EXIT_TO_INFO_SENSOR; } else @@ -539,6 +639,23 @@ } +uint8_t OnAction_CO2_Calibrate(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) +{ + SSettings* pSettings = settingsGetPointer(); + uint8_t index = 0; + + for (index = EXT_INTERFACE_MUX_OFFSET; index < EXT_INTERFACE_SENSOR_CNT; index++) + { + if(pSettings->ext_sensor_map[index] == SENSOR_CO2) break; + } + + if(index != EXT_INTERFACE_SENSOR_CNT) + { + DataEX_setExtInterface_Cmd(EXT_INTERFACE_CO2_CALIB, index); + } + return UNSPECIFIC_RETURN; +} + uint8_t OnAction_O2_Calibrate (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) { uint8_t loop;
