annotate Small_CPU/Src/uartProtocol_Co2.c @ 1072:8b97003dbb60 Icon_Integration

Improve CO2 calibration: The most common calibration environment for diving is fresh air => ~400ppm co2. Some sensors do not have this setting as default => Calibration to 0ppm. To make sure that a proper calibration reference is set the common used value of 400ppm is not set before starting the calibration. For implementation new states were added to the co2 protocol state maschine. In addition the rx processor is now able to handle two responds parameters.
author Ideenmodellierer
date Thu, 19 Feb 2026 21:37:34 +0100
parents 1f2067cad41b
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