Mercurial > public > ostc4
comparison Discovery/Src/tMenuEditHardware.c @ 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 | 85f7e19c6688 |
| children |
comparison
equal
deleted
inserted
replaced
| 1072:8b97003dbb60 | 1073:734f84b72b30 |
|---|---|
| 39 #include "tInfo.h" | 39 #include "tInfo.h" |
| 40 #include "tInfoLog.h" | 40 #include "tInfoLog.h" |
| 41 #include "tInfoSensor.h" | 41 #include "tInfoSensor.h" |
| 42 #include "tComm.h" | 42 #include "tComm.h" |
| 43 #include "data_exchange_main.h" | 43 #include "data_exchange_main.h" |
| 44 #include "tMenuCvOptionText.h" | |
| 44 | 45 |
| 45 | 46 |
| 46 //extern void tM_build_pages(void); | 47 //extern void tM_build_pages(void); |
| 47 | 48 |
| 48 /* Private function prototypes -----------------------------------------------*/ | 49 /* Private function prototypes -----------------------------------------------*/ |
| 49 void openEdit_Bluetooth(void); | 50 void openEdit_Bluetooth(void); |
| 50 void openEdit_O2Sensors(void); | 51 void openEdit_Sensors(uint8_t filter); |
| 51 void openEdit_Brightness(void); | 52 void openEdit_Brightness(void); |
| 52 //void openEdit_Luftintegration(void); | 53 //void openEdit_Luftintegration(void); |
| 53 void openEdit_ButtonSens(void); | 54 void openEdit_ButtonSens(void); |
| 54 void openEdit_WarningBuz(void); | 55 void openEdit_WarningBuz(void); |
| 55 | 56 |
| 57 /* Announced function prototypes -----------------------------------------------*/ | 58 /* Announced function prototypes -----------------------------------------------*/ |
| 58 uint8_t OnAction_Sensor1 (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); | 59 uint8_t OnAction_Sensor1 (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); | 60 uint8_t OnAction_Sensor2 (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); | 61 uint8_t OnAction_Sensor3 (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); | 62 uint8_t OnAction_O2_Calibrate (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); |
| 63 uint8_t OnAction_CO2_Calibrate (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); | 64 uint8_t OnAction_Sensor_Info (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); | 65 uint8_t OnAction_Sensor_Detect (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); | 66 uint8_t OnAction_Button (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); | 67 uint8_t OnAction_ButtonBalance (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); | 68 uint8_t OnAction_ButtonLock (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); |
| 71 #define O2_CALIB_FRACTION_AIR (0.209F) | 73 #define O2_CALIB_FRACTION_AIR (0.209F) |
| 72 #define O2_CALIB_FRACTION_O2 (0.98F) | 74 #define O2_CALIB_FRACTION_O2 (0.98F) |
| 73 | 75 |
| 74 static uint8_t O2_calib_gas = 21; | 76 static uint8_t O2_calib_gas = 21; |
| 75 | 77 |
| 78 static externalInterfaceSensorType sensorFilter = SENSOR_NONE; /* used to have only a specific type of sensor in the sensor list view */ | |
| 79 static externalInterfaceSensorType localSensorMap[3]; /* reduce the complete external sensor map to the three entries which are displayed by the menu */ | |
| 80 | |
| 76 void openEdit_Hardware(uint8_t line) | 81 void openEdit_Hardware(uint8_t line) |
| 77 { | 82 { |
| 78 set_globalState_Menu_Line(line); | 83 set_globalState_Menu_Line(line); |
| 79 | 84 |
| 80 switch(line) | 85 switch(line) |
| 81 { | 86 { |
| 82 case 1: | 87 case 1: |
| 83 default: openEdit_Bluetooth(); | 88 default: openEdit_Bluetooth(); |
| 84 break; | 89 break; |
| 85 case 2: openEdit_O2Sensors(); | 90 case 2: openEdit_Sensors(SENSOR_NONE); |
| 86 break; | 91 break; |
| 87 case 3: openEdit_Brightness(); | 92 case 3: openEdit_Brightness(); |
| 88 break; | 93 break; |
| 89 case 4: resetMenuEdit(CLUT_MenuPageHardware); | 94 case 4: resetMenuEdit(CLUT_MenuPageHardware); |
| 90 openEdit_ButtonSens(); | 95 openEdit_ButtonSens(); |
| 141 char strSensorId[20]; | 146 char strSensorId[20]; |
| 142 char strSensorValue[20]; | 147 char strSensorValue[20]; |
| 143 uint16_t y_line; | 148 uint16_t y_line; |
| 144 uint8_t index = 0; | 149 uint8_t index = 0; |
| 145 | 150 |
| 151 | |
| 146 const SDiveState *pStateReal = stateRealGetPointer(); | 152 const SDiveState *pStateReal = stateRealGetPointer(); |
| 147 SSettings *pSettings = settingsGetPointer(); | 153 SSettings *pSettings = settingsGetPointer(); |
| 148 | 154 |
| 149 if(memcmp(pSettings->ext_sensor_map, pStateReal->lifeData.extIf_sensor_map, EXT_INTERFACE_SENSOR_CNT) != 0) | 155 if((memcmp(pSettings->ext_sensor_map, pStateReal->lifeData.extIf_sensor_map, EXT_INTERFACE_SENSOR_CNT) != 0) && (sensorFilter == SENSOR_NONE)) |
| 150 { | 156 { |
| 151 memcpy(pSettings->ext_sensor_map, pStateReal->lifeData.extIf_sensor_map, EXT_INTERFACE_SENSOR_CNT); | 157 memcpy(pSettings->ext_sensor_map, pStateReal->lifeData.extIf_sensor_map, EXT_INTERFACE_SENSOR_CNT); |
| 152 pSettings->ppo2sensors_deactivated = 0x0; /* deactivation will be done by openEditO2Sensor if need */ | 158 pSettings->ppo2sensors_deactivated = 0x0; /* deactivation will be done by openEditO2Sensor if need */ |
| 153 pSettings->co2_sensor_active = 0; | 159 pSettings->co2_sensor_active = 0; |
| 154 pSettings->ppo2sensors_source = O2_SENSOR_SOURCE_OPTIC; | 160 pSettings->ppo2sensors_source = O2_SENSOR_SOURCE_OPTIC; |
| 186 #endif | 192 #endif |
| 187 default: | 193 default: |
| 188 break; | 194 break; |
| 189 } | 195 } |
| 190 } | 196 } |
| 191 openEdit_O2Sensors(); | 197 if(pSettings->ext_sensor_map[0] != SENSOR_SEARCH) |
| 198 { | |
| 199 index = tMCvOptText_BuildDynamicContentList(); | |
| 200 tM_setLinesForPage(StMOption, index); | |
| 201 openEdit_Sensors(SENSOR_NONE); | |
| 202 } | |
| 203 else | |
| 204 { | |
| 205 openEdit_Sensors(SENSOR_SEARCH); | |
| 206 } | |
| 207 | |
| 208 | |
| 192 } | 209 } |
| 193 | 210 |
| 194 strSensorId[0] = '\001'; | 211 strSensorId[0] = '\001'; |
| 195 strSensorId[1] = TXT_o2Sensors; | 212 strSensorId[1] = TXT_o2Sensors; |
| 196 strSensorId[2] = 0; | 213 strSensorId[2] = 0; |
| 208 { | 225 { |
| 209 strSensorId[3] = TXT_2BYTE; | 226 strSensorId[3] = TXT_2BYTE; |
| 210 strSensorId[4] = 'X'; | 227 strSensorId[4] = 'X'; |
| 211 strSensorId[5] = '1' + index; | 228 strSensorId[5] = '1' + index; |
| 212 | 229 |
| 213 switch(pSettings->ext_sensor_map[index]) | 230 switch(localSensorMap[index]) |
| 214 { | 231 { |
| 215 case SENSOR_SEARCH: strSensorId[1] = TXT2BYTE_SensorDetect; | 232 case SENSOR_SEARCH: strSensorId[1] = TXT2BYTE_SensorDetect; |
| 216 strSensorId[2] = 0; | 233 strSensorId[2] = 0; |
| 217 strSensorId[4] = 0; | 234 strSensorId[4] = 0; |
| 218 break; | 235 break; |
| 222 break; | 239 break; |
| 223 case SENSOR_DIGO2: | 240 case SENSOR_DIGO2: |
| 224 case SENSOR_DIGO2M: strSensorId[4] = TXT2BYTE_O2IFDigital; | 241 case SENSOR_DIGO2M: strSensorId[4] = TXT2BYTE_O2IFDigital; |
| 225 break; | 242 break; |
| 226 case SENSOR_CO2: | 243 case SENSOR_CO2: |
| 227 case SENSOR_CO2M: strSensorId[3] = 'C'; | 244 case SENSOR_CO2M: strSensorId[3] = 'C'; |
| 228 strSensorId[4] = 'O'; | 245 strSensorId[4] = 'O'; |
| 229 strSensorId[5] = '2'; | 246 strSensorId[5] = '2'; |
| 230 break; | 247 break; |
| 231 case SENSOR_SENTINEL: | 248 case SENSOR_SENTINEL: |
| 232 case SENSOR_SENTINELM: strSensorId[3] = 'S'; | 249 case SENSOR_SENTINELM: strSensorId[3] = 'S'; |
| 233 strSensorId[4] = 'e'; | 250 strSensorId[4] = 'e'; |
| 234 break; | 251 break; |
| 235 case SENSOR_GNSS: | 252 case SENSOR_GNSS: |
| 236 case SENSOR_GNSSM: strSensorId[3] = 'G'; | 253 case SENSOR_GNSSM: strSensorId[3] = 'G'; |
| 237 strSensorId[4] = 'N'; | 254 strSensorId[4] = 'N'; |
| 238 break; | 255 break; |
| 243 if(strSensorId[4] != 'X') | 260 if(strSensorId[4] != 'X') |
| 244 { | 261 { |
| 245 write_label_var( 96, 340, ME_Y_LINE1 + (index * ME_Y_LINE_STEP), &FontT48, strSensorId); | 262 write_label_var( 96, 340, ME_Y_LINE1 + (index * ME_Y_LINE_STEP), &FontT48, strSensorId); |
| 246 } | 263 } |
| 247 strSensorValue[0] = 0; | 264 strSensorValue[0] = 0; |
| 248 if((pSettings->ext_sensor_map[index] >= SENSOR_OPTIC) && (pSettings->ext_sensor_map[index] < SENSOR_TYPE_O2_END)) | 265 if((localSensorMap[index] >= SENSOR_OPTIC) && (localSensorMap[index] < SENSOR_TYPE_O2_END)) |
| 249 { | 266 { |
| 250 snprintf(strSensorValue, 20,"%01.2f, %01.1f mV", pStateReal->lifeData.ppO2Sensor_bar[index], pStateReal->lifeData.sensorVoltage_mV[index]); | 267 snprintf(strSensorValue, 20,"%01.2f, %01.1f mV", pStateReal->lifeData.ppO2Sensor_bar[index], pStateReal->lifeData.sensorVoltage_mV[index]); |
| 251 } | 268 } |
| 252 else if(pSettings->ext_sensor_map[index] == SENSOR_CO2M) | 269 else if(localSensorMap[index] == SENSOR_CO2M) |
| 253 { | 270 { |
| 254 snprintf(strSensorValue, 20,"%ld ppm", pStateReal->lifeData.CO2_data.CO2_ppm); | 271 snprintf(strSensorValue, 20,"%ld ppm", pStateReal->lifeData.CO2_data.CO2_ppm); |
| 255 } | 272 } |
| 256 y_line = ME_Y_LINE1 + (index * ME_Y_LINE_STEP); | 273 y_line = ME_Y_LINE1 + (index * ME_Y_LINE_STEP); |
| 257 if(strSensorValue[0] != 0) | 274 if(strSensorValue[0] != 0) |
| 258 { | 275 { |
| 259 write_label_var( 480, 800, y_line, &FontT48, strSensorValue); | 276 write_label_var( 480, 800, y_line, &FontT48, strSensorValue); |
| 260 } | 277 } |
| 261 } | 278 } |
| 262 | 279 |
| 263 if(pSettings->ext_sensor_map[0] == SENSOR_OPTIC) | 280 if(localSensorMap[0] == SENSOR_OPTIC) |
| 264 { | 281 { |
| 265 strSensorId[0] = TXT_2BYTE; | 282 strSensorId[0] = TXT_2BYTE; |
| 266 strSensorId[1] = TXT2BYTE_HUDbattery; | 283 strSensorId[1] = TXT2BYTE_HUDbattery; |
| 267 strSensorId[2] = 0; | 284 strSensorId[2] = 0; |
| 268 write_label_var( 30, 340, ME_Y_LINE4, &FontT48, strSensorId); | 285 write_label_var( 30, 340, ME_Y_LINE4, &FontT48, strSensorId); |
| 270 snprintf(strSensorId, 20,"%01.3fV", get_HUD_battery_voltage_V()); | 287 snprintf(strSensorId, 20,"%01.3fV", get_HUD_battery_voltage_V()); |
| 271 write_label_var( 480, 800, ME_Y_LINE4, &FontT48, strSensorId); | 288 write_label_var( 480, 800, ME_Y_LINE4, &FontT48, strSensorId); |
| 272 } | 289 } |
| 273 else | 290 else |
| 274 { | 291 { |
| 275 if((pSettings->ppo2sensors_source == O2_SENSOR_SOURCE_ANALOG) || (pSettings->ppo2sensors_source == O2_SENSOR_SOURCE_ANADIG) | 292 if(((pSettings->ppo2sensors_source == O2_SENSOR_SOURCE_ANALOG) || (pSettings->ppo2sensors_source == O2_SENSOR_SOURCE_ANADIG) |
| 276 #ifdef ENABLE_SENTINEL_MODE | 293 #ifdef ENABLE_SENTINEL_MODE |
| 277 || (pSettings->ppo2sensors_source == O2_SENSOR_SOURCE_SENTINEL) | 294 || (pSettings->ppo2sensors_source == O2_SENSOR_SOURCE_SENTINEL) |
| 278 #endif | 295 #endif |
| 279 ) | 296 ) && ((sensorFilter == SENSOR_NONE) || (sensorFilter == SENSOR_DIGO2))) |
| 280 { | 297 { |
| 281 strSensorId[0] = TXT_2BYTE; | 298 strSensorId[0] = TXT_2BYTE; |
| 282 strSensorId[1] = TXT2BYTE_O2Calib; | 299 strSensorId[1] = TXT2BYTE_O2Calib; |
| 283 strSensorId[2] = 0; | 300 strSensorId[2] = 0; |
| 284 write_label_var( 30, 340, ME_Y_LINE4, &FontT48, strSensorId); | 301 write_label_var( 30, 340, ME_Y_LINE4, &FontT48, strSensorId); |
| 285 snprintf(strSensorId, 20,"%d%%", O2_calib_gas); | 302 snprintf(strSensorId, 20,"%d%%", O2_calib_gas); |
| 286 write_label_var( 480, 800, ME_Y_LINE4, &FontT48, strSensorId); | 303 write_label_var( 480, 800, ME_Y_LINE4, &FontT48, strSensorId); |
| 287 } | 304 } |
| 288 } | 305 else if(sensorFilter == SENSOR_CO2) |
| 289 if(DataEX_external_ADC_Present()) | 306 { |
| 307 strSensorId[0] = TXT_2BYTE; | |
| 308 strSensorId[1] = TXT2BYTE_O2Calib; | |
| 309 strSensorId[2] = 0; | |
| 310 write_label_var( 30, 340, ME_Y_LINE4, &FontT48, strSensorId); | |
| 311 } | |
| 312 | |
| 313 } | |
| 314 if((DataEX_external_ADC_Present()) && (sensorFilter == SENSOR_NONE)) | |
| 290 { | 315 { |
| 291 strSensorId[0] = TXT_2BYTE; | 316 strSensorId[0] = TXT_2BYTE; |
| 292 strSensorId[1] = TXT2BYTE_SensorDetect; | 317 strSensorId[1] = TXT2BYTE_SensorDetect; |
| 293 strSensorId[2] = 0; | 318 strSensorId[2] = 0; |
| 294 | 319 |
| 295 write_label_var( 30, 340, ME_Y_LINE6, &FontT48, strSensorId); | 320 write_label_var( 30, 340, ME_Y_LINE6, &FontT48, strSensorId); |
| 296 } | 321 } |
| 297 | 322 |
| 298 if((pSettings->ext_sensor_map[0] >= SENSOR_OPTIC) && (pSettings->ext_sensor_map[0] < SENSOR_MUX)) | 323 if((localSensorMap[0] >= SENSOR_OPTIC) && (localSensorMap[0] < SENSOR_MUX)) |
| 299 { | 324 { |
| 300 tMenuEdit_refresh_field(StMHARD3_O2_Sensor1); | 325 tMenuEdit_refresh_field(StMHARD3_O2_Sensor1); |
| 301 } | 326 } |
| 302 if((pSettings->ext_sensor_map[1] >= SENSOR_OPTIC) && (pSettings->ext_sensor_map[1] < SENSOR_MUX)) | 327 if((localSensorMap[1] >= SENSOR_OPTIC) && (localSensorMap[1] < SENSOR_MUX)) |
| 303 { | 328 { |
| 304 tMenuEdit_refresh_field(StMHARD3_O2_Sensor2); | 329 tMenuEdit_refresh_field(StMHARD3_O2_Sensor2); |
| 305 } | 330 } |
| 306 if((pSettings->ext_sensor_map[2] >= SENSOR_OPTIC) && (pSettings->ext_sensor_map[2] < SENSOR_MUX)) | 331 if((localSensorMap[2] >= SENSOR_OPTIC) && (localSensorMap[2] < SENSOR_MUX)) |
| 307 { | 332 { |
| 308 tMenuEdit_refresh_field(StMHARD3_O2_Sensor3); | 333 tMenuEdit_refresh_field(StMHARD3_O2_Sensor3); |
| 309 } | 334 } |
| 310 | 335 |
| 311 if(get_globalState() == StMHARD3_O2_Calibrate) | 336 if(get_globalState() == StMHARD3_O2_Calibrate) |
| 317 write_buttonTextline(TXT2BYTE_ButtonBack,TXT2BYTE_ButtonEnter,TXT2BYTE_ButtonNext); | 342 write_buttonTextline(TXT2BYTE_ButtonBack,TXT2BYTE_ButtonEnter,TXT2BYTE_ButtonNext); |
| 318 } | 343 } |
| 319 } | 344 } |
| 320 | 345 |
| 321 | 346 |
| 322 void openEdit_O2Sensors(void) | 347 void openEdit_Sensors(uint8_t filter) |
| 323 { | 348 { |
| 349 static externalInterfaceSensorType lastFilter; | |
| 324 SSettings *pSettings = settingsGetPointer(); | 350 SSettings *pSettings = settingsGetPointer(); |
| 325 uint8_t sensorActive[3]; | 351 uint8_t sensorActive[3]; |
| 326 uint8_t index = 0; | 352 uint8_t index = 0; |
| 327 char text[3]; | 353 char text[3]; |
| 328 uint32_t firstSensorId = 0; | 354 uint32_t firstSensorId = 0; |
| 329 | 355 |
| 330 set_globalState(StMHARD3_Sensors); | 356 set_globalState(StMHARD3_Sensors); |
| 331 resetMenuEdit(CLUT_MenuPageHardware); | 357 resetMenuEdit(CLUT_MenuPageHardware); |
| 332 | 358 |
| 333 for(index = 0; index < 3; index++ ) | 359 if(filter == SENSOR_SEARCH) |
| 334 { | 360 { |
| 335 if(pSettings->ppo2sensors_deactivated & (0x01 << index)) | 361 for(index = 0; index < 3; index++ ) |
| 336 { | 362 { |
| 337 sensorActive[index] = 0; | 363 localSensorMap[index] = SENSOR_SEARCH; |
| 364 } | |
| 365 } | |
| 366 else | |
| 367 { | |
| 368 if(filter == SENSOR_END) /* use last filter settings. e.g. for return from submenu */ | |
| 369 { | |
| 370 sensorFilter = lastFilter; | |
| 338 } | 371 } |
| 339 else | 372 else |
| 340 { | 373 { |
| 341 sensorActive[index] = 1; | 374 sensorFilter = filter; |
| 342 } | 375 } |
| 343 } | 376 lastFilter = sensorFilter; |
| 344 | 377 |
| 345 if(((pSettings->ext_sensor_map[0] < SENSOR_OPTIC) || (pSettings->ext_sensor_map[0] >= SENSOR_TYPE_O2_END))) | 378 for(index = 0; index < 3; index++ ) |
| 346 { | 379 { |
| 347 pSettings->ppo2sensors_deactivated |= 1; | 380 localSensorMap[index] = SENSOR_NONE; |
| 348 if(pSettings->ext_sensor_map[0] == SENSOR_CO2M) | 381 if(pSettings->ppo2sensors_deactivated & (0x01 << index)) |
| 349 { | 382 { |
| 350 write_field_on_off(StMHARD3_O2_Sensor1, 30, 95, ME_Y_LINE1, &FontT48, "", pSettings->co2_sensor_active); | 383 sensorActive[index] = 0; |
| 351 } | 384 } |
| 352 } | 385 else |
| 353 else | 386 { |
| 354 { | 387 sensorActive[index] = 1; |
| 355 write_field_on_off(StMHARD3_O2_Sensor1, 30, 95, ME_Y_LINE1, &FontT48, "", sensorActive[0]); | 388 } |
| 356 if(firstSensorId == 0) | 389 } |
| 357 { | 390 if(sensorFilter != SENSOR_CO2) |
| 391 { | |
| 392 if(((pSettings->ext_sensor_map[0] < SENSOR_OPTIC) || (pSettings->ext_sensor_map[0] >= SENSOR_TYPE_O2_END))) | |
| 393 { | |
| 394 pSettings->ppo2sensors_deactivated |= 1; | |
| 395 if((pSettings->ext_sensor_map[0] == SENSOR_CO2M) && (sensorFilter == SENSOR_NONE)) | |
| 396 { | |
| 397 write_field_on_off(StMHARD3_O2_Sensor1, 30, 95, ME_Y_LINE1, &FontT48, "", pSettings->co2_sensor_active); | |
| 398 } | |
| 399 } | |
| 400 else | |
| 401 { | |
| 402 write_field_on_off(StMHARD3_O2_Sensor1, 30, 95, ME_Y_LINE1, &FontT48, "", sensorActive[0]); | |
| 403 if(firstSensorId == 0) | |
| 404 { | |
| 405 firstSensorId = StMHARD3_O2_Sensor1; | |
| 406 } | |
| 407 } | |
| 408 if(((pSettings->ext_sensor_map[1] < SENSOR_OPTIC) || (pSettings->ext_sensor_map[1] >= SENSOR_TYPE_O2_END))) | |
| 409 { | |
| 410 pSettings->ppo2sensors_deactivated |= 2; | |
| 411 if((pSettings->ext_sensor_map[1] == SENSOR_CO2M) && (sensorFilter == SENSOR_NONE)) | |
| 412 { | |
| 413 write_field_on_off(StMHARD3_O2_Sensor2, 30, 95, ME_Y_LINE2, &FontT48, "", pSettings->co2_sensor_active); | |
| 414 } | |
| 415 } | |
| 416 else | |
| 417 { | |
| 418 write_field_on_off(StMHARD3_O2_Sensor2, 30, 95, ME_Y_LINE2, &FontT48, "", sensorActive[1]); | |
| 419 if(firstSensorId == 0) | |
| 420 { | |
| 421 firstSensorId = StMHARD3_O2_Sensor2; | |
| 422 } | |
| 423 } | |
| 424 if(((pSettings->ext_sensor_map[2] < SENSOR_OPTIC) || (pSettings->ext_sensor_map[2] >= SENSOR_TYPE_O2_END))) | |
| 425 { | |
| 426 pSettings->ppo2sensors_deactivated |= 4; | |
| 427 if((pSettings->ext_sensor_map[2] == SENSOR_CO2M) && (sensorFilter == SENSOR_NONE)) | |
| 428 { | |
| 429 write_field_on_off(StMHARD3_O2_Sensor3, 30, 95, ME_Y_LINE3, &FontT48, "", pSettings->co2_sensor_active); | |
| 430 } | |
| 431 } | |
| 432 else | |
| 433 { | |
| 434 write_field_on_off(StMHARD3_O2_Sensor3, 30, 95, ME_Y_LINE3, &FontT48, "", sensorActive[2]); | |
| 435 if(firstSensorId == 0) | |
| 436 { | |
| 437 firstSensorId = StMHARD3_O2_Sensor3; | |
| 438 } | |
| 439 } | |
| 440 } | |
| 441 else | |
| 442 { | |
| 443 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 */ | |
| 358 firstSensorId = StMHARD3_O2_Sensor1; | 444 firstSensorId = StMHARD3_O2_Sensor1; |
| 359 } | 445 } |
| 360 } | 446 stateRealGetPointerWrite()->diveSettings.ppo2sensors_deactivated = pSettings->ppo2sensors_deactivated; |
| 361 if(((pSettings->ext_sensor_map[1] < SENSOR_OPTIC) || (pSettings->ext_sensor_map[1] >= SENSOR_TYPE_O2_END))) | 447 |
| 362 { | 448 if(settingsGetPointer()->ppo2sensors_deactivated & 1) |
| 363 pSettings->ppo2sensors_deactivated |= 2; | 449 sensorActive[0] = 0; |
| 364 if(pSettings->ext_sensor_map[1] == SENSOR_CO2M) | 450 if(settingsGetPointer()->ppo2sensors_deactivated & 2) |
| 365 { | 451 sensorActive[1] = 0; |
| 366 write_field_on_off(StMHARD3_O2_Sensor2, 30, 95, ME_Y_LINE2, &FontT48, "", pSettings->co2_sensor_active); | 452 if(settingsGetPointer()->ppo2sensors_deactivated & 4) |
| 367 } | 453 sensorActive[2] = 0; |
| 368 } | 454 |
| 369 else | 455 if (sensorFilter == SENSOR_CO2) |
| 370 { | 456 { |
| 371 write_field_on_off(StMHARD3_O2_Sensor2, 30, 95, ME_Y_LINE2, &FontT48, "", sensorActive[1]); | 457 write_field_button(StMHARD3_O2_Calibrate, 30, 800, ME_Y_LINE4, &FontT48, ""); |
| 372 if(firstSensorId == 0) | 458 } |
| 373 { | 459 else |
| 374 firstSensorId = StMHARD3_O2_Sensor2; | 460 { |
| 375 } | 461 if(((pSettings->ppo2sensors_source == O2_SENSOR_SOURCE_ANALOG) || (pSettings->ppo2sensors_source == O2_SENSOR_SOURCE_ANADIG) |
| 376 } | |
| 377 if(((pSettings->ext_sensor_map[2] < SENSOR_OPTIC) || (pSettings->ext_sensor_map[2] >= SENSOR_TYPE_O2_END))) | |
| 378 { | |
| 379 pSettings->ppo2sensors_deactivated |= 4; | |
| 380 if(pSettings->ext_sensor_map[2] == SENSOR_CO2M) | |
| 381 { | |
| 382 write_field_on_off(StMHARD3_O2_Sensor3, 30, 95, ME_Y_LINE3, &FontT48, "", pSettings->co2_sensor_active); | |
| 383 } | |
| 384 } | |
| 385 else | |
| 386 { | |
| 387 write_field_on_off(StMHARD3_O2_Sensor3, 30, 95, ME_Y_LINE3, &FontT48, "", sensorActive[2]); | |
| 388 if(firstSensorId == 0) | |
| 389 { | |
| 390 firstSensorId = StMHARD3_O2_Sensor3; | |
| 391 } | |
| 392 } | |
| 393 | |
| 394 stateRealGetPointerWrite()->diveSettings.ppo2sensors_deactivated = pSettings->ppo2sensors_deactivated; | |
| 395 | |
| 396 if(settingsGetPointer()->ppo2sensors_deactivated & 1) | |
| 397 sensorActive[0] = 0; | |
| 398 if(settingsGetPointer()->ppo2sensors_deactivated & 2) | |
| 399 sensorActive[1] = 0; | |
| 400 if(settingsGetPointer()->ppo2sensors_deactivated & 4) | |
| 401 sensorActive[2] = 0; | |
| 402 | |
| 403 if((pSettings->ppo2sensors_source == O2_SENSOR_SOURCE_ANALOG) || (pSettings->ppo2sensors_source == O2_SENSOR_SOURCE_ANADIG) | |
| 404 #ifdef ENABLE_SENTINEL_MODE | 462 #ifdef ENABLE_SENTINEL_MODE |
| 405 || (settingsGetPointer()->ppo2sensors_source == O2_SENSOR_SOURCE_SENTINEL) | 463 || (settingsGetPointer()->ppo2sensors_source == O2_SENSOR_SOURCE_SENTINEL) |
| 406 #endif | 464 #endif |
| 407 ) | 465 ) && ((sensorFilter == SENSOR_NONE) || (sensorFilter == SENSOR_DIGO2))) |
| 408 { | 466 { |
| 409 write_label_fix( 30, 800, ME_Y_LINE4, &FontT48, TXT2BYTE_O2Calib); | 467 write_label_fix( 30, 800, ME_Y_LINE4, &FontT48, TXT2BYTE_O2Calib); |
| 410 write_label_var( 400, 800, ME_Y_LINE4, &FontT48, "\016\016 %\017"); | 468 write_label_var( 400, 800, ME_Y_LINE4, &FontT48, "\016\016 %\017"); |
| 411 | 469 |
| 412 write_field_toggle(StMHARD3_O2_Calibrate, 400, 800, ME_Y_LINE4, &FontT48, "", 21, 98); | 470 write_field_toggle(StMHARD3_O2_Calibrate, 400, 800, ME_Y_LINE4, &FontT48, "", 21, 98); |
| 413 } | 471 } |
| 414 | 472 } |
| 415 if(DataEX_external_ADC_Present()) | 473 if((DataEX_external_ADC_Present()) && (sensorFilter == SENSOR_NONE)) |
| 416 { | 474 { |
| 417 text[0] = TXT_2BYTE; | 475 text[0] = TXT_2BYTE; |
| 418 text[1] = TXT2BYTE_SensorDetect; | 476 text[1] = TXT2BYTE_SensorDetect; |
| 419 text[2] = 0; | 477 text[2] = 0; |
| 420 | 478 |
| 421 write_label_var( 30, 340, ME_Y_LINE6, &FontT48, text); | 479 write_label_var( 30, 340, ME_Y_LINE6, &FontT48, text); |
| 422 | 480 |
| 423 write_field_button(StMHARD3_Sensor_Detect, 30, 800, ME_Y_LINE6, &FontT48, text); | 481 write_field_button(StMHARD3_Sensor_Detect, 30, 800, ME_Y_LINE6, &FontT48, text); |
| 424 } | 482 } |
| 425 | 483 |
| 426 if((pSettings->ext_sensor_map[0] >= SENSOR_OPTIC) && (pSettings->ext_sensor_map[0] < SENSOR_MUX)) | 484 switch(sensorFilter) |
| 427 { | 485 { |
| 428 setEvent(StMHARD3_O2_Sensor1, (uint32_t)OnAction_Sensor1); | 486 case SENSOR_NONE: |
| 429 } | 487 default: if((pSettings->ext_sensor_map[0] >= SENSOR_OPTIC) && (pSettings->ext_sensor_map[0] < SENSOR_MUX)) |
| 430 if((pSettings->ext_sensor_map[1] >= SENSOR_OPTIC) && (pSettings->ext_sensor_map[1] < SENSOR_MUX)) | 488 { |
| 431 { | 489 setEvent(StMHARD3_O2_Sensor1, (uint32_t)OnAction_Sensor1); |
| 432 setEvent(StMHARD3_O2_Sensor2, (uint32_t)OnAction_Sensor2); | 490 localSensorMap[0] =pSettings->ext_sensor_map[0]; |
| 433 } | 491 } |
| 434 if((pSettings->ext_sensor_map[2] >= SENSOR_OPTIC) && (pSettings->ext_sensor_map[2] < SENSOR_MUX)) | 492 if((pSettings->ext_sensor_map[1] >= SENSOR_OPTIC) && (pSettings->ext_sensor_map[1] < SENSOR_MUX)) |
| 435 { | 493 { |
| 436 setEvent(StMHARD3_O2_Sensor3, (uint32_t)OnAction_Sensor3); | 494 setEvent(StMHARD3_O2_Sensor2, (uint32_t)OnAction_Sensor2); |
| 437 } | 495 localSensorMap[1] =pSettings->ext_sensor_map[1]; |
| 438 | 496 } |
| 439 if((settingsGetPointer()->ppo2sensors_source == O2_SENSOR_SOURCE_ANALOG) || (settingsGetPointer()->ppo2sensors_source == O2_SENSOR_SOURCE_ANADIG) | 497 if((pSettings->ext_sensor_map[2] >= SENSOR_OPTIC) && (pSettings->ext_sensor_map[2] < SENSOR_MUX)) |
| 498 { | |
| 499 setEvent(StMHARD3_O2_Sensor3, (uint32_t)OnAction_Sensor3); | |
| 500 localSensorMap[2] =pSettings->ext_sensor_map[2]; | |
| 501 } | |
| 502 break; | |
| 503 case SENSOR_DIGO2: if((pSettings->ext_sensor_map[0] >= SENSOR_OPTIC) && (pSettings->ext_sensor_map[0] < SENSOR_TYPE_O2_END)) | |
| 504 { | |
| 505 setEvent(StMHARD3_O2_Sensor1, (uint32_t)OnAction_Sensor1); | |
| 506 localSensorMap[0] = pSettings->ext_sensor_map[0]; | |
| 507 } | |
| 508 if((pSettings->ext_sensor_map[1] >= SENSOR_OPTIC) && (pSettings->ext_sensor_map[1] < SENSOR_TYPE_O2_END)) | |
| 509 { | |
| 510 setEvent(StMHARD3_O2_Sensor2, (uint32_t)OnAction_Sensor2); | |
| 511 localSensorMap[1] = pSettings->ext_sensor_map[1]; | |
| 512 } | |
| 513 if((pSettings->ext_sensor_map[2] >= SENSOR_OPTIC) && (pSettings->ext_sensor_map[2] < SENSOR_TYPE_O2_END)) | |
| 514 { | |
| 515 setEvent(StMHARD3_O2_Sensor3, (uint32_t)OnAction_Sensor3); | |
| 516 localSensorMap[2] = pSettings->ext_sensor_map[2]; | |
| 517 } | |
| 518 break; | |
| 519 case SENSOR_CO2: setEvent(StMHARD3_O2_Sensor1, (uint32_t)OnAction_Sensor1); | |
| 520 localSensorMap[0] = SENSOR_CO2M; | |
| 521 break; | |
| 522 } | |
| 523 | |
| 524 if (sensorFilter == SENSOR_CO2) | |
| 525 { | |
| 526 setEvent(StMHARD3_O2_Calibrate, (uint32_t)OnAction_CO2_Calibrate); | |
| 527 } | |
| 528 else | |
| 529 { | |
| 530 if((((settingsGetPointer()->ppo2sensors_source == O2_SENSOR_SOURCE_ANALOG) || (settingsGetPointer()->ppo2sensors_source == O2_SENSOR_SOURCE_ANADIG)) | |
| 531 && ((sensorFilter == SENSOR_NONE) || (sensorFilter == SENSOR_DIGO2))) | |
| 440 #ifdef ENABLE_SENTINEL_MODE | 532 #ifdef ENABLE_SENTINEL_MODE |
| 441 || (settingsGetPointer()->ppo2sensors_source == O2_SENSOR_SOURCE_SENTINEL) | 533 || (settingsGetPointer()->ppo2sensors_source == O2_SENSOR_SOURCE_SENTINEL) |
| 442 #endif | 534 #endif |
| 443 ) | 535 ) |
| 444 { | 536 { |
| 445 setEvent(StMHARD3_O2_Calibrate, (uint32_t)OnAction_O2_Calibrate); | 537 setEvent(StMHARD3_O2_Calibrate, (uint32_t)OnAction_O2_Calibrate); |
| 446 } | 538 } |
| 447 | 539 } |
| 448 if(DataEX_external_ADC_Present()) | 540 if((DataEX_external_ADC_Present()) && (sensorFilter == SENSOR_NONE)) |
| 449 { | 541 { |
| 450 setEvent(StMHARD3_Sensor_Detect, (uint32_t)OnAction_Sensor_Detect); | 542 setEvent(StMHARD3_Sensor_Detect, (uint32_t)OnAction_Sensor_Detect); |
| 451 } | 543 } |
| 452 write_buttonTextline(TXT2BYTE_ButtonBack,TXT2BYTE_ButtonEnter,TXT2BYTE_ButtonNext); | 544 write_buttonTextline(TXT2BYTE_ButtonBack,TXT2BYTE_ButtonEnter,TXT2BYTE_ButtonNext); |
| 453 | 545 |
| 454 switch(firstSensorId) | 546 switch(firstSensorId) |
| 455 { | 547 { |
| 456 case StMHARD3_O2_Sensor2: tMenuEdit_select(StMHARD3_O2_Sensor2); | 548 case StMHARD3_O2_Sensor2: tMenuEdit_select(StMHARD3_O2_Sensor2); |
| 457 break; | 549 break; |
| 458 case StMHARD3_O2_Sensor3: tMenuEdit_select(StMHARD3_O2_Sensor3); | 550 case StMHARD3_O2_Sensor3: tMenuEdit_select(StMHARD3_O2_Sensor3); |
| 459 break; | 551 break; |
| 460 default: break; | 552 default: break; |
| 461 } | 553 } |
| 554 } | |
| 555 } | |
| 556 | |
| 557 void openEdit_SensorsO2() | |
| 558 { | |
| 559 openEdit_Sensors(SENSOR_DIGO2); /* used for o2 sensors in general */ | |
| 560 } | |
| 561 | |
| 562 void openEdit_SensorsCO2() | |
| 563 { | |
| 564 openEdit_Sensors(SENSOR_CO2); | |
| 462 } | 565 } |
| 463 | 566 |
| 464 | 567 |
| 465 uint8_t OnAction_Sensor1(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) | 568 uint8_t OnAction_Sensor1(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) |
| 466 { | 569 { |
| 467 const SDiveState *pStateReal = stateRealGetPointer(); | 570 if((localSensorMap[0] == SENSOR_DIGO2M) || (localSensorMap[0] == SENSOR_CO2M) || (localSensorMap[0] == SENSOR_CO2M)) |
| 468 | 571 { |
| 469 if((pStateReal->lifeData.extIf_sensor_map[0] == SENSOR_DIGO2M) || (pStateReal->lifeData.extIf_sensor_map[0] == SENSOR_CO2M)) | 572 openInfo_SetSensorType(localSensorMap[0]); |
| 470 { | |
| 471 return EXIT_TO_INFO_SENSOR; | 573 return EXIT_TO_INFO_SENSOR; |
| 472 } | 574 } |
| 473 else | 575 else |
| 474 { | 576 { |
| 475 if(settingsGetPointer()->ppo2sensors_deactivated & 1) | 577 if(settingsGetPointer()->ppo2sensors_deactivated & 1) |
| 488 } | 590 } |
| 489 | 591 |
| 490 | 592 |
| 491 uint8_t OnAction_Sensor2(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) | 593 uint8_t OnAction_Sensor2(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) |
| 492 { | 594 { |
| 493 const SDiveState *pStateReal = stateRealGetPointer(); | 595 if((localSensorMap[1] == SENSOR_DIGO2M) || (localSensorMap[1] == SENSOR_CO2M)) |
| 494 | 596 { |
| 495 if((pStateReal->lifeData.extIf_sensor_map[1] == SENSOR_DIGO2M) || (pStateReal->lifeData.extIf_sensor_map[1] == SENSOR_CO2M)) | 597 openInfo_SetSensorType(localSensorMap[1]); |
| 496 { | |
| 497 return EXIT_TO_INFO_SENSOR; | 598 return EXIT_TO_INFO_SENSOR; |
| 498 } | 599 } |
| 499 else | 600 else |
| 500 { | 601 { |
| 501 if(settingsGetPointer()->ppo2sensors_deactivated & 2) | 602 if(settingsGetPointer()->ppo2sensors_deactivated & 2) |
| 513 } | 614 } |
| 514 | 615 |
| 515 | 616 |
| 516 uint8_t OnAction_Sensor3(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) | 617 uint8_t OnAction_Sensor3(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) |
| 517 { | 618 { |
| 518 const SDiveState *pStateReal = stateRealGetPointer(); | 619 if((localSensorMap[2] == SENSOR_DIGO2M) || (localSensorMap[2] == SENSOR_CO2M)) |
| 519 | 620 { |
| 520 if((pStateReal->lifeData.extIf_sensor_map[2] == SENSOR_DIGO2M) || (pStateReal->lifeData.extIf_sensor_map[2] == SENSOR_CO2M)) | 621 openInfo_SetSensorType(localSensorMap[2]); |
| 521 { | |
| 522 return EXIT_TO_INFO_SENSOR; | 622 return EXIT_TO_INFO_SENSOR; |
| 523 } | 623 } |
| 524 else | 624 else |
| 525 { | 625 { |
| 526 | 626 |
| 536 } | 636 } |
| 537 } | 637 } |
| 538 return UPDATE_DIVESETTINGS; | 638 return UPDATE_DIVESETTINGS; |
| 539 } | 639 } |
| 540 | 640 |
| 641 | |
| 642 uint8_t OnAction_CO2_Calibrate(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) | |
| 643 { | |
| 644 SSettings* pSettings = settingsGetPointer(); | |
| 645 uint8_t index = 0; | |
| 646 | |
| 647 for (index = EXT_INTERFACE_MUX_OFFSET; index < EXT_INTERFACE_SENSOR_CNT; index++) | |
| 648 { | |
| 649 if(pSettings->ext_sensor_map[index] == SENSOR_CO2) break; | |
| 650 } | |
| 651 | |
| 652 if(index != EXT_INTERFACE_SENSOR_CNT) | |
| 653 { | |
| 654 DataEX_setExtInterface_Cmd(EXT_INTERFACE_CO2_CALIB, index); | |
| 655 } | |
| 656 return UNSPECIFIC_RETURN; | |
| 657 } | |
| 541 | 658 |
| 542 uint8_t OnAction_O2_Calibrate (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) | 659 uint8_t OnAction_O2_Calibrate (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) |
| 543 { | 660 { |
| 544 uint8_t loop; | 661 uint8_t loop; |
| 545 const SDiveState *pStateReal = stateRealGetPointer(); | 662 const SDiveState *pStateReal = stateRealGetPointer(); |
