annotate Small_CPU/Src/uartProtocol_Co2.c @ 1065:1f2067cad41b Icon_Integration

Mixed sensor operation improvment: A peak detector has been added to the adc measurement to avoid interferance while UART sensor are taking measurement while adc is active. The previous approach to shift adc into time windows where no UART were active had to be replaced because for the CO2 sensor is continously taking samples without providing a sync signal. In addition the UART MUX switching behavior has been improved (potential rx data received from previous sensor is discarded during channel switch etc.)
author Ideenmodellierer
date Mon, 16 Feb 2026 21:27:26 +0100
parents a3f42192da0f
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
798
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
1 /**
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
2 ******************************************************************************
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
3 * @file uartProtocol_Co2.c
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
4 * @author heinrichs weikamp gmbh
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
5 * @version V0.0.1
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
6 * @date 31-Jul-2023
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
7 * @brief Interface functionality to external, UART based CO2 sensors
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
8 *
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
9 @verbatim
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
10
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
11
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
12 @endverbatim
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
13 ******************************************************************************
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
14 * @attention
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
15 *
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
16 * <h2><center>&copy; COPYRIGHT(c) 2023 heinrichs weikamp</center></h2>
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
17 *
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
18 ******************************************************************************
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
19 */
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
20 /* Includes ------------------------------------------------------------------*/
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
21
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
22 #include <string.h>
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
23 #include <uartProtocol_Co2.h>
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
24 #include "uart.h"
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
25 #include "externalInterface.h"
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
26
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
27 #ifdef ENABLE_CO2_SUPPORT
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
28 static uint8_t CO2Connected = 0; /* Binary indicator if a sensor is connected or not */
842
c3dd461ca3f9 Migrated Sentinel protocol to new UART structure:
Ideenmodellierer
parents: 809
diff changeset
29 static receiveStateCO2_t rxState = CO2RX_Ready;
798
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
30
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
31
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
32
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
33 float LED_Level = 0.0; /* Normalized LED value which may be used as indication for the health status of the sensor */
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
34 float LED_ZeroOffset = 0.0;
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
35 float pCO2 = 0.0;
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
36
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
37
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
38
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
39 void uartCo2_SendCmd(uint8_t CO2Cmd, uint8_t *cmdString, uint8_t *cmdLength)
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
40 {
809
9602a7338f28 DevBugfix CO2 sensor in streaming mode:
Ideenmodellierer
parents: 798
diff changeset
41 *cmdLength = 0;
9602a7338f28 DevBugfix CO2 sensor in streaming mode:
Ideenmodellierer
parents: 798
diff changeset
42
798
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
43 switch (CO2Cmd)
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
44 {
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
45 case CO2CMD_MODE_POLL: *cmdLength = snprintf((char*)cmdString, 10, "K 2\r\n");
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
46 break;
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
47 case CO2CMD_MODE_STREAM: *cmdLength = snprintf((char*)cmdString, 10, "K 1\r\n");
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
48 break;
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
49 case CO2CMD_CALIBRATE: *cmdLength = snprintf((char*)cmdString, 10, "G\r\n");
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
50 break;
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
51 case CO2CMD_GETDATA: *cmdLength = snprintf((char*)cmdString, 10, "Q\r\n");
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
52 break;
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
53 case CO2CMD_GETSCALE: *cmdLength = snprintf((char*)cmdString, 10, ".\r\n");
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
54 break;
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
55 default: *cmdLength = 0;
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
56 break;
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
57 }
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
58 if(cmdLength != 0)
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
59 {
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
60 UART_SendCmdString(cmdString);
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
61 }
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
62 }
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
63
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
64
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
65 void uartCo2_Control(void)
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
66 {
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
67 static uint8_t cmdString[10];
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
68 static uint8_t cmdLength = 0;
1065
1f2067cad41b Mixed sensor operation improvment:
Ideenmodellierer
parents: 1063
diff changeset
69 static uint8_t lastComState = UART_CO2_INIT;
798
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
70
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
71 uint8_t activeSensor = externalInterface_GetActiveUartSensor();
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
72 uartCO2Status_t localComState = externalInterface_GetSensorState(activeSensor + EXT_INTERFACE_MUX_OFFSET);
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
73
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
74 if(localComState == UART_CO2_ERROR)
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
75 {
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
76 localComState = lastComState;
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
77 }
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
78
1065
1f2067cad41b Mixed sensor operation improvment:
Ideenmodellierer
parents: 1063
diff changeset
79 switch(localComState)
798
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
80 {
1065
1f2067cad41b Mixed sensor operation improvment:
Ideenmodellierer
parents: 1063
diff changeset
81 case UART_CO2_INIT: CO2Connected = 0;
1f2067cad41b Mixed sensor operation improvment:
Ideenmodellierer
parents: 1063
diff changeset
82 externalInterface_SetCO2Scale(0.0);
1f2067cad41b Mixed sensor operation improvment:
Ideenmodellierer
parents: 1063
diff changeset
83 UART_ReadData(SENSOR_CO2, 1); /* flush buffer */
1f2067cad41b Mixed sensor operation improvment:
Ideenmodellierer
parents: 1063
diff changeset
84 UART_StartDMA_Receiption(&Uart1Ctrl);
1f2067cad41b Mixed sensor operation improvment:
Ideenmodellierer
parents: 1063
diff changeset
85 localComState = UART_CO2_SETUP;
1f2067cad41b Mixed sensor operation improvment:
Ideenmodellierer
parents: 1063
diff changeset
86 uartCo2_SendCmd(CO2CMD_GETSCALE, cmdString, &cmdLength);
1f2067cad41b Mixed sensor operation improvment:
Ideenmodellierer
parents: 1063
diff changeset
87 break;
1f2067cad41b Mixed sensor operation improvment:
Ideenmodellierer
parents: 1063
diff changeset
88 case UART_CO2_SETUP: if(externalInterface_GetCO2Scale() == 0.0)
1f2067cad41b Mixed sensor operation improvment:
Ideenmodellierer
parents: 1063
diff changeset
89 {
1f2067cad41b Mixed sensor operation improvment:
Ideenmodellierer
parents: 1063
diff changeset
90 uartCo2_SendCmd(CO2CMD_GETSCALE, cmdString, &cmdLength);
1f2067cad41b Mixed sensor operation improvment:
Ideenmodellierer
parents: 1063
diff changeset
91 }
1f2067cad41b Mixed sensor operation improvment:
Ideenmodellierer
parents: 1063
diff changeset
92 else
1f2067cad41b Mixed sensor operation improvment:
Ideenmodellierer
parents: 1063
diff changeset
93 {
1f2067cad41b Mixed sensor operation improvment:
Ideenmodellierer
parents: 1063
diff changeset
94 uartCo2_SendCmd(CO2CMD_MODE_POLL, cmdString, &cmdLength);
1f2067cad41b Mixed sensor operation improvment:
Ideenmodellierer
parents: 1063
diff changeset
95 localComState = UART_CO2_MODE;
1f2067cad41b Mixed sensor operation improvment:
Ideenmodellierer
parents: 1063
diff changeset
96 }
1f2067cad41b Mixed sensor operation improvment:
Ideenmodellierer
parents: 1063
diff changeset
97 break;
1f2067cad41b Mixed sensor operation improvment:
Ideenmodellierer
parents: 1063
diff changeset
98 case UART_CO2_MODE: uartCo2_SendCmd(CO2CMD_MODE_POLL, cmdString, &cmdLength);
1f2067cad41b Mixed sensor operation improvment:
Ideenmodellierer
parents: 1063
diff changeset
99 break;
1f2067cad41b Mixed sensor operation improvment:
Ideenmodellierer
parents: 1063
diff changeset
100 case UART_CO2_CALIBRATE: uartCo2_SendCmd(CO2CMD_CALIBRATE, cmdString, &cmdLength);
1f2067cad41b Mixed sensor operation improvment:
Ideenmodellierer
parents: 1063
diff changeset
101 localComState = UART_CO2_IDLE;
1f2067cad41b Mixed sensor operation improvment:
Ideenmodellierer
parents: 1063
diff changeset
102 break;
1f2067cad41b Mixed sensor operation improvment:
Ideenmodellierer
parents: 1063
diff changeset
103 case UART_CO2_IDLE: if(externalInterface_GetCO2Scale() == 0.0) /* artifact from streaming mode => not needed for polling */
1f2067cad41b Mixed sensor operation improvment:
Ideenmodellierer
parents: 1063
diff changeset
104 {
1f2067cad41b Mixed sensor operation improvment:
Ideenmodellierer
parents: 1063
diff changeset
105 uartCo2_SendCmd(CO2CMD_GETSCALE, cmdString, &cmdLength);
1f2067cad41b Mixed sensor operation improvment:
Ideenmodellierer
parents: 1063
diff changeset
106 localComState = UART_CO2_SETUP;
1f2067cad41b Mixed sensor operation improvment:
Ideenmodellierer
parents: 1063
diff changeset
107 }
1f2067cad41b Mixed sensor operation improvment:
Ideenmodellierer
parents: 1063
diff changeset
108 else
1f2067cad41b Mixed sensor operation improvment:
Ideenmodellierer
parents: 1063
diff changeset
109 {
1f2067cad41b Mixed sensor operation improvment:
Ideenmodellierer
parents: 1063
diff changeset
110 uartCo2_SendCmd(CO2CMD_GETDATA, cmdString, &cmdLength);
1f2067cad41b Mixed sensor operation improvment:
Ideenmodellierer
parents: 1063
diff changeset
111 localComState = UART_CO2_OPERATING;
1f2067cad41b Mixed sensor operation improvment:
Ideenmodellierer
parents: 1063
diff changeset
112 }
1f2067cad41b Mixed sensor operation improvment:
Ideenmodellierer
parents: 1063
diff changeset
113 break;
1f2067cad41b Mixed sensor operation improvment:
Ideenmodellierer
parents: 1063
diff changeset
114 default: if(cmdLength != 0)
1f2067cad41b Mixed sensor operation improvment:
Ideenmodellierer
parents: 1063
diff changeset
115 {
1f2067cad41b Mixed sensor operation improvment:
Ideenmodellierer
parents: 1063
diff changeset
116 UART_SendCmdString(cmdString); /* resend last command */
1f2067cad41b Mixed sensor operation improvment:
Ideenmodellierer
parents: 1063
diff changeset
117 cmdLength = 0;
1f2067cad41b Mixed sensor operation improvment:
Ideenmodellierer
parents: 1063
diff changeset
118 }
1f2067cad41b Mixed sensor operation improvment:
Ideenmodellierer
parents: 1063
diff changeset
119 break;
798
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
120 }
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
121 lastComState = localComState;
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
122 externalInterface_SetSensorState(activeSensor + EXT_INTERFACE_MUX_OFFSET,localComState);
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
123 }
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
124
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
125 void uartCo2_ProcessData(uint8_t data)
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
126 {
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
127 static uint8_t dataType = 0;
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
128 static uint32_t dataValue = 0;
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
129 uint8_t activeSensor = externalInterface_GetActiveUartSensor();
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
130 uartCO2Status_t localComState = externalInterface_GetSensorState(activeSensor + EXT_INTERFACE_MUX_OFFSET);
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
131
842
c3dd461ca3f9 Migrated Sentinel protocol to new UART structure:
Ideenmodellierer
parents: 809
diff changeset
132 if(rxState == CO2RX_Ready) /* identify data content */
798
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
133 {
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
134 switch(data)
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
135 {
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
136 case 'G':
1063
a3f42192da0f Always use polling mode for CO2 operation:
Ideenmodellierer
parents: 976
diff changeset
137 case 'K':
798
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
138 case 'l':
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
139 case 'D':
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
140 case 'Z':
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
141 case '.': dataType = data;
842
c3dd461ca3f9 Migrated Sentinel protocol to new UART structure:
Ideenmodellierer
parents: 809
diff changeset
142 rxState = CO2RX_Data0;
798
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
143 dataValue = 0;
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
144 break;
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
145 case '?': localComState = UART_CO2_ERROR;
1065
1f2067cad41b Mixed sensor operation improvment:
Ideenmodellierer
parents: 1063
diff changeset
146 rxState = CO2RX_Ready;
798
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
147 break;
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
148 default: /* unknown or corrupted => ignore */
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
149 break;
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
150 }
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
151 }
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
152 else if((data >= '0') && (data <= '9'))
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
153 {
842
c3dd461ca3f9 Migrated Sentinel protocol to new UART structure:
Ideenmodellierer
parents: 809
diff changeset
154 if((rxState >= CO2RX_Data0) && (rxState <= CO2RX_Data4))
798
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
155 {
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
156 dataValue = dataValue * 10 + (data - '0');
1065
1f2067cad41b Mixed sensor operation improvment:
Ideenmodellierer
parents: 1063
diff changeset
157
1f2067cad41b Mixed sensor operation improvment:
Ideenmodellierer
parents: 1063
diff changeset
158 if((rxState == CO2RX_Data4))
798
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
159 {
842
c3dd461ca3f9 Migrated Sentinel protocol to new UART structure:
Ideenmodellierer
parents: 809
diff changeset
160 rxState = CO2RX_DataComplete;
798
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
161 }
1065
1f2067cad41b Mixed sensor operation improvment:
Ideenmodellierer
parents: 1063
diff changeset
162 else
1f2067cad41b Mixed sensor operation improvment:
Ideenmodellierer
parents: 1063
diff changeset
163 {
1f2067cad41b Mixed sensor operation improvment:
Ideenmodellierer
parents: 1063
diff changeset
164 rxState++;
1f2067cad41b Mixed sensor operation improvment:
Ideenmodellierer
parents: 1063
diff changeset
165 }
798
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
166 }
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
167 else /* protocol error data has max 5 digits */
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
168 {
842
c3dd461ca3f9 Migrated Sentinel protocol to new UART structure:
Ideenmodellierer
parents: 809
diff changeset
169 if(rxState != CO2RX_DataComplete) /* commands will not answer with number values */
809
9602a7338f28 DevBugfix CO2 sensor in streaming mode:
Ideenmodellierer
parents: 798
diff changeset
170 {
842
c3dd461ca3f9 Migrated Sentinel protocol to new UART structure:
Ideenmodellierer
parents: 809
diff changeset
171 rxState = CO2RX_Ready;
809
9602a7338f28 DevBugfix CO2 sensor in streaming mode:
Ideenmodellierer
parents: 798
diff changeset
172 }
798
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
173 }
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
174 }
916
4832981f9af8 External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents: 842
diff changeset
175 else if((data == ' ') || (data == '\n')) /* Abort data detection */
798
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
176 {
842
c3dd461ca3f9 Migrated Sentinel protocol to new UART structure:
Ideenmodellierer
parents: 809
diff changeset
177 if(rxState == CO2RX_DataComplete)
798
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
178 {
809
9602a7338f28 DevBugfix CO2 sensor in streaming mode:
Ideenmodellierer
parents: 798
diff changeset
179 CO2Connected = 1;
1063
a3f42192da0f Always use polling mode for CO2 operation:
Ideenmodellierer
parents: 976
diff changeset
180 switch(localComState)
809
9602a7338f28 DevBugfix CO2 sensor in streaming mode:
Ideenmodellierer
parents: 798
diff changeset
181 {
1063
a3f42192da0f Always use polling mode for CO2 operation:
Ideenmodellierer
parents: 976
diff changeset
182 case UART_CO2_SETUP: if(dataType == '.')
a3f42192da0f Always use polling mode for CO2 operation:
Ideenmodellierer
parents: 976
diff changeset
183 {
1065
1f2067cad41b Mixed sensor operation improvment:
Ideenmodellierer
parents: 1063
diff changeset
184 localComState = UART_CO2_MODE;
1063
a3f42192da0f Always use polling mode for CO2 operation:
Ideenmodellierer
parents: 976
diff changeset
185 }
a3f42192da0f Always use polling mode for CO2 operation:
Ideenmodellierer
parents: 976
diff changeset
186 break;
a3f42192da0f Always use polling mode for CO2 operation:
Ideenmodellierer
parents: 976
diff changeset
187 case UART_CO2_MODE: if((dataType == 'K') && (dataValue == 2))
a3f42192da0f Always use polling mode for CO2 operation:
Ideenmodellierer
parents: 976
diff changeset
188 {
a3f42192da0f Always use polling mode for CO2 operation:
Ideenmodellierer
parents: 976
diff changeset
189 localComState = UART_CO2_IDLE;
a3f42192da0f Always use polling mode for CO2 operation:
Ideenmodellierer
parents: 976
diff changeset
190 }
a3f42192da0f Always use polling mode for CO2 operation:
Ideenmodellierer
parents: 976
diff changeset
191 break;
a3f42192da0f Always use polling mode for CO2 operation:
Ideenmodellierer
parents: 976
diff changeset
192 default: localComState = UART_CO2_IDLE;
a3f42192da0f Always use polling mode for CO2 operation:
Ideenmodellierer
parents: 976
diff changeset
193 break;
809
9602a7338f28 DevBugfix CO2 sensor in streaming mode:
Ideenmodellierer
parents: 798
diff changeset
194 }
1063
a3f42192da0f Always use polling mode for CO2 operation:
Ideenmodellierer
parents: 976
diff changeset
195
798
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
196 switch(dataType)
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
197 {
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
198 case 'D': externalInterface_SetCO2SignalStrength(dataValue);
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
199 break;
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
200 case 'l': LED_ZeroOffset = dataValue;
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
201 break;
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
202 case 'Z': externalInterface_SetCO2Value(dataValue);
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
203 break;
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
204 case '.': externalInterface_SetCO2Scale(dataValue);
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
205 break;
842
c3dd461ca3f9 Migrated Sentinel protocol to new UART structure:
Ideenmodellierer
parents: 809
diff changeset
206 default: rxState = CO2RX_Ready;
798
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
207 break;
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
208 }
976
0b81ac558e89 Devbugfix UART buffer cleaning:
Ideenmodellierer
parents: 932
diff changeset
209 rxState = CO2RX_Ready;
798
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
210 }
842
c3dd461ca3f9 Migrated Sentinel protocol to new UART structure:
Ideenmodellierer
parents: 809
diff changeset
211 if(rxState != CO2RX_Data0) /* reset state machine because message in wrong format */
798
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
212 {
842
c3dd461ca3f9 Migrated Sentinel protocol to new UART structure:
Ideenmodellierer
parents: 809
diff changeset
213 rxState = CO2RX_Ready;
798
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
214 }
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
215 }
916
4832981f9af8 External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents: 842
diff changeset
216 else
4832981f9af8 External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents: 842
diff changeset
217 {
4832981f9af8 External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents: 842
diff changeset
218 if((rxState >= CO2RX_Data0) && (rxState <= CO2RX_Data4))
4832981f9af8 External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents: 842
diff changeset
219 {
4832981f9af8 External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents: 842
diff changeset
220 rxState = CO2RX_Ready; /* numerical data expected => abort */
4832981f9af8 External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents: 842
diff changeset
221 }
4832981f9af8 External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents: 842
diff changeset
222 }
798
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
223 externalInterface_SetSensorState(activeSensor + EXT_INTERFACE_MUX_OFFSET,localComState);
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
224 }
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
225
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
226 uint8_t uartCo2_isSensorConnected()
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
227 {
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
228 return CO2Connected;
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
229 }
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
230
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
231 #endif
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
232