comparison Discovery/Src/tMenuEditHardware.c @ 981:c6c781a2e85b default

Merge into default
author heinrichsweikamp
date Tue, 11 Feb 2025 18:12:00 +0100
parents 57b82ae99969
children df052f0347fb
comparison
equal deleted inserted replaced
871:f7318457df4d 981:c6c781a2e85b
157 157
158 exitEditWithUpdate(); 158 exitEditWithUpdate();
159 exitMenuEdit_to_Home(); 159 exitMenuEdit_to_Home();
160 } 160 }
161 161
162
163 static uint8_t togglePlusMinus(uint8_t input)
164 {
165 if (input == '+') {
166 return '-';
167 } else {
168 return '+';
169 }
170 }
171
172
173 static uint8_t OnAction_CompassDeclination(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) 162 static uint8_t OnAction_CompassDeclination(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action)
174 { 163 {
175 SSettings *settings = settingsGetPointer(); 164 SSettings *settings = settingsGetPointer();
176 uint8_t digitContentNew; 165 uint8_t digitContentNew;
177 switch (action) { 166 switch (action) {
283 SSettings *settings = settingsGetPointer(); 272 SSettings *settings = settingsGetPointer();
284 273
285 char text[10]; 274 char text[10];
286 uint8_t textIndex = 0; 275 uint8_t textIndex = 0;
287 276
277
278 set_globalState(StMHARD2_Compass);
279 resetMenuEdit(CLUT_MenuPageHardware);
280
288 text[textIndex++] = '\001'; 281 text[textIndex++] = '\001';
289 text[textIndex++] = TXT_2BYTE; 282 text[textIndex++] = TXT_2BYTE;
290 text[textIndex++] = TXT2BYTE_Compass; 283 text[textIndex++] = TXT2BYTE_Compass;
291 text[textIndex++] = 0; 284 text[textIndex++] = 0;
292 write_topline(text); 285 write_topline(text);
318 setEvent(StMHARD2_Compass_ResetCourse, (uint32_t)OnAction_BearingClear); 311 setEvent(StMHARD2_Compass_ResetCourse, (uint32_t)OnAction_BearingClear);
319 setEvent(StMHARD2_Compass_Calibrate, (uint32_t)OnAction_Compass); 312 setEvent(StMHARD2_Compass_Calibrate, (uint32_t)OnAction_Compass);
320 setEvent(StMHARD2_Compass_Inertia, (uint32_t)OnAction_InertiaLevel); 313 setEvent(StMHARD2_Compass_Inertia, (uint32_t)OnAction_InertiaLevel);
321 setEvent(StMHARD2_Compass_Declination, (uint32_t)OnAction_CompassDeclination); 314 setEvent(StMHARD2_Compass_Declination, (uint32_t)OnAction_CompassDeclination);
322 315
316 tMenuEdit_select(StMHARD2_Compass_SetCourse);
317
323 write_buttonTextline(TXT2BYTE_ButtonBack,TXT2BYTE_ButtonEnter,TXT2BYTE_ButtonNext); 318 write_buttonTextline(TXT2BYTE_ButtonBack,TXT2BYTE_ButtonEnter,TXT2BYTE_ButtonNext);
324 } 319 }
325 320
326 321
327 uint8_t OnAction_Compass (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) 322 uint8_t OnAction_Compass (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action)
387 382
388 if(memcmp(pSettings->ext_sensor_map, pStateReal->lifeData.extIf_sensor_map, EXT_INTERFACE_SENSOR_CNT) != 0) 383 if(memcmp(pSettings->ext_sensor_map, pStateReal->lifeData.extIf_sensor_map, EXT_INTERFACE_SENSOR_CNT) != 0)
389 { 384 {
390 memcpy(pSettings->ext_sensor_map, pStateReal->lifeData.extIf_sensor_map, EXT_INTERFACE_SENSOR_CNT); 385 memcpy(pSettings->ext_sensor_map, pStateReal->lifeData.extIf_sensor_map, EXT_INTERFACE_SENSOR_CNT);
391 pSettings->ppo2sensors_deactivated = 0x0; /* deactivation will be done by openEditO2Sensor if need */ 386 pSettings->ppo2sensors_deactivated = 0x0; /* deactivation will be done by openEditO2Sensor if need */
392 387 pSettings->co2_sensor_active = 0;
393 pSettings->ppo2sensors_source = O2_SENSOR_SOURCE_OPTIC; 388 pSettings->ppo2sensors_source = O2_SENSOR_SOURCE_OPTIC;
394 for(index = 0; index < 3; index++) 389 for(index = 0; index < EXT_INTERFACE_SENSOR_CNT - 1; index++)
395 { 390 {
396 switch(pSettings->ext_sensor_map[index]) 391 switch(pSettings->ext_sensor_map[index])
397 { 392 {
398 case SENSOR_OPTIC: pSettings->ppo2sensors_source = O2_SENSOR_SOURCE_OPTIC; 393 case SENSOR_OPTIC: pSettings->ppo2sensors_source = O2_SENSOR_SOURCE_OPTIC;
399 break; 394 break;
413 if(pSettings->ppo2sensors_source != O2_SENSOR_SOURCE_ANADIG) 408 if(pSettings->ppo2sensors_source != O2_SENSOR_SOURCE_ANADIG)
414 { 409 {
415 pSettings->ppo2sensors_source = O2_SENSOR_SOURCE_DIGITAL; 410 pSettings->ppo2sensors_source = O2_SENSOR_SOURCE_DIGITAL;
416 } 411 }
417 break; 412 break;
413 case SENSOR_CO2:
414 case SENSOR_CO2M: pSettings->co2_sensor_active = 1;
415 break;
418 #ifdef ENABLE_SENTINEL_MODE 416 #ifdef ENABLE_SENTINEL_MODE
419 case SENSOR_SENTINEL: pSettings->ppo2sensors_source = O2_SENSOR_SOURCE_SENTINEL; 417 case SENSOR_SENTINEL:
418 case SENSOR_SENTINELM: pSettings->ppo2sensors_source = O2_SENSOR_SOURCE_SENTINEL;
420 break; 419 break;
421 #endif 420 #endif
422 default: 421 default:
423 break; 422 break;
424 } 423 }
459 case SENSOR_DIGO2M: strSensorId[4] = TXT2BYTE_O2IFDigital; 458 case SENSOR_DIGO2M: strSensorId[4] = TXT2BYTE_O2IFDigital;
460 break; 459 break;
461 case SENSOR_CO2: 460 case SENSOR_CO2:
462 case SENSOR_CO2M: strSensorId[3] = 'C'; 461 case SENSOR_CO2M: strSensorId[3] = 'C';
463 strSensorId[4] = 'O'; 462 strSensorId[4] = 'O';
463 strSensorId[5] = '2';
464 break; 464 break;
465 case SENSOR_SENTINEL: strSensorId[3] = 'S'; 465 case SENSOR_SENTINEL:
466 strSensorId[4] = 'e'; 466 case SENSOR_SENTINELM: strSensorId[3] = 'S';
467 strSensorId[4] = 'e';
467 break; 468 break;
469 case SENSOR_GNSS:
470 case SENSOR_GNSSM: strSensorId[3] = 'G';
471 strSensorId[4] = 'N';
472 break;
468 default: 473 default:
469 strSensorId[5] = 0; 474 strSensorId[5] = 0;
470 break; 475 break;
471 } 476 }
472 if(strSensorId[4] != 'X') 477 if(strSensorId[4] != 'X')
522 strSensorId[2] = 0; 527 strSensorId[2] = 0;
523 528
524 write_label_var( 30, 340, ME_Y_LINE6, &FontT48, strSensorId); 529 write_label_var( 30, 340, ME_Y_LINE6, &FontT48, strSensorId);
525 } 530 }
526 531
527 if((pSettings->ext_sensor_map[0] >= SENSOR_OPTIC) && (pSettings->ext_sensor_map[0] < SENSOR_TYPE_O2_END)) 532 if((pSettings->ext_sensor_map[0] >= SENSOR_OPTIC) && (pSettings->ext_sensor_map[0] < SENSOR_MUX))
528 { 533 {
529 tMenuEdit_refresh_field(StMHARD3_O2_Sensor1); 534 tMenuEdit_refresh_field(StMHARD3_O2_Sensor1);
530 } 535 }
531 if((pSettings->ext_sensor_map[1] >= SENSOR_OPTIC) && (pSettings->ext_sensor_map[1] < SENSOR_TYPE_O2_END)) 536 if((pSettings->ext_sensor_map[1] >= SENSOR_OPTIC) && (pSettings->ext_sensor_map[1] < SENSOR_MUX))
532 { 537 {
533 tMenuEdit_refresh_field(StMHARD3_O2_Sensor2); 538 tMenuEdit_refresh_field(StMHARD3_O2_Sensor2);
534 } 539 }
535 if((pSettings->ext_sensor_map[2] >= SENSOR_OPTIC) && (pSettings->ext_sensor_map[2] < SENSOR_TYPE_O2_END)) 540 if((pSettings->ext_sensor_map[2] >= SENSOR_OPTIC) && (pSettings->ext_sensor_map[2] < SENSOR_MUX))
536 { 541 {
537 tMenuEdit_refresh_field(StMHARD3_O2_Sensor3); 542 tMenuEdit_refresh_field(StMHARD3_O2_Sensor3);
538 } 543 }
539 544
540 if(get_globalState() == StMHARD3_O2_Calibrate) 545 if(get_globalState() == StMHARD3_O2_Calibrate)
552 { 557 {
553 SSettings *pSettings = settingsGetPointer(); 558 SSettings *pSettings = settingsGetPointer();
554 uint8_t sensorActive[3]; 559 uint8_t sensorActive[3];
555 uint8_t index = 0; 560 uint8_t index = 0;
556 char text[3]; 561 char text[3];
562 uint32_t firstSensorId = 0;
557 563
558 set_globalState(StMHARD3_Sensors); 564 set_globalState(StMHARD3_Sensors);
559 resetMenuEdit(CLUT_MenuPageHardware); 565 resetMenuEdit(CLUT_MenuPageHardware);
560 566
561 for(index = 0; index < 3; index++ ) 567 for(index = 0; index < 3; index++ )
571 } 577 }
572 578
573 if(((pSettings->ext_sensor_map[0] < SENSOR_OPTIC) || (pSettings->ext_sensor_map[0] >= SENSOR_TYPE_O2_END))) 579 if(((pSettings->ext_sensor_map[0] < SENSOR_OPTIC) || (pSettings->ext_sensor_map[0] >= SENSOR_TYPE_O2_END)))
574 { 580 {
575 pSettings->ppo2sensors_deactivated |= 1; 581 pSettings->ppo2sensors_deactivated |= 1;
582 if(pSettings->ext_sensor_map[0] == SENSOR_CO2M)
583 {
584 write_field_on_off(StMHARD3_O2_Sensor1, 30, 95, ME_Y_LINE1, &FontT48, "", pSettings->co2_sensor_active);
585 }
576 } 586 }
577 else 587 else
578 { 588 {
579 write_field_on_off(StMHARD3_O2_Sensor1, 30, 95, ME_Y_LINE1, &FontT48, "", sensorActive[0]); 589 write_field_on_off(StMHARD3_O2_Sensor1, 30, 95, ME_Y_LINE1, &FontT48, "", sensorActive[0]);
590 if(firstSensorId == 0)
591 {
592 firstSensorId = StMHARD3_O2_Sensor1;
593 }
580 } 594 }
581 if(((pSettings->ext_sensor_map[1] < SENSOR_OPTIC) || (pSettings->ext_sensor_map[1] >= SENSOR_TYPE_O2_END))) 595 if(((pSettings->ext_sensor_map[1] < SENSOR_OPTIC) || (pSettings->ext_sensor_map[1] >= SENSOR_TYPE_O2_END)))
582 { 596 {
583 pSettings->ppo2sensors_deactivated |= 2; 597 pSettings->ppo2sensors_deactivated |= 2;
598 if(pSettings->ext_sensor_map[1] == SENSOR_CO2M)
599 {
600 write_field_on_off(StMHARD3_O2_Sensor2, 30, 95, ME_Y_LINE2, &FontT48, "", pSettings->co2_sensor_active);
601 }
584 } 602 }
585 else 603 else
586 { 604 {
587 write_field_on_off(StMHARD3_O2_Sensor2, 30, 95, ME_Y_LINE2, &FontT48, "", sensorActive[1]); 605 write_field_on_off(StMHARD3_O2_Sensor2, 30, 95, ME_Y_LINE2, &FontT48, "", sensorActive[1]);
606 if(firstSensorId == 0)
607 {
608 firstSensorId = StMHARD3_O2_Sensor2;
609 }
588 } 610 }
589 if(((pSettings->ext_sensor_map[2] < SENSOR_OPTIC) || (pSettings->ext_sensor_map[2] >= SENSOR_TYPE_O2_END))) 611 if(((pSettings->ext_sensor_map[2] < SENSOR_OPTIC) || (pSettings->ext_sensor_map[2] >= SENSOR_TYPE_O2_END)))
590 { 612 {
591 pSettings->ppo2sensors_deactivated |= 4; 613 pSettings->ppo2sensors_deactivated |= 4;
614 if(pSettings->ext_sensor_map[2] == SENSOR_CO2M)
615 {
616 write_field_on_off(StMHARD3_O2_Sensor3, 30, 95, ME_Y_LINE3, &FontT48, "", pSettings->co2_sensor_active);
617 }
592 } 618 }
593 else 619 else
594 { 620 {
595 write_field_on_off(StMHARD3_O2_Sensor3, 30, 95, ME_Y_LINE3, &FontT48, "", sensorActive[2]); 621 write_field_on_off(StMHARD3_O2_Sensor3, 30, 95, ME_Y_LINE3, &FontT48, "", sensorActive[2]);
622 if(firstSensorId == 0)
623 {
624 firstSensorId = StMHARD3_O2_Sensor3;
625 }
596 } 626 }
597 627
598 stateRealGetPointerWrite()->diveSettings.ppo2sensors_deactivated = pSettings->ppo2sensors_deactivated; 628 stateRealGetPointerWrite()->diveSettings.ppo2sensors_deactivated = pSettings->ppo2sensors_deactivated;
599 629
600 if(settingsGetPointer()->ppo2sensors_deactivated & 1) 630 if(settingsGetPointer()->ppo2sensors_deactivated & 1)
625 write_label_var( 30, 340, ME_Y_LINE6, &FontT48, text); 655 write_label_var( 30, 340, ME_Y_LINE6, &FontT48, text);
626 656
627 write_field_button(StMHARD3_Sensor_Detect, 30, 800, ME_Y_LINE6, &FontT48, text); 657 write_field_button(StMHARD3_Sensor_Detect, 30, 800, ME_Y_LINE6, &FontT48, text);
628 } 658 }
629 659
630 if((pSettings->ext_sensor_map[0] >= SENSOR_OPTIC) && (pSettings->ext_sensor_map[0] < SENSOR_TYPE_O2_END)) 660 if((pSettings->ext_sensor_map[0] >= SENSOR_OPTIC) && (pSettings->ext_sensor_map[0] < SENSOR_MUX))
631 { 661 {
632 setEvent(StMHARD3_O2_Sensor1, (uint32_t)OnAction_Sensor1); 662 setEvent(StMHARD3_O2_Sensor1, (uint32_t)OnAction_Sensor1);
633 } 663 }
634 if((pSettings->ext_sensor_map[1] >= SENSOR_OPTIC) && (pSettings->ext_sensor_map[1] < SENSOR_TYPE_O2_END)) 664 if((pSettings->ext_sensor_map[1] >= SENSOR_OPTIC) && (pSettings->ext_sensor_map[1] < SENSOR_MUX))
635 { 665 {
636 setEvent(StMHARD3_O2_Sensor2, (uint32_t)OnAction_Sensor2); 666 setEvent(StMHARD3_O2_Sensor2, (uint32_t)OnAction_Sensor2);
637 } 667 }
638 if((pSettings->ext_sensor_map[2] >= SENSOR_OPTIC) && (pSettings->ext_sensor_map[2] < SENSOR_TYPE_O2_END)) 668 if((pSettings->ext_sensor_map[2] >= SENSOR_OPTIC) && (pSettings->ext_sensor_map[2] < SENSOR_MUX))
639 { 669 {
640 setEvent(StMHARD3_O2_Sensor3, (uint32_t)OnAction_Sensor3); 670 setEvent(StMHARD3_O2_Sensor3, (uint32_t)OnAction_Sensor3);
641 } 671 }
642 672
643 if((settingsGetPointer()->ppo2sensors_source == O2_SENSOR_SOURCE_ANALOG) || (settingsGetPointer()->ppo2sensors_source == O2_SENSOR_SOURCE_ANADIG) 673 if((settingsGetPointer()->ppo2sensors_source == O2_SENSOR_SOURCE_ANALOG) || (settingsGetPointer()->ppo2sensors_source == O2_SENSOR_SOURCE_ANADIG)
652 if(DataEX_external_ADC_Present()) 682 if(DataEX_external_ADC_Present())
653 { 683 {
654 setEvent(StMHARD3_Sensor_Detect, (uint32_t)OnAction_Sensor_Detect); 684 setEvent(StMHARD3_Sensor_Detect, (uint32_t)OnAction_Sensor_Detect);
655 } 685 }
656 write_buttonTextline(TXT2BYTE_ButtonBack,TXT2BYTE_ButtonEnter,TXT2BYTE_ButtonNext); 686 write_buttonTextline(TXT2BYTE_ButtonBack,TXT2BYTE_ButtonEnter,TXT2BYTE_ButtonNext);
687
688 switch(firstSensorId)
689 {
690 case StMHARD3_O2_Sensor2: tMenuEdit_select(StMHARD3_O2_Sensor2);
691 break;
692 case StMHARD3_O2_Sensor3: tMenuEdit_select(StMHARD3_O2_Sensor3);
693 break;
694 default: break;
695 }
657 } 696 }
658 697
659 698
660 uint8_t OnAction_Sensor1(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) 699 uint8_t OnAction_Sensor1(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action)
661 { 700 {
662 const SDiveState *pStateReal = stateRealGetPointer(); 701 const SDiveState *pStateReal = stateRealGetPointer();
663 702
664 if(pStateReal->lifeData.extIf_sensor_map[0] == SENSOR_DIGO2M) 703 if((pStateReal->lifeData.extIf_sensor_map[0] == SENSOR_DIGO2M) || (pStateReal->lifeData.extIf_sensor_map[0] == SENSOR_CO2M))
665 { 704 {
666 return EXIT_TO_INFO_SENSOR; 705 return EXIT_TO_INFO_SENSOR;
667 } 706 }
668 else 707 else
669 { 708 {
685 724
686 uint8_t OnAction_Sensor2(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) 725 uint8_t OnAction_Sensor2(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action)
687 { 726 {
688 const SDiveState *pStateReal = stateRealGetPointer(); 727 const SDiveState *pStateReal = stateRealGetPointer();
689 728
690 if(pStateReal->lifeData.extIf_sensor_map[1] == SENSOR_DIGO2M) 729 if((pStateReal->lifeData.extIf_sensor_map[1] == SENSOR_DIGO2M) || (pStateReal->lifeData.extIf_sensor_map[1] == SENSOR_CO2M))
691 { 730 {
692 return EXIT_TO_INFO_SENSOR; 731 return EXIT_TO_INFO_SENSOR;
693 } 732 }
694 else 733 else
695 { 734 {
710 749
711 uint8_t OnAction_Sensor3(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) 750 uint8_t OnAction_Sensor3(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action)
712 { 751 {
713 const SDiveState *pStateReal = stateRealGetPointer(); 752 const SDiveState *pStateReal = stateRealGetPointer();
714 753
715 if(pStateReal->lifeData.extIf_sensor_map[2] == SENSOR_DIGO2M) 754 if((pStateReal->lifeData.extIf_sensor_map[2] == SENSOR_DIGO2M) || (pStateReal->lifeData.extIf_sensor_map[2] == SENSOR_CO2M))
716 { 755 {
717 return EXIT_TO_INFO_SENSOR; 756 return EXIT_TO_INFO_SENSOR;
718 } 757 }
719 else 758 else
720 { 759 {
803 return EXIT_TO_INFO_SENSOR; 842 return EXIT_TO_INFO_SENSOR;
804 } 843 }
805 844
806 uint8_t OnAction_Sensor_Detect(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) 845 uint8_t OnAction_Sensor_Detect(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action)
807 { 846 {
808 DataEX_setExtInterface_Cmd(EXT_INTERFACE_AUTODETECT); 847 DataEX_setExtInterface_Cmd(EXT_INTERFACE_AUTODETECT, 0);
809 return UNSPECIFIC_RETURN; 848 return UNSPECIFIC_RETURN;
810 } 849 }
811 850
812 void openEdit_Brightness(void) 851 void openEdit_Brightness(void)
813 { 852 {
893 buttonBalanceText_helper(i,text); 932 buttonBalanceText_helper(i,text);
894 write_field_button(eventListButtonBalance[i],360,500,ME_Y_LINE4-(i*ME_Y_LINE_STEP),&FontT48,text); 933 write_field_button(eventListButtonBalance[i],360,500,ME_Y_LINE4-(i*ME_Y_LINE_STEP),&FontT48,text);
895 } 934 }
896 935
897 snprintf(text,32,"%c",TXT_ButtonLock); 936 snprintf(text,32,"%c",TXT_ButtonLock);
898 write_field_on_off(StMHARD5_ButtonLock, 30, 95, ME_Y_LINE5, &FontT48, text, settingsGetPointer()->buttonLockActive); 937 write_field_on_off(StMHARD5_ButtonLock, 30, 700, ME_Y_LINE5, &FontT48, text, settingsGetPointer()->buttonLockActive);
899 938
900 setEvent(StMHARD5_Button1, (uint32_t)OnAction_Button); 939 setEvent(StMHARD5_Button1, (uint32_t)OnAction_Button);
901 940
902 for(int i=2;i>=0;i--) 941 for(int i=2;i>=0;i--)
903 { 942 {
932 for(int i=0;i<3;i++) 971 for(int i=0;i<3;i++)
933 { 972 {
934 sens[i] = settingsHelperButtonSens_translate_hwOS_values_to_percentage(stateRealGetPointer()->lifeData.buttonPICdata[i]); 973 sens[i] = settingsHelperButtonSens_translate_hwOS_values_to_percentage(stateRealGetPointer()->lifeData.buttonPICdata[i]);
935 } 974 }
936 snprintf(text,64,"\020\016\016%c%c \017 (%03u %03u %03u)",TXT_2BYTE,TXT2BYTE_LowerIsLess,sens[2],sens[1],sens[0]); 975 snprintf(text,64,"\020\016\016%c%c \017 (%03u %03u %03u)",TXT_2BYTE,TXT2BYTE_LowerIsLess,sens[2],sens[1],sens[0]);
937 write_label_var( 20, 340, ME_Y_LINE6, &FontT42, text); 976 write_label_var( 20, 700, ME_Y_LINE6, &FontT42, text);
938 977
939 tMenuEdit_refresh_field(StMHARD5_Button1); 978 tMenuEdit_refresh_field(StMHARD5_Button1);
940 tMenuEdit_refresh_field(StMHARD5_ButtonBalance1); 979 tMenuEdit_refresh_field(StMHARD5_ButtonBalance1);
941 tMenuEdit_refresh_field(StMHARD5_ButtonBalance2); 980 tMenuEdit_refresh_field(StMHARD5_ButtonBalance2);
942 tMenuEdit_refresh_field(StMHARD5_ButtonBalance3); 981 tMenuEdit_refresh_field(StMHARD5_ButtonBalance3);