annotate Small_CPU/Src/uartProtocol_Co2.c @ 1074:ad61a2c9095a Icon_Integration

Forward profile sensor settings to RTE: The profile settings include the sensor map => forward the sensor map matching to the profile to the RTE.
author ideenmodellierer
date Sun, 22 Feb 2026 19:56:43 +0100
parents 8b97003dbb60
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 {
1072
8b97003dbb60 Improve CO2 calibration:
Ideenmodellierer
parents: 1065
diff changeset
45 case CO2CMD_MODE_POLL: *cmdLength = snprintf((char*)cmdString, 20, "K 2\r\n");
798
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
46 break;
1072
8b97003dbb60 Improve CO2 calibration:
Ideenmodellierer
parents: 1065
diff changeset
47 case CO2CMD_MODE_STREAM: *cmdLength = snprintf((char*)cmdString, 20, "K 1\r\n");
8b97003dbb60 Improve CO2 calibration:
Ideenmodellierer
parents: 1065
diff changeset
48 break;
8b97003dbb60 Improve CO2 calibration:
Ideenmodellierer
parents: 1065
diff changeset
49 case CO2CMD_CALIBRATE_H: *cmdLength = snprintf((char*)cmdString, 20, "P 10 1\r\n"); /* set 400ppm as reference => 1 (256) and 144 */
798
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
50 break;
1072
8b97003dbb60 Improve CO2 calibration:
Ideenmodellierer
parents: 1065
diff changeset
51 case CO2CMD_CALIBRATE_L: *cmdLength = snprintf((char*)cmdString, 20, "P 11 144\r\n");
8b97003dbb60 Improve CO2 calibration:
Ideenmodellierer
parents: 1065
diff changeset
52 break;
8b97003dbb60 Improve CO2 calibration:
Ideenmodellierer
parents: 1065
diff changeset
53 case CO2CMD_CALIBRATE: *cmdLength = snprintf((char*)cmdString, 20, "G\r\n");
798
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
54 break;
1072
8b97003dbb60 Improve CO2 calibration:
Ideenmodellierer
parents: 1065
diff changeset
55 case CO2CMD_GETDATA: *cmdLength = snprintf((char*)cmdString, 20, "Q\r\n");
798
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
56 break;
1072
8b97003dbb60 Improve CO2 calibration:
Ideenmodellierer
parents: 1065
diff changeset
57 case CO2CMD_GETSCALE: *cmdLength = snprintf((char*)cmdString, 20, ".\r\n");
798
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
58 break;
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
59 default: *cmdLength = 0;
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
60 break;
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 if(cmdLength != 0)
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 UART_SendCmdString(cmdString);
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
65 }
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
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
68
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
69 void uartCo2_Control(void)
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
70 {
1072
8b97003dbb60 Improve CO2 calibration:
Ideenmodellierer
parents: 1065
diff changeset
71 static uint8_t cmdString[20];
798
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
72 static uint8_t cmdLength = 0;
1065
1f2067cad41b Mixed sensor operation improvment:
Ideenmodellierer
parents: 1063
diff changeset
73 static uint8_t lastComState = UART_CO2_INIT;
798
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
74
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
75 uint8_t activeSensor = externalInterface_GetActiveUartSensor();
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
76 uartCO2Status_t localComState = externalInterface_GetSensorState(activeSensor + EXT_INTERFACE_MUX_OFFSET);
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 if(localComState == UART_CO2_ERROR)
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
79 {
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
80 localComState = lastComState;
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
81 }
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
82
1065
1f2067cad41b Mixed sensor operation improvment:
Ideenmodellierer
parents: 1063
diff changeset
83 switch(localComState)
798
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
84 {
1065
1f2067cad41b Mixed sensor operation improvment:
Ideenmodellierer
parents: 1063
diff changeset
85 case UART_CO2_INIT: CO2Connected = 0;
1f2067cad41b Mixed sensor operation improvment:
Ideenmodellierer
parents: 1063
diff changeset
86 externalInterface_SetCO2Scale(0.0);
1f2067cad41b Mixed sensor operation improvment:
Ideenmodellierer
parents: 1063
diff changeset
87 UART_ReadData(SENSOR_CO2, 1); /* flush buffer */
1f2067cad41b Mixed sensor operation improvment:
Ideenmodellierer
parents: 1063
diff changeset
88 UART_StartDMA_Receiption(&Uart1Ctrl);
1f2067cad41b Mixed sensor operation improvment:
Ideenmodellierer
parents: 1063
diff changeset
89 localComState = UART_CO2_SETUP;
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 break;
1f2067cad41b Mixed sensor operation improvment:
Ideenmodellierer
parents: 1063
diff changeset
92 case UART_CO2_SETUP: if(externalInterface_GetCO2Scale() == 0.0)
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_GETSCALE, cmdString, &cmdLength);
1f2067cad41b Mixed sensor operation improvment:
Ideenmodellierer
parents: 1063
diff changeset
95 }
1f2067cad41b Mixed sensor operation improvment:
Ideenmodellierer
parents: 1063
diff changeset
96 else
1f2067cad41b Mixed sensor operation improvment:
Ideenmodellierer
parents: 1063
diff changeset
97 {
1f2067cad41b Mixed sensor operation improvment:
Ideenmodellierer
parents: 1063
diff changeset
98 uartCo2_SendCmd(CO2CMD_MODE_POLL, cmdString, &cmdLength);
1f2067cad41b Mixed sensor operation improvment:
Ideenmodellierer
parents: 1063
diff changeset
99 localComState = UART_CO2_MODE;
1f2067cad41b Mixed sensor operation improvment:
Ideenmodellierer
parents: 1063
diff changeset
100 }
1f2067cad41b Mixed sensor operation improvment:
Ideenmodellierer
parents: 1063
diff changeset
101 break;
1f2067cad41b Mixed sensor operation improvment:
Ideenmodellierer
parents: 1063
diff changeset
102 case UART_CO2_MODE: uartCo2_SendCmd(CO2CMD_MODE_POLL, cmdString, &cmdLength);
1f2067cad41b Mixed sensor operation improvment:
Ideenmodellierer
parents: 1063
diff changeset
103 break;
1072
8b97003dbb60 Improve CO2 calibration:
Ideenmodellierer
parents: 1065
diff changeset
104 case UART_CO2_CALIBRATE_H: uartCo2_SendCmd(CO2CMD_CALIBRATE_H, cmdString, &cmdLength);
8b97003dbb60 Improve CO2 calibration:
Ideenmodellierer
parents: 1065
diff changeset
105 break;
8b97003dbb60 Improve CO2 calibration:
Ideenmodellierer
parents: 1065
diff changeset
106 case UART_CO2_CALIBRATE_L: uartCo2_SendCmd(CO2CMD_CALIBRATE_L, cmdString, &cmdLength);
8b97003dbb60 Improve CO2 calibration:
Ideenmodellierer
parents: 1065
diff changeset
107 break;
1065
1f2067cad41b Mixed sensor operation improvment:
Ideenmodellierer
parents: 1063
diff changeset
108 case UART_CO2_CALIBRATE: uartCo2_SendCmd(CO2CMD_CALIBRATE, cmdString, &cmdLength);
1f2067cad41b Mixed sensor operation improvment:
Ideenmodellierer
parents: 1063
diff changeset
109 localComState = UART_CO2_IDLE;
1f2067cad41b Mixed sensor operation improvment:
Ideenmodellierer
parents: 1063
diff changeset
110 break;
1f2067cad41b Mixed sensor operation improvment:
Ideenmodellierer
parents: 1063
diff changeset
111 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
112 {
1f2067cad41b Mixed sensor operation improvment:
Ideenmodellierer
parents: 1063
diff changeset
113 uartCo2_SendCmd(CO2CMD_GETSCALE, cmdString, &cmdLength);
1f2067cad41b Mixed sensor operation improvment:
Ideenmodellierer
parents: 1063
diff changeset
114 localComState = UART_CO2_SETUP;
1f2067cad41b Mixed sensor operation improvment:
Ideenmodellierer
parents: 1063
diff changeset
115 }
1f2067cad41b Mixed sensor operation improvment:
Ideenmodellierer
parents: 1063
diff changeset
116 else
1f2067cad41b Mixed sensor operation improvment:
Ideenmodellierer
parents: 1063
diff changeset
117 {
1f2067cad41b Mixed sensor operation improvment:
Ideenmodellierer
parents: 1063
diff changeset
118 uartCo2_SendCmd(CO2CMD_GETDATA, cmdString, &cmdLength);
1f2067cad41b Mixed sensor operation improvment:
Ideenmodellierer
parents: 1063
diff changeset
119 localComState = UART_CO2_OPERATING;
1f2067cad41b Mixed sensor operation improvment:
Ideenmodellierer
parents: 1063
diff changeset
120 }
1f2067cad41b Mixed sensor operation improvment:
Ideenmodellierer
parents: 1063
diff changeset
121 break;
1f2067cad41b Mixed sensor operation improvment:
Ideenmodellierer
parents: 1063
diff changeset
122 default: if(cmdLength != 0)
1f2067cad41b Mixed sensor operation improvment:
Ideenmodellierer
parents: 1063
diff changeset
123 {
1f2067cad41b Mixed sensor operation improvment:
Ideenmodellierer
parents: 1063
diff changeset
124 UART_SendCmdString(cmdString); /* resend last command */
1f2067cad41b Mixed sensor operation improvment:
Ideenmodellierer
parents: 1063
diff changeset
125 cmdLength = 0;
1f2067cad41b Mixed sensor operation improvment:
Ideenmodellierer
parents: 1063
diff changeset
126 }
1f2067cad41b Mixed sensor operation improvment:
Ideenmodellierer
parents: 1063
diff changeset
127 break;
798
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
128 }
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
129 lastComState = localComState;
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
130 externalInterface_SetSensorState(activeSensor + EXT_INTERFACE_MUX_OFFSET,localComState);
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
131 }
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
132
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
133 void uartCo2_ProcessData(uint8_t data)
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
134 {
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
135 static uint8_t dataType = 0;
1072
8b97003dbb60 Improve CO2 calibration:
Ideenmodellierer
parents: 1065
diff changeset
136 static uint32_t dataValue[3];
8b97003dbb60 Improve CO2 calibration:
Ideenmodellierer
parents: 1065
diff changeset
137 static uint8_t dataIndex = 0;
798
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
138 uint8_t activeSensor = externalInterface_GetActiveUartSensor();
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
139 uartCO2Status_t localComState = externalInterface_GetSensorState(activeSensor + EXT_INTERFACE_MUX_OFFSET);
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
140
842
c3dd461ca3f9 Migrated Sentinel protocol to new UART structure:
Ideenmodellierer
parents: 809
diff changeset
141 if(rxState == CO2RX_Ready) /* identify data content */
798
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
142 {
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
143 switch(data)
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
144 {
1072
8b97003dbb60 Improve CO2 calibration:
Ideenmodellierer
parents: 1065
diff changeset
145 case 'P':
798
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
146 case 'G':
1063
a3f42192da0f Always use polling mode for CO2 operation:
Ideenmodellierer
parents: 976
diff changeset
147 case 'K':
798
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
148 case 'l':
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
149 case 'D':
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
150 case 'Z':
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
151 case '.': dataType = data;
842
c3dd461ca3f9 Migrated Sentinel protocol to new UART structure:
Ideenmodellierer
parents: 809
diff changeset
152 rxState = CO2RX_Data0;
1072
8b97003dbb60 Improve CO2 calibration:
Ideenmodellierer
parents: 1065
diff changeset
153 dataValue[0] = 0;
8b97003dbb60 Improve CO2 calibration:
Ideenmodellierer
parents: 1065
diff changeset
154 dataIndex = 0;
798
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
155 break;
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
156 case '?': localComState = UART_CO2_ERROR;
1065
1f2067cad41b Mixed sensor operation improvment:
Ideenmodellierer
parents: 1063
diff changeset
157 rxState = CO2RX_Ready;
798
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
158 break;
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
159 default: /* unknown or corrupted => ignore */
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
160 break;
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
161 }
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
162 }
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
163 else if((data >= '0') && (data <= '9'))
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
164 {
1072
8b97003dbb60 Improve CO2 calibration:
Ideenmodellierer
parents: 1065
diff changeset
165 if((rxState >= CO2RX_Data0) && (rxState <= CO2RX_Data9))
798
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
166 {
1072
8b97003dbb60 Improve CO2 calibration:
Ideenmodellierer
parents: 1065
diff changeset
167 dataValue[dataIndex] = dataValue[dataIndex] * 10 + (data - '0');
1065
1f2067cad41b Mixed sensor operation improvment:
Ideenmodellierer
parents: 1063
diff changeset
168
1072
8b97003dbb60 Improve CO2 calibration:
Ideenmodellierer
parents: 1065
diff changeset
169 switch (dataType)
798
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
170 {
1072
8b97003dbb60 Improve CO2 calibration:
Ideenmodellierer
parents: 1065
diff changeset
171 case 'G':
8b97003dbb60 Improve CO2 calibration:
Ideenmodellierer
parents: 1065
diff changeset
172 case 'K':
8b97003dbb60 Improve CO2 calibration:
Ideenmodellierer
parents: 1065
diff changeset
173 case 'l':
8b97003dbb60 Improve CO2 calibration:
Ideenmodellierer
parents: 1065
diff changeset
174 case 'D':
8b97003dbb60 Improve CO2 calibration:
Ideenmodellierer
parents: 1065
diff changeset
175 case 'Z':
8b97003dbb60 Improve CO2 calibration:
Ideenmodellierer
parents: 1065
diff changeset
176 case '.':
8b97003dbb60 Improve CO2 calibration:
Ideenmodellierer
parents: 1065
diff changeset
177 default: if((rxState == CO2RX_Data4))
8b97003dbb60 Improve CO2 calibration:
Ideenmodellierer
parents: 1065
diff changeset
178 {
8b97003dbb60 Improve CO2 calibration:
Ideenmodellierer
parents: 1065
diff changeset
179 rxState = CO2RX_DataComplete; /* just one value to be received */
8b97003dbb60 Improve CO2 calibration:
Ideenmodellierer
parents: 1065
diff changeset
180 }
8b97003dbb60 Improve CO2 calibration:
Ideenmodellierer
parents: 1065
diff changeset
181 else
8b97003dbb60 Improve CO2 calibration:
Ideenmodellierer
parents: 1065
diff changeset
182 {
8b97003dbb60 Improve CO2 calibration:
Ideenmodellierer
parents: 1065
diff changeset
183 rxState++;
8b97003dbb60 Improve CO2 calibration:
Ideenmodellierer
parents: 1065
diff changeset
184 }
8b97003dbb60 Improve CO2 calibration:
Ideenmodellierer
parents: 1065
diff changeset
185 break;
8b97003dbb60 Improve CO2 calibration:
Ideenmodellierer
parents: 1065
diff changeset
186 case 'P': if(rxState == CO2RX_Data9) /* get second parameter */
8b97003dbb60 Improve CO2 calibration:
Ideenmodellierer
parents: 1065
diff changeset
187 {
8b97003dbb60 Improve CO2 calibration:
Ideenmodellierer
parents: 1065
diff changeset
188 rxState = CO2RX_DataComplete;
8b97003dbb60 Improve CO2 calibration:
Ideenmodellierer
parents: 1065
diff changeset
189 }
8b97003dbb60 Improve CO2 calibration:
Ideenmodellierer
parents: 1065
diff changeset
190 else
8b97003dbb60 Improve CO2 calibration:
Ideenmodellierer
parents: 1065
diff changeset
191 {
8b97003dbb60 Improve CO2 calibration:
Ideenmodellierer
parents: 1065
diff changeset
192 rxState++;
8b97003dbb60 Improve CO2 calibration:
Ideenmodellierer
parents: 1065
diff changeset
193 }
8b97003dbb60 Improve CO2 calibration:
Ideenmodellierer
parents: 1065
diff changeset
194 break;
1065
1f2067cad41b Mixed sensor operation improvment:
Ideenmodellierer
parents: 1063
diff changeset
195 }
798
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
196 }
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
197 else /* protocol error data has max 5 digits */
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
198 {
842
c3dd461ca3f9 Migrated Sentinel protocol to new UART structure:
Ideenmodellierer
parents: 809
diff changeset
199 if(rxState != CO2RX_DataComplete) /* commands will not answer with number values */
809
9602a7338f28 DevBugfix CO2 sensor in streaming mode:
Ideenmodellierer
parents: 798
diff changeset
200 {
842
c3dd461ca3f9 Migrated Sentinel protocol to new UART structure:
Ideenmodellierer
parents: 809
diff changeset
201 rxState = CO2RX_Ready;
809
9602a7338f28 DevBugfix CO2 sensor in streaming mode:
Ideenmodellierer
parents: 798
diff changeset
202 }
798
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
203 }
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
204 }
916
4832981f9af8 External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents: 842
diff changeset
205 else if((data == ' ') || (data == '\n')) /* Abort data detection */
798
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
206 {
842
c3dd461ca3f9 Migrated Sentinel protocol to new UART structure:
Ideenmodellierer
parents: 809
diff changeset
207 if(rxState == CO2RX_DataComplete)
798
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
208 {
809
9602a7338f28 DevBugfix CO2 sensor in streaming mode:
Ideenmodellierer
parents: 798
diff changeset
209 CO2Connected = 1;
1063
a3f42192da0f Always use polling mode for CO2 operation:
Ideenmodellierer
parents: 976
diff changeset
210 switch(localComState)
809
9602a7338f28 DevBugfix CO2 sensor in streaming mode:
Ideenmodellierer
parents: 798
diff changeset
211 {
1063
a3f42192da0f Always use polling mode for CO2 operation:
Ideenmodellierer
parents: 976
diff changeset
212 case UART_CO2_SETUP: if(dataType == '.')
a3f42192da0f Always use polling mode for CO2 operation:
Ideenmodellierer
parents: 976
diff changeset
213 {
1065
1f2067cad41b Mixed sensor operation improvment:
Ideenmodellierer
parents: 1063
diff changeset
214 localComState = UART_CO2_MODE;
1063
a3f42192da0f Always use polling mode for CO2 operation:
Ideenmodellierer
parents: 976
diff changeset
215 }
a3f42192da0f Always use polling mode for CO2 operation:
Ideenmodellierer
parents: 976
diff changeset
216 break;
1072
8b97003dbb60 Improve CO2 calibration:
Ideenmodellierer
parents: 1065
diff changeset
217 case UART_CO2_MODE: if((dataType == 'K') && (dataValue[dataIndex] == 2))
1063
a3f42192da0f Always use polling mode for CO2 operation:
Ideenmodellierer
parents: 976
diff changeset
218 {
a3f42192da0f Always use polling mode for CO2 operation:
Ideenmodellierer
parents: 976
diff changeset
219 localComState = UART_CO2_IDLE;
a3f42192da0f Always use polling mode for CO2 operation:
Ideenmodellierer
parents: 976
diff changeset
220 }
a3f42192da0f Always use polling mode for CO2 operation:
Ideenmodellierer
parents: 976
diff changeset
221 break;
1072
8b97003dbb60 Improve CO2 calibration:
Ideenmodellierer
parents: 1065
diff changeset
222 case UART_CO2_CALIBRATE_H: if((dataType == 'P') && (dataValue[0] == 10) && (dataValue[1] == 1))
8b97003dbb60 Improve CO2 calibration:
Ideenmodellierer
parents: 1065
diff changeset
223 {
8b97003dbb60 Improve CO2 calibration:
Ideenmodellierer
parents: 1065
diff changeset
224 localComState = UART_CO2_CALIBRATE_L;
8b97003dbb60 Improve CO2 calibration:
Ideenmodellierer
parents: 1065
diff changeset
225 }
8b97003dbb60 Improve CO2 calibration:
Ideenmodellierer
parents: 1065
diff changeset
226 else
8b97003dbb60 Improve CO2 calibration:
Ideenmodellierer
parents: 1065
diff changeset
227 {
8b97003dbb60 Improve CO2 calibration:
Ideenmodellierer
parents: 1065
diff changeset
228 localComState = UART_CO2_IDLE;
8b97003dbb60 Improve CO2 calibration:
Ideenmodellierer
parents: 1065
diff changeset
229 }
8b97003dbb60 Improve CO2 calibration:
Ideenmodellierer
parents: 1065
diff changeset
230 break;
8b97003dbb60 Improve CO2 calibration:
Ideenmodellierer
parents: 1065
diff changeset
231 case UART_CO2_CALIBRATE_L: if((dataType == 'P') && (dataValue[0] == 11) && (dataValue[1] == 144))
8b97003dbb60 Improve CO2 calibration:
Ideenmodellierer
parents: 1065
diff changeset
232 {
8b97003dbb60 Improve CO2 calibration:
Ideenmodellierer
parents: 1065
diff changeset
233 localComState = UART_CO2_CALIBRATE;
8b97003dbb60 Improve CO2 calibration:
Ideenmodellierer
parents: 1065
diff changeset
234 }
8b97003dbb60 Improve CO2 calibration:
Ideenmodellierer
parents: 1065
diff changeset
235 else
8b97003dbb60 Improve CO2 calibration:
Ideenmodellierer
parents: 1065
diff changeset
236 {
8b97003dbb60 Improve CO2 calibration:
Ideenmodellierer
parents: 1065
diff changeset
237 localComState = UART_CO2_IDLE;
8b97003dbb60 Improve CO2 calibration:
Ideenmodellierer
parents: 1065
diff changeset
238 }
8b97003dbb60 Improve CO2 calibration:
Ideenmodellierer
parents: 1065
diff changeset
239 break;
1063
a3f42192da0f Always use polling mode for CO2 operation:
Ideenmodellierer
parents: 976
diff changeset
240 default: localComState = UART_CO2_IDLE;
a3f42192da0f Always use polling mode for CO2 operation:
Ideenmodellierer
parents: 976
diff changeset
241 break;
809
9602a7338f28 DevBugfix CO2 sensor in streaming mode:
Ideenmodellierer
parents: 798
diff changeset
242 }
1063
a3f42192da0f Always use polling mode for CO2 operation:
Ideenmodellierer
parents: 976
diff changeset
243
798
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
244 switch(dataType)
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
245 {
1072
8b97003dbb60 Improve CO2 calibration:
Ideenmodellierer
parents: 1065
diff changeset
246 case 'D': externalInterface_SetCO2SignalStrength(dataValue[dataIndex]);
798
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
247 break;
1072
8b97003dbb60 Improve CO2 calibration:
Ideenmodellierer
parents: 1065
diff changeset
248 case 'l': LED_ZeroOffset = dataValue[dataIndex];
798
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
249 break;
1072
8b97003dbb60 Improve CO2 calibration:
Ideenmodellierer
parents: 1065
diff changeset
250 case 'Z': externalInterface_SetCO2Value(dataValue[dataIndex]);
798
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
251 break;
1072
8b97003dbb60 Improve CO2 calibration:
Ideenmodellierer
parents: 1065
diff changeset
252 case '.': externalInterface_SetCO2Scale(dataValue[dataIndex]);
798
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
253 break;
842
c3dd461ca3f9 Migrated Sentinel protocol to new UART structure:
Ideenmodellierer
parents: 809
diff changeset
254 default: rxState = CO2RX_Ready;
798
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
255 break;
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
256 }
976
0b81ac558e89 Devbugfix UART buffer cleaning:
Ideenmodellierer
parents: 932
diff changeset
257 rxState = CO2RX_Ready;
798
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
258 }
1072
8b97003dbb60 Improve CO2 calibration:
Ideenmodellierer
parents: 1065
diff changeset
259 else /* multi parameter */
8b97003dbb60 Improve CO2 calibration:
Ideenmodellierer
parents: 1065
diff changeset
260 {
8b97003dbb60 Improve CO2 calibration:
Ideenmodellierer
parents: 1065
diff changeset
261 if(rxState == CO2RX_Data5)
8b97003dbb60 Improve CO2 calibration:
Ideenmodellierer
parents: 1065
diff changeset
262 {
8b97003dbb60 Improve CO2 calibration:
Ideenmodellierer
parents: 1065
diff changeset
263 switch(dataType)
8b97003dbb60 Improve CO2 calibration:
Ideenmodellierer
parents: 1065
diff changeset
264 {
8b97003dbb60 Improve CO2 calibration:
Ideenmodellierer
parents: 1065
diff changeset
265 case 'P': dataIndex++;
8b97003dbb60 Improve CO2 calibration:
Ideenmodellierer
parents: 1065
diff changeset
266 dataValue[dataIndex] = 0;
8b97003dbb60 Improve CO2 calibration:
Ideenmodellierer
parents: 1065
diff changeset
267 break;
8b97003dbb60 Improve CO2 calibration:
Ideenmodellierer
parents: 1065
diff changeset
268 default:
8b97003dbb60 Improve CO2 calibration:
Ideenmodellierer
parents: 1065
diff changeset
269 break;
8b97003dbb60 Improve CO2 calibration:
Ideenmodellierer
parents: 1065
diff changeset
270 }
8b97003dbb60 Improve CO2 calibration:
Ideenmodellierer
parents: 1065
diff changeset
271 }
8b97003dbb60 Improve CO2 calibration:
Ideenmodellierer
parents: 1065
diff changeset
272 }
8b97003dbb60 Improve CO2 calibration:
Ideenmodellierer
parents: 1065
diff changeset
273 if((rxState != CO2RX_Data0) && (rxState != CO2RX_Data5)) /* reset state machine because message in wrong format */
798
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
274 {
842
c3dd461ca3f9 Migrated Sentinel protocol to new UART structure:
Ideenmodellierer
parents: 809
diff changeset
275 rxState = CO2RX_Ready;
798
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
276 }
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
277 }
916
4832981f9af8 External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents: 842
diff changeset
278 else
4832981f9af8 External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents: 842
diff changeset
279 {
4832981f9af8 External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents: 842
diff changeset
280 if((rxState >= CO2RX_Data0) && (rxState <= CO2RX_Data4))
4832981f9af8 External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents: 842
diff changeset
281 {
4832981f9af8 External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents: 842
diff changeset
282 rxState = CO2RX_Ready; /* numerical data expected => abort */
4832981f9af8 External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents: 842
diff changeset
283 }
4832981f9af8 External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents: 842
diff changeset
284 }
798
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
285 externalInterface_SetSensorState(activeSensor + EXT_INTERFACE_MUX_OFFSET,localComState);
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
286 }
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
287
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
288 uint8_t uartCo2_isSensorConnected()
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
289 {
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
290 return CO2Connected;
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
291 }
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
292
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
293 #endif
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
294