comparison Discovery/Src/tMenuEditGasOC.c @ 350:607099140a41

Merged in Ideenmodellierer/ostc4/FlightMode_Improvment (pull request #32) FlightMode Improvment
author heinrichsweikamp <bitbucket@heinrichsweikamp.com>
date Sun, 06 Oct 2019 11:58:36 +0000
parents 3f09b283d993
children a9c195be907e
comparison
equal deleted inserted replaced
340:0756013e43b3 350:607099140a41
42 uint8_t mod; 42 uint8_t mod;
43 uint8_t ccr; 43 uint8_t ccr;
44 uint8_t setpoint; 44 uint8_t setpoint;
45 } SEditGasPage; 45 } SEditGasPage;
46 46
47 #define MAX_SENDER_AT_ONCE 5
48 47
49 /* Private variables ---------------------------------------------------------*/ 48 /* Private variables ---------------------------------------------------------*/
50 SEditGasPage editGasPage; 49 SEditGasPage editGasPage;
51 50
52 uint16_t wirelessSender[MAX_SENDER_AT_ONCE];
53
54 /* Private function prototypes -----------------------------------------------*/ 51 /* Private function prototypes -----------------------------------------------*/
55 void create_text_with_u8(char *text, const char *text1, uint8_t inputU8, const char *text2); 52 void create_text_with_u8(char *text, const char *text1, uint8_t inputU8, const char *text2);
56 53
57 void openEdit_Gas(uint8_t line, uint8_t ccr); 54 void openEdit_Gas(uint8_t line, uint8_t ccr);
58 void openEdit_GasType(void); 55 void openEdit_GasType(void);
59 void openEdit_Wireless(void);
60 56
61 void openEdit_DiveGasSelect(uint8_t line, uint8_t ccr); 57 void openEdit_DiveGasSelect(uint8_t line, uint8_t ccr);
62 void openEdit_SpecialDiveGasMenu(uint8_t ccr); 58 void openEdit_SpecialDiveGasMenu(uint8_t ccr);
63 void openEdit_DiveGasSelect_Subroutine(uint8_t line, uint8_t ccr); 59 void openEdit_DiveGasSelect_Subroutine(uint8_t line, uint8_t ccr);
64 60
68 uint8_t OnAction_Mix (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); 64 uint8_t OnAction_Mix (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);
69 uint8_t OnAction_GasType (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); 65 uint8_t OnAction_GasType (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);
70 uint8_t OnAction_ChangeDepth (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); 66 uint8_t OnAction_ChangeDepth (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);
71 uint8_t OnAction_SetToMOD (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); 67 uint8_t OnAction_SetToMOD (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);
72 uint8_t OnAction_BottleSize (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); 68 uint8_t OnAction_BottleSize (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);
73 uint8_t OnAction_Wireless (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);
74 69
75 uint8_t OnAction_First (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); 70 uint8_t OnAction_First (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);
76 uint8_t OnAction_Deco (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); 71 uint8_t OnAction_Deco (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);
77 uint8_t OnAction_Travel (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); 72 uint8_t OnAction_Travel (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);
78 uint8_t OnAction_Inactive (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); 73 uint8_t OnAction_Inactive (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);
79
80 uint8_t OnAction_WirelessID (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);
81 uint8_t OnAction_NoWireless (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);
82 74
83 uint8_t OnAction_DM_Active (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); 75 uint8_t OnAction_DM_Active (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);
84 uint8_t OnAction_DM_Mix (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); 76 uint8_t OnAction_DM_Mix (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);
85 77
86 /* 78 /*
342 334
343 335
344 /* surface mode */ 336 /* surface mode */
345 void openEdit_Gas(uint8_t line, uint8_t ccr) 337 void openEdit_Gas(uint8_t line, uint8_t ccr)
346 { 338 {
347 uint8_t gasID, oxygen, helium, depthDeco, active, first, depthMOD, deco, travel, inactive;//, bottleSizeLiter;, bottleWirelessStatus; 339 uint8_t gasID, oxygen, helium, depthDeco, active, first, depthMOD, deco, travel, inactive;//, bottleSizeLiter;
348 //uint16_t bottleWirelessId;//, bottleWirelessIdSmall;
349 340
350 char text[32]; 341 char text[32];
351 char textMOD[32]; 342 char textMOD[32];
352 uint8_t txtptr; 343 uint8_t txtptr;
353 344
383 first = editGasPage.pGasLine[gasID].note.ub.first; 374 first = editGasPage.pGasLine[gasID].note.ub.first;
384 deco = editGasPage.pGasLine[gasID].note.ub.deco; 375 deco = editGasPage.pGasLine[gasID].note.ub.deco;
385 travel = editGasPage.pGasLine[gasID].note.ub.travel; 376 travel = editGasPage.pGasLine[gasID].note.ub.travel;
386 377
387 //bottleSizeLiter = editGasPage.pGasLine[gasID].bottle_size_liter; 378 //bottleSizeLiter = editGasPage.pGasLine[gasID].bottle_size_liter;
388 // bottleWirelessStatus = editGasPage.pGasLine[gasID].bottle_wireless_status;
389 //bottleWirelessId = editGasPage.pGasLine[gasID].bottle_wireless_id;
390 //bottleWirelessIdSmall = bottleWirelessId & 0x0F;
391 379
392 if(active) 380 if(active)
393 inactive = 0; 381 inactive = 0;
394 else 382 else
395 inactive = 1; 383 inactive = 1;
485 text[txtptr++] = TXT2BYTE_Bottle; 473 text[txtptr++] = TXT2BYTE_Bottle;
486 text[txtptr++] = 0; 474 text[txtptr++] = 0;
487 write_label_var( 20 ,800, ME_Y_LINE5, &FontT48, text); 475 write_label_var( 20 ,800, ME_Y_LINE5, &FontT48, text);
488 write_field_2digit(StMOG_Bottle, 600, 710, ME_Y_LINE5, &FontT48,"## ltr", (uint32_t)bottleSizeLiter, 0, 0, 0); 476 write_field_2digit(StMOG_Bottle, 600, 710, ME_Y_LINE5, &FontT48,"## ltr", (uint32_t)bottleSizeLiter, 0, 0, 0);
489 477
490 txtptr = 0;
491 text[txtptr++] = TXT_2BYTE;
492 text[txtptr++] = TXT2BYTE_WirelessSender;
493 text[txtptr++] = ' ';
494 if(!bottleWirelessId)
495 text[txtptr++] = '\021';
496 txtptr += snprintf(&text[txtptr],20,"%u (%04X)",bottleWirelessIdSmall, bottleWirelessId);
497 write_field_button(StMOG_Wireless, 20, 710, ME_Y_LINE6, &FontT48, text);
498 */ 478 */
499 stop_cursor_fields(); 479 stop_cursor_fields();
500 480
501 textMOD[0] = '#'; 481 textMOD[0] = '#';
502 textMOD[1] = '#'; 482 textMOD[1] = '#';
520 setEvent(StMOG_ChangeDepth, (uint32_t)OnAction_ChangeDepth); 500 setEvent(StMOG_ChangeDepth, (uint32_t)OnAction_ChangeDepth);
521 setEvent(StMOG_SetToMOD, (uint32_t)OnAction_SetToMOD); 501 setEvent(StMOG_SetToMOD, (uint32_t)OnAction_SetToMOD);
522 } 502 }
523 /* 503 /*
524 setEvent(StMOG_Bottle, (uint32_t)OnAction_BottleSize); 504 setEvent(StMOG_Bottle, (uint32_t)OnAction_BottleSize);
525 setEvent(StMOG_Wireless, (uint32_t)OnAction_Wireless);
526 */ 505 */
527 write_buttonTextline(TXT2BYTE_ButtonBack,TXT2BYTE_ButtonEnter,TXT2BYTE_ButtonNext); 506 write_buttonTextline(TXT2BYTE_ButtonBack,TXT2BYTE_ButtonEnter,TXT2BYTE_ButtonNext);
528 } 507 }
529 } 508 }
530 509
603 uint8_t OnAction_GasType(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) 582 uint8_t OnAction_GasType(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action)
604 { 583 {
605 openEdit_GasType(); 584 openEdit_GasType();
606 return UNSPECIFIC_RETURN; 585 return UNSPECIFIC_RETURN;
607 } 586 }
608
609 void openEdit_Wireless(void)
610 {
611 uint8_t gasID, wirelessSenderAvailable, isNotMatched, isMatchedWithThis, wirelessSenderActive[MAX_SENDER_AT_ONCE], senderCount, isInList; //, wirelessStatus;
612 uint16_t wirelessId, wirelessSenderIdSmall, wirelessIdTemp;
613 char text[32];
614 uint8_t txtptr;
615
616 if(editGasPage.ccr)
617 {
618 resetMenuEdit(CLUT_MenuPageGasCC);
619 setBackMenu((uint32_t)openEdit_GasCC, editGasPage.gasID - NUM_OFFSET_DILUENT, 5);
620 }
621 else
622 {
623 resetMenuEdit(CLUT_MenuPageGasOC);
624 setBackMenu((uint32_t)openEdit_GasOC, editGasPage.gasID, 5);
625 }
626
627 gasID = editGasPage.gasID;
628 wirelessId = editGasPage.pGasLine[gasID].bottle_wireless_id;
629 // wirelessStatus = editGasPage.pGasLine[gasID].bottle_wireless_status;
630
631
632 /* header */
633 int i = 0;
634 if(gasID >= 10)
635 {
636 i = 1;
637 strcpy(text, "\001" "Gas #10 X");
638 }
639 else
640 strcpy(text, "\001" "Gas #0 X");
641
642 if(editGasPage.ccr)
643 text[8+i] = TXT_Diluent_Gas_Edit;
644 else
645 text[8+i] = TXT_OC_Gas_Edit;
646
647 if(gasID >= 10)
648 text[6+i] += gasID - 10;
649 else
650 text[6+i] += gasID;
651 write_topline(text);
652
653 senderCount = 0;
654 wirelessSenderAvailable = 0;
655 if(wirelessId)
656 {
657 wirelessSender[senderCount] = wirelessId;
658 wirelessSenderActive[senderCount] = 0;
659 wirelessSenderAvailable++;
660 senderCount++;
661 }
662
663 for(int i=0;i<4;i++)
664 {
665 if((stateUsed->lifeData.wireless_data[i].ageInMilliSeconds) && (stateUsed->lifeData.wireless_data[i].ageInMilliSeconds <= 60000) && ((stateUsed->lifeData.wireless_data[i].data[1] & 0x0F) != 0))
666 {
667 wirelessIdTemp = stateUsed->lifeData.wireless_data[i].data[0] * 256;
668 wirelessIdTemp += stateUsed->lifeData.wireless_data[i].data[1];
669 if(wirelessId && (wirelessId == wirelessIdTemp))
670 wirelessSenderActive[0] = 1;
671 else
672 {
673 isInList = 0;
674 for(int j=0;j<wirelessSenderAvailable;j++)
675 {
676 if(wirelessSender[j] == wirelessIdTemp)
677 {
678 isInList = 1;
679 break;
680 }
681 }
682 if(!isInList)
683 {
684 wirelessSender[senderCount] = wirelessIdTemp;
685 wirelessSenderActive[senderCount] = 1;
686 wirelessSenderAvailable++;
687 senderCount++;
688 }
689 }
690 }
691 }
692
693 if(wirelessSenderAvailable > MAX_SENDER_AT_ONCE)
694 wirelessSenderAvailable = MAX_SENDER_AT_ONCE;
695
696 isNotMatched = 1;
697
698 for(int i=0;i<wirelessSenderAvailable;i++)
699 {
700 wirelessSenderIdSmall = wirelessSender[i] & 0x0F;
701
702 txtptr = 0;
703 if(!wirelessSenderActive[i])
704 text[txtptr++] = '\021';
705 txtptr += snprintf(&text[txtptr],10,"%u (%04X)",wirelessSenderIdSmall, wirelessSender[i]);
706
707 if(wirelessId == wirelessSender[i])
708 {
709 isMatchedWithThis = 1;
710 isNotMatched = 0;
711 }
712 else
713 {
714 isMatchedWithThis = 0;
715 for(int j=1; j <= 2*NUM_GASES; j++)
716 {
717 if((gasID != j) && (settingsGetPointer()->gas[j].bottle_wireless_id == wirelessSender[i]))
718 {
719 txtptr += snprintf(&text[txtptr],20," used by Gas #%i",i);
720 break;
721 }
722 }
723 }
724 write_field_on_off(StMOG_Transmitter1 + i, 30, 710, ME_Y_LINE1 + (i * ME_Y_LINE_STEP), &FontT48, text, isMatchedWithThis);
725 }
726
727
728 txtptr = 0;
729 text[txtptr++] = TXT_2BYTE;
730 text[txtptr++] = TXT2BYTE_WirelessDisconnect;
731 text[txtptr++] = 0;
732 write_field_on_off(StMOG_NoTransmitter, 30, 400, ME_Y_LINE6, &FontT48, text, isNotMatched);
733
734 // setEvent has to be _after_ all fields are written
735 for(int i=0;i<wirelessSenderAvailable;i++)
736 setEvent(StMOG_Transmitter1 + i, (uint32_t)OnAction_WirelessID);
737
738 setEvent(StMOG_NoTransmitter, (uint32_t)OnAction_NoWireless);
739 }
740
741
742 uint8_t OnAction_Wireless(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action)
743 {
744 openEdit_Wireless();
745 return UNSPECIFIC_RETURN;
746 }
747
748
749 uint8_t OnAction_WirelessID (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action)
750 {
751 if((editId < StMOG_Transmitter1) || (editId > StMOG_Transmitter5))
752 return UNSPECIFIC_RETURN;
753
754 uint8_t line, isMatched;
755
756 line = editId - StMOG_Transmitter1;
757
758
759 if(editGasPage.pGasLine[editGasPage.gasID].bottle_wireless_id == wirelessSender[line])
760 isMatched = 1;
761 else
762 isMatched = 0;
763
764 editGasPage.pGasLine[editGasPage.gasID].bottle_wireless_id = wirelessSender[line];
765 // editGasPage.pGasLine[editGasPage.gasID].bottle_wireless_status = 0;
766
767 for(int i=0;i<5;i++)
768 {
769 if((StMOG_Transmitter1 + i) != editId)
770 tMenuEdit_set_on_off(StMOG_Transmitter1 + i, 0);
771 }
772 tMenuEdit_set_on_off(editId, 1);
773 tMenuEdit_set_on_off(StMOG_NoTransmitter, 0);
774
775 if(!isMatched)
776 return UPDATE_DIVESETTINGS;
777 else
778 return UPDATE_AND_EXIT_TO_MENU;
779 }
780
781
782 uint8_t OnAction_NoWireless (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action)
783 {
784 uint8_t isNotMatched;
785
786 if(editGasPage.pGasLine[editGasPage.gasID].bottle_wireless_id == 0)
787 isNotMatched = 1;
788 else
789 isNotMatched = 1;
790
791 editGasPage.pGasLine[editGasPage.gasID].bottle_wireless_id = 0;
792 // editGasPage.pGasLine[editGasPage.gasID].bottle_wireless_status = 0;
793
794 tMenuEdit_set_on_off(StMOG_Transmitter1, 0);
795 tMenuEdit_set_on_off(StMOG_Transmitter2, 0);
796 tMenuEdit_set_on_off(StMOG_Transmitter3, 0);
797 tMenuEdit_set_on_off(StMOG_Transmitter4, 0);
798 tMenuEdit_set_on_off(StMOG_Transmitter5, 0);
799 tMenuEdit_set_on_off(StMOG_NoTransmitter, 1);
800
801 if(!isNotMatched)
802 return UPDATE_DIVESETTINGS;
803 else
804 return UPDATE_AND_EXIT_TO_MENU;
805 }
806
807 587
808 uint8_t OnAction_Mix(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) 588 uint8_t OnAction_Mix(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action)
809 { 589 {
810 uint8_t digitContentNew; 590 uint8_t digitContentNew;
811 uint32_t newOxygen, newHelium; 591 uint32_t newOxygen, newHelium;