Mercurial > public > ostc4
comparison Small_CPU/Src/externalInterface.c @ 798:e9eba334b942
Migrated CO2 protocol implementation to new format:
The previous implementation was a monolithic protocol implementation which was not usable together with the multiplexer. The new implementation moves the CO2 implementation into a separate C file and decoubles the upper layer external interface, which is not able to handle DiveO2 and CO2 sensors in parallel without restriction to port assignments.
| author | Ideenmodellierer |
|---|---|
| date | Mon, 07 Aug 2023 20:29:44 +0200 |
| parents | bb37d4f3e50e |
| children | 391b3d420a39 |
comparison
equal
deleted
inserted
replaced
| 797:acf6614dc396 | 798:e9eba334b942 |
|---|---|
| 31 #include "scheduler.h" | 31 #include "scheduler.h" |
| 32 #include "uart.h" | 32 #include "uart.h" |
| 33 #include "data_exchange.h" | 33 #include "data_exchange.h" |
| 34 #include "pressure.h" | 34 #include "pressure.h" |
| 35 #include "uartProtocol_O2.h" | 35 #include "uartProtocol_O2.h" |
| 36 #include "uartProtocol_Co2.h" | |
| 36 | 37 |
| 37 extern SGlobal global; | 38 extern SGlobal global; |
| 38 extern UART_HandleTypeDef huart1; | 39 extern UART_HandleTypeDef huart1; |
| 39 | 40 |
| 40 #define ADC_ANSWER_LENGTH (5u) /* 3424 will provide addr + 4 data bytes */ | 41 #define ADC_ANSWER_LENGTH (5u) /* 3424 will provide addr + 4 data bytes */ |
| 131 | 132 |
| 132 for(index = 0; index < MAX_ADC_CHANNEL; index++) | 133 for(index = 0; index < MAX_ADC_CHANNEL; index++) |
| 133 { | 134 { |
| 134 externalChannel_mV[index] = 0.0; | 135 externalChannel_mV[index] = 0.0; |
| 135 } | 136 } |
| 136 memset(externalInterface_SensorState,UART_O2_INIT,sizeof(externalInterface_SensorState)); | 137 memset(externalInterface_SensorState,UART_COMMON_INIT,sizeof(externalInterface_SensorState)); |
| 137 } | 138 } |
| 138 | 139 |
| 139 | 140 |
| 140 uint8_t externalInterface_StartConversion(uint8_t channel) | 141 uint8_t externalInterface_StartConversion(uint8_t channel) |
| 141 { | 142 { |
| 361 case 0: | 362 case 0: |
| 362 case (EXT_INTERFACE_UART_CO2 >> 8): | 363 case (EXT_INTERFACE_UART_CO2 >> 8): |
| 363 case (EXT_INTERFACE_UART_O2 >> 8): | 364 case (EXT_INTERFACE_UART_O2 >> 8): |
| 364 case (EXT_INTERFACE_UART_SENTINEL >> 8): | 365 case (EXT_INTERFACE_UART_SENTINEL >> 8): |
| 365 if((externalAutoDetect <= DETECTION_START) | 366 if((externalAutoDetect <= DETECTION_START) |
| 366 || ((protocol == EXT_INTERFACE_UART_O2 >> 8) && (externalAutoDetect == DETECTION_DIGO2_0)) | 367 || ((protocol == EXT_INTERFACE_UART_O2 >> 8) && (externalAutoDetect >= DETECTION_UARTMUX) && (externalAutoDetect <= DETECTION_DIGO2_3)) |
| 367 || ((protocol == EXT_INTERFACE_UART_O2 >> 8) && (externalAutoDetect == DETECTION_DIGO2_1)) | 368 |
| 368 || ((protocol == EXT_INTERFACE_UART_O2 >> 8) && (externalAutoDetect == DETECTION_DIGO2_2)) | |
| 369 || ((protocol == EXT_INTERFACE_UART_O2 >> 8) && (externalAutoDetect == DETECTION_DIGO2_3)) | |
| 370 || ((protocol == EXT_INTERFACE_UART_O2 >> 8) && (externalAutoDetect == DETECTION_UARTMUX)) | |
| 371 #ifdef ENABLE_CO2_SUPPORT | 369 #ifdef ENABLE_CO2_SUPPORT |
| 372 || ((protocol == EXT_INTERFACE_UART_CO2 >> 8) && (externalAutoDetect == DETECTION_CO2)) | 370 || ((externalAutoDetect >= DETECTION_CO2_0) && (externalAutoDetect <= DETECTION_CO2_3)) |
| 373 #endif | 371 #endif |
| 374 #ifdef ENABLE_SENTINEL_MODE | 372 #ifdef ENABLE_SENTINEL_MODE |
| 375 || ((protocol == EXT_INTERFACE_UART_SENTINEL >> 8) && (externalAutoDetect == DETECTION_SENTINEL)) | 373 || ((protocol == EXT_INTERFACE_UART_SENTINEL >> 8) && (externalAutoDetect == DETECTION_SENTINEL)) |
| 376 #endif | 374 #endif |
| 377 ) | 375 ) |
| 564 static uint8_t uartMuxChannel = 0; | 562 static uint8_t uartMuxChannel = 0; |
| 565 uint8_t index = 0; | 563 uint8_t index = 0; |
| 566 uint8_t index2 = 0; | 564 uint8_t index2 = 0; |
| 567 uint8_t cntSensor = 0; | 565 uint8_t cntSensor = 0; |
| 568 uint8_t cntUARTSensor = 0; | 566 uint8_t cntUARTSensor = 0; |
| 567 #ifdef ENABLE_CO2_SUPPORT | |
| 569 uint8_t cmdString[10]; | 568 uint8_t cmdString[10]; |
| 570 uint8_t cmdLength = 0; | 569 uint8_t cmdLength = 0; |
| 570 #endif | |
| 571 | 571 |
| 572 if(externalAutoDetect != DETECTION_OFF) | 572 if(externalAutoDetect != DETECTION_OFF) |
| 573 { | 573 { |
| 574 switch(externalAutoDetect) | 574 switch(externalAutoDetect) |
| 575 { | 575 { |
| 581 tmpSensorMap[2] = SENSOR_OPTIC; | 581 tmpSensorMap[2] = SENSOR_OPTIC; |
| 582 tmpSensorMap[3] = SENSOR_NONE; | 582 tmpSensorMap[3] = SENSOR_NONE; |
| 583 tmpSensorMap[4] = SENSOR_NONE; | 583 tmpSensorMap[4] = SENSOR_NONE; |
| 584 | 584 |
| 585 memset(foundSensorMap, SENSOR_NONE, sizeof(foundSensorMap)); | 585 memset(foundSensorMap, SENSOR_NONE, sizeof(foundSensorMap)); |
| 586 memset(externalInterface_SensorState,UART_O2_INIT,sizeof(externalInterface_SensorState)); | 586 memset(externalInterface_SensorState,UART_COMMON_INIT,sizeof(externalInterface_SensorState)); |
| 587 memset(Mux2ADCMap,0, sizeof(Mux2ADCMap)); | 587 memset(Mux2ADCMap,0, sizeof(Mux2ADCMap)); |
| 588 | 588 |
| 589 if(externalInterfacePresent) | 589 if(externalInterfacePresent) |
| 590 { | 590 { |
| 591 externalInterface_SwitchPower33(0); | 591 externalInterface_SwitchPower33(0); |
| 638 else | 638 else |
| 639 { | 639 { |
| 640 tmpSensorMap[EXT_INTERFACE_SENSOR_CNT-1] = SENSOR_NONE; | 640 tmpSensorMap[EXT_INTERFACE_SENSOR_CNT-1] = SENSOR_NONE; |
| 641 } | 641 } |
| 642 externalAutoDetect = DETECTION_DIGO2_0; | 642 externalAutoDetect = DETECTION_DIGO2_0; |
| 643 externalInterface_SwitchUART(EXT_INTERFACE_UART_O2 >> 8); | |
| 644 UART_MUX_SelectAddress(0); | 643 UART_MUX_SelectAddress(0); |
| 645 uartO2_SetChannel(0); | 644 uartO2_SetChannel(0); |
| 646 activeUartChannel = 0; | 645 activeUartChannel = 0; |
| 647 tmpSensorMap[EXT_INTERFACE_MUX_OFFSET] = SENSOR_DIGO2; | 646 tmpSensorMap[EXT_INTERFACE_MUX_OFFSET] = SENSOR_DIGO2; |
| 648 externalInterface_SensorState[EXT_INTERFACE_MUX_OFFSET] = UART_O2_INIT; | 647 externalInterface_SensorState[EXT_INTERFACE_MUX_OFFSET] = UART_COMMON_INIT; |
| 649 externalInterface_SwitchUART(EXT_INTERFACE_UART_O2 >> 8); | 648 externalInterface_SwitchUART(EXT_INTERFACE_UART_O2 >> 8); |
| 650 break; | 649 break; |
| 651 case DETECTION_DIGO2_0: | 650 case DETECTION_DIGO2_0: |
| 652 case DETECTION_DIGO2_1: | 651 case DETECTION_DIGO2_1: |
| 653 case DETECTION_DIGO2_2: | 652 case DETECTION_DIGO2_2: |
| 659 | 658 |
| 660 if(uartMuxChannel) | 659 if(uartMuxChannel) |
| 661 { | 660 { |
| 662 externalInterface_SwitchUART(EXT_INTERFACE_UART_O2 >> 8); | 661 externalInterface_SwitchUART(EXT_INTERFACE_UART_O2 >> 8); |
| 663 UART_MUX_SelectAddress(uartMuxChannel); | 662 UART_MUX_SelectAddress(uartMuxChannel); |
| 664 externalInterface_SensorState[uartMuxChannel + EXT_INTERFACE_MUX_OFFSET] = UART_O2_INIT; | 663 externalInterface_SensorState[uartMuxChannel + EXT_INTERFACE_MUX_OFFSET] = UART_COMMON_INIT; |
| 665 uartO2_SetChannel(uartMuxChannel); | 664 uartO2_SetChannel(uartMuxChannel); |
| 666 activeUartChannel = uartMuxChannel; | 665 activeUartChannel = uartMuxChannel; |
| 667 tmpSensorMap[uartMuxChannel - 1 + EXT_INTERFACE_MUX_OFFSET] = SENSOR_NONE; | 666 tmpSensorMap[uartMuxChannel - 1 + EXT_INTERFACE_MUX_OFFSET] = SENSOR_NONE; |
| 668 tmpSensorMap[uartMuxChannel + EXT_INTERFACE_MUX_OFFSET] = SENSOR_DIGO2; | 667 tmpSensorMap[uartMuxChannel + EXT_INTERFACE_MUX_OFFSET] = SENSOR_DIGO2; |
| 669 | 668 |
| 676 { | 675 { |
| 677 externalAutoDetect = DETECTION_DIGO2_3; /* skip detection of other serial sensors */ | 676 externalAutoDetect = DETECTION_DIGO2_3; /* skip detection of other serial sensors */ |
| 678 } | 677 } |
| 679 externalAutoDetect++; | 678 externalAutoDetect++; |
| 680 #ifdef ENABLE_CO2_SUPPORT | 679 #ifdef ENABLE_CO2_SUPPORT |
| 681 if(externalAutoDetect == DETECTION_CO2) | 680 if(externalAutoDetect == DETECTION_CO2_0) |
| 682 { | 681 { |
| 682 UART_MUX_SelectAddress(0); | |
| 683 activeUartChannel = 0; | |
| 684 tmpSensorMap[uartMuxChannel - 1 + EXT_INTERFACE_MUX_OFFSET] = SENSOR_NONE; | |
| 685 uartMuxChannel = 1; | |
| 686 tmpSensorMap[EXT_INTERFACE_MUX_OFFSET] = SENSOR_CO2; | |
| 687 externalInterface_SensorState[EXT_INTERFACE_MUX_OFFSET] = UART_COMMON_INIT; | |
| 683 externalInterface_SwitchUART(EXT_INTERFACE_UART_CO2 >> 8); | 688 externalInterface_SwitchUART(EXT_INTERFACE_UART_CO2 >> 8); |
| 684 if(tmpSensorMap[EXT_INTERFACE_SENSOR_CNT-1] == SENSOR_MUX) /* switch sensor operation mode depending on HW config */ | 689 if(tmpSensorMap[EXT_INTERFACE_SENSOR_CNT-1] == SENSOR_MUX) /* switch sensor operation mode depending on HW config */ |
| 685 { | 690 { |
| 686 DigitalCO2_SendCmd(CO2CMD_MODE_POLL, cmdString, &cmdLength); | 691 uartCo2_SendCmd(CO2CMD_MODE_POLL, cmdString, &cmdLength); |
| 687 } | 692 } |
| 688 else | 693 else |
| 689 { | 694 { |
| 690 DigitalCO2_SendCmd(CO2CMD_MODE_STREAM, cmdString, &cmdLength); | 695 uartCo2_SendCmd(CO2CMD_MODE_STREAM, cmdString, &cmdLength); |
| 691 } | 696 } |
| 692 } | 697 } |
| 693 break; | 698 break; |
| 694 case DETECTION_CO2: if(UART_isCO2Connected()) | 699 case DETECTION_CO2_0: |
| 695 { | 700 case DETECTION_CO2_1: |
| 696 for(index = 0; index < 3; index++) /* lookup a channel which may be used by CO2*/ | 701 case DETECTION_CO2_2: |
| 697 { | 702 case DETECTION_CO2_3: if(uartCo2_isSensorConnected()) |
| 698 if(tmpSensorMap[index] == SENSOR_NONE) | 703 { |
| 699 { | 704 foundSensorMap[EXT_INTERFACE_MUX_OFFSET + activeUartChannel] = SENSOR_CO2; |
| 700 break; | 705 externalAutoDetect = DETECTION_DONE; /* only one CO2 sensor supported */ |
| 701 } | 706 } |
| 702 } | 707 else if(foundSensorMap[EXT_INTERFACE_SENSOR_CNT-1] == SENSOR_MUX) |
| 703 if(index == 3) | 708 { |
| 704 { | 709 externalInterface_SwitchUART(EXT_INTERFACE_UART_O2 >> 8); |
| 705 tmpSensorMap[sensorIndex++] = SENSOR_CO2; /* place Co2 sensor behind O2 sensors (not visible) */ | 710 UART_MUX_SelectAddress(uartMuxChannel); |
| 706 } | 711 activeUartChannel = uartMuxChannel; |
| 707 else | 712 tmpSensorMap[uartMuxChannel - 1 + EXT_INTERFACE_MUX_OFFSET] = SENSOR_NONE; |
| 708 { | 713 tmpSensorMap[EXT_INTERFACE_MUX_OFFSET + uartMuxChannel] = SENSOR_CO2; |
| 709 tmpSensorMap[index] = SENSOR_CO2; | 714 externalInterface_SensorState[EXT_INTERFACE_MUX_OFFSET + uartMuxChannel] = UART_COMMON_INIT; |
| 710 } | 715 externalInterface_SwitchUART(EXT_INTERFACE_UART_CO2 >> 8); |
| 711 | 716 uartCo2_SendCmd(CO2CMD_MODE_POLL, cmdString, &cmdLength); |
| 712 } | 717 externalAutoDetect++; |
| 713 externalAutoDetect++; | 718 uartMuxChannel++; |
| 719 } | |
| 720 else | |
| 721 { | |
| 722 externalAutoDetect = DETECTION_DONE; | |
| 723 } | |
| 714 #endif | 724 #endif |
| 715 #ifdef ENABLE_SENTINEL_MODE | 725 #ifdef ENABLE_SENTINEL_MODE |
| 716 if(externalAutoDetect == DETECTION_SENTINEL) | 726 if(externalAutoDetect == DETECTION_SENTINEL) |
| 717 { | 727 { |
| 718 externalInterface_SwitchUART(EXT_INTERFACE_UART_SENTINEL >> 8); | 728 externalInterface_SwitchUART(EXT_INTERFACE_UART_SENTINEL >> 8); |
| 738 activeUartChannel = 0xFF; | 748 activeUartChannel = 0xFF; |
| 739 cntSensor = 0; | 749 cntSensor = 0; |
| 740 cntUARTSensor = 0; | 750 cntUARTSensor = 0; |
| 741 for(index = 0; index < EXT_INTERFACE_SENSOR_CNT-1; index++) | 751 for(index = 0; index < EXT_INTERFACE_SENSOR_CNT-1; index++) |
| 742 { | 752 { |
| 743 if((foundSensorMap[index] >= SENSOR_ANALOG) && (foundSensorMap[index] < SENSOR_TYPE_O2_END)) | 753 if((foundSensorMap[index] >= SENSOR_ANALOG) && (foundSensorMap[index] < SENSOR_MUX)) |
| 744 { | 754 { |
| 745 cntSensor++; | 755 cntSensor++; |
| 746 } | 756 } |
| 747 | 757 |
| 748 if((foundSensorMap[index] == SENSOR_DIGO2) || (foundSensorMap[index] == SENSOR_CO2)) | 758 if((foundSensorMap[index] == SENSOR_DIGO2) || (foundSensorMap[index] == SENSOR_CO2)) |
| 762 break; | 772 break; |
| 763 } | 773 } |
| 764 } | 774 } |
| 765 } | 775 } |
| 766 } | 776 } |
| 777 for(index = 0; index < EXT_INTERFACE_SENSOR_CNT-1; index++) | |
| 778 { | |
| 779 if(foundSensorMap[index] == SENSOR_CO2) | |
| 780 { | |
| 781 for(index2 = 0; index2 < MAX_ADC_CHANNEL; index2++) | |
| 782 { | |
| 783 if(foundSensorMap[index2] == SENSOR_NONE) | |
| 784 { | |
| 785 foundSensorMap[index2] = SENSOR_CO2M; /* store a mirror instance needed for visualization */ | |
| 786 Mux2ADCMap[index2] = index; | |
| 787 break; | |
| 788 } | |
| 789 } | |
| 790 } | |
| 791 } | |
| 767 externalInterfaceMuxReqIntervall = 0xFFFF; | 792 externalInterfaceMuxReqIntervall = 0xFFFF; |
| 768 if(cntSensor == 0) /* return default sensor map if no sensor at all has been detected */ | 793 if(cntSensor == 0) /* return default sensor map if no sensor at all has been detected */ |
| 769 { | 794 { |
| 770 foundSensorMap[0] = SENSOR_OPTIC; | 795 foundSensorMap[0] = SENSOR_OPTIC; |
| 771 foundSensorMap[1] = SENSOR_OPTIC; | 796 foundSensorMap[1] = SENSOR_OPTIC; |
| 777 { | 802 { |
| 778 externalInterfaceMuxReqIntervall = REQUEST_INT_SENSOR_MS / cntUARTSensor; | 803 externalInterfaceMuxReqIntervall = REQUEST_INT_SENSOR_MS / cntUARTSensor; |
| 779 } | 804 } |
| 780 } | 805 } |
| 781 memcpy(SensorMap, foundSensorMap, sizeof(foundSensorMap)); | 806 memcpy(SensorMap, foundSensorMap, sizeof(foundSensorMap)); |
| 782 memset(externalInterface_SensorState,UART_O2_INIT,sizeof(externalInterface_SensorState)); | 807 memset(externalInterface_SensorState, UART_COMMON_INIT, sizeof(externalInterface_SensorState)); |
| 783 break; | 808 break; |
| 784 default: | 809 default: |
| 785 break; | 810 break; |
| 786 } | 811 } |
| 787 } | 812 } |
| 803 for(index = 0; index < 3; index++) | 828 for(index = 0; index < 3; index++) |
| 804 { | 829 { |
| 805 SensorMap[index] = SENSOR_SEARCH; | 830 SensorMap[index] = SENSOR_SEARCH; |
| 806 } | 831 } |
| 807 break; | 832 break; |
| 808 case EXT_INTERFACE_CO2_CALIB: cmdLength = snprintf(cmdString, 10, "G\r\n"); | 833 case EXT_INTERFACE_CO2_CALIB: for(index = 0; index < EXT_INTERFACE_SENSOR_CNT; index++) |
| 834 { | |
| 835 if(SensorMap[index] == SENSOR_CO2) | |
| 836 { | |
| 837 externalInterface_SensorState[index] = UART_CO2_CALIBRATE; | |
| 838 break; | |
| 839 } | |
| 840 } | |
| 809 break; | 841 break; |
| 810 case EXT_INTERFACE_COPY_SENSORMAP: if(externalAutoDetect == DETECTION_OFF) | 842 case EXT_INTERFACE_COPY_SENSORMAP: if(externalAutoDetect == DETECTION_OFF) |
| 811 { | 843 { |
| 812 memcpy(SensorMap, MasterSensorMap, sizeof(MasterSensorMap)); | 844 memcpy(SensorMap, MasterSensorMap, sizeof(MasterSensorMap)); |
| 813 for(index = 0; index < EXT_INTERFACE_SENSOR_CNT; index++) | 845 for(index = 0; index < EXT_INTERFACE_SENSOR_CNT; index++) |
| 875 } while(index != currentChannel); | 907 } while(index != currentChannel); |
| 876 | 908 |
| 877 return newChannel; | 909 return newChannel; |
| 878 } | 910 } |
| 879 | 911 |
| 912 void externalInterface_CheckBaudrate(uint8_t sensorType) | |
| 913 { | |
| 914 static uint32_t lastBaudRate = 0; | |
| 915 uint32_t newBaudrate = 0; | |
| 916 | |
| 917 switch(sensorType) | |
| 918 { | |
| 919 case SENSOR_CO2: newBaudrate = 9600; | |
| 920 break; | |
| 921 case SENSOR_DIGO2: | |
| 922 default: newBaudrate = 19200; | |
| 923 break; | |
| 924 } | |
| 925 if(lastBaudRate != newBaudrate) | |
| 926 { | |
| 927 UART_ChangeBaudrate(newBaudrate); | |
| 928 lastBaudRate = newBaudrate; | |
| 929 } | |
| 930 } | |
| 931 | |
| 880 void externalInterface_HandleUART() | 932 void externalInterface_HandleUART() |
| 881 { | 933 { |
| 882 static uint8_t retryRequest = 0; | 934 static uint8_t retryRequest = 0; |
| 883 static uint32_t lastRequestTick = 0; | 935 static uint32_t lastRequestTick = 0; |
| 884 static uint32_t TriggerTick = 0; | 936 static uint32_t TriggerTick = 0; |
| 896 uartO2_SetChannel(activeUartChannel); | 948 uartO2_SetChannel(activeUartChannel); |
| 897 if(pmap[EXT_INTERFACE_SENSOR_CNT-1] == SENSOR_MUX) | 949 if(pmap[EXT_INTERFACE_SENSOR_CNT-1] == SENSOR_MUX) |
| 898 { | 950 { |
| 899 UART_MUX_SelectAddress(activeUartChannel); | 951 UART_MUX_SelectAddress(activeUartChannel); |
| 900 } | 952 } |
| 953 externalInterface_CheckBaudrate(pmap[activeUartChannel + EXT_INTERFACE_MUX_OFFSET]); | |
| 901 UART_FlushRxBuffer(); | 954 UART_FlushRxBuffer(); |
| 902 } | 955 } |
| 903 | 956 |
| 904 if(externalInterfaceMuxReqIntervall != 0xFFFF) | 957 if(externalInterfaceMuxReqIntervall != 0xFFFF) |
| 905 { | 958 { |
| 906 if(externalInterface_SensorState[activeSensorId] == UART_O2_INIT) | 959 if(externalInterface_SensorState[activeSensorId] == UART_COMMON_INIT) |
| 907 { | 960 { |
| 908 lastRequestTick = tick; | 961 lastRequestTick = tick; |
| 909 TriggerTick = tick - 10; /* just to make sure control is triggered */ | 962 TriggerTick = tick - 10; /* just to make sure control is triggered */ |
| 910 timeToTrigger = 1; | 963 timeToTrigger = 1; |
| 911 retryRequest = 0; | 964 retryRequest = 0; |
| 928 TriggerTick = tick; | 981 TriggerTick = tick; |
| 929 retryRequest = 0; | 982 retryRequest = 0; |
| 930 timeToTrigger = 1; | 983 timeToTrigger = 1; |
| 931 | 984 |
| 932 if((externalInterface_SensorState[activeSensorId] == UART_O2_REQ_O2) /* timeout */ | 985 if((externalInterface_SensorState[activeSensorId] == UART_O2_REQ_O2) /* timeout */ |
| 933 || (externalInterface_SensorState[activeSensorId] == UART_O2_REQ_RAW)) | 986 || (externalInterface_SensorState[activeSensorId] == UART_O2_REQ_RAW) |
| 934 { | 987 || (externalInterface_SensorState[activeSensorId] == UART_CO2_OPERATING)) |
| 935 setExternalInterfaceChannel(activeSensorId,0.0); | 988 { |
| 989 switch(pmap[activeSensorId]) | |
| 990 { | |
| 991 case SENSOR_DIGO2: setExternalInterfaceChannel(activeSensorId,0.0); | |
| 992 break; | |
| 993 case SENSOR_CO2: externalInterface_SetCO2Value(0.0); | |
| 994 externalInterface_SetCO2State(0); | |
| 995 break; | |
| 996 default: | |
| 997 break; | |
| 998 } | |
| 936 } | 999 } |
| 937 | 1000 |
| 938 if(pmap[EXT_INTERFACE_SENSOR_CNT-1] == SENSOR_MUX) /* select next sensor if mux is connected */ | 1001 if(pmap[EXT_INTERFACE_SENSOR_CNT-1] == SENSOR_MUX) /* select next sensor if mux is connected */ |
| 939 { | 1002 { |
| 940 if(activeUartChannel < MAX_MUX_CHANNEL) | 1003 if(activeUartChannel < MAX_MUX_CHANNEL) |
| 942 index = ExternalInterface_SelectUsedMuxChannel(activeUartChannel); | 1005 index = ExternalInterface_SelectUsedMuxChannel(activeUartChannel); |
| 943 if(index != activeUartChannel) | 1006 if(index != activeUartChannel) |
| 944 { | 1007 { |
| 945 timeToTrigger = 100; | 1008 timeToTrigger = 100; |
| 946 activeUartChannel = index; | 1009 activeUartChannel = index; |
| 947 if(pmap[index + EXT_INTERFACE_MUX_OFFSET] == SENSOR_DIGO2) | 1010 if((pmap[index + EXT_INTERFACE_MUX_OFFSET] == SENSOR_DIGO2) |
| 1011 || (pmap[index + EXT_INTERFACE_MUX_OFFSET] == SENSOR_CO2)) | |
| 948 { | 1012 { |
| 949 uartO2_SetChannel(activeUartChannel); | 1013 uartO2_SetChannel(activeUartChannel); |
| 1014 externalInterface_CheckBaudrate(SENSOR_MUX); | |
| 950 UART_MUX_SelectAddress(activeUartChannel); | 1015 UART_MUX_SelectAddress(activeUartChannel); |
| 1016 externalInterface_CheckBaudrate(pmap[activeUartChannel + EXT_INTERFACE_MUX_OFFSET]); | |
| 951 } | 1017 } |
| 952 } | 1018 } |
| 953 } | 1019 } |
| 954 } | 1020 } |
| 955 else | 1021 else |
| 963 switch (pmap[activeSensorId]) | 1029 switch (pmap[activeSensorId]) |
| 964 { | 1030 { |
| 965 case SENSOR_MUX: | 1031 case SENSOR_MUX: |
| 966 case SENSOR_DIGO2: uartO2_Control(); | 1032 case SENSOR_DIGO2: uartO2_Control(); |
| 967 break; | 1033 break; |
| 968 // case SENSOR_CO2: uartCO2_Control(); | 1034 #ifdef ENABLE_CO2_SUPPORT |
| 1035 case SENSOR_CO2: uartCo2_Control(); | |
| 969 break; | 1036 break; |
| 1037 #endif | |
| 970 default: | 1038 default: |
| 971 break; | 1039 break; |
| 972 } | 1040 } |
| 973 } | 1041 } |
| 974 } | 1042 } |
| 975 | 1043 |
| 976 | 1044 |
| 977 | 1045 |
| 978 #if 0 | 1046 #if 0 |
| 979 #ifdef ENABLE_CO2_SUPPORT | |
| 980 if(externalInterface_GetUARTProtocol() & (EXT_INTERFACE_UART_CO2 >> 8)) | |
| 981 { | |
| 982 UART_HandleCO2Data(); | |
| 983 } | |
| 984 #endif | |
| 985 #ifdef ENABLE_SENTINEL_MODE | 1047 #ifdef ENABLE_SENTINEL_MODE |
| 986 if(externalInterface_GetUARTProtocol() & (EXT_INTERFACE_UART_SENTINEL >> 8)) | 1048 if(externalInterface_GetUARTProtocol() & (EXT_INTERFACE_UART_SENTINEL >> 8)) |
| 987 { | 1049 { |
| 988 UART_HandleSentinelData(); | 1050 UART_HandleSentinelData(); |
| 989 } | 1051 } |
| 990 #endif | 1052 #endif |
| 991 if(externalInterface_GetUARTProtocol() & (EXT_INTERFACE_UART_O2 >> 8)) | |
| 992 { | |
| 993 UART_HandleDigitalO2(); | |
| 994 } | |
| 995 #endif | 1053 #endif |
| 996 | 1054 |
| 997 | 1055 |
| 998 } | 1056 } |
