annotate Small_CPU/Src/uartProtocol_Co2.c @ 976:0b81ac558e89 Evo_2_23

Devbugfix UART buffer cleaning: In the previous version a buffer cleaning function was used which resets the ringbuffer read index. As result the processing of data was stopped until the DMA write comes to the index 0. When reaching it the complete buffer was proceeded including possibly invalid data. The usage of the cleanbuffer function was replaced by the flush buffer function (meaning the data is discarded but the data index is maintained). There was already a function for this. Because the function was 99% the same as the read function, it was integrated into the ReadData function. Calling the function with parameter flush = 1 will result in a buffer flush. The workaround of the previous revision was updated to only be applied in case a DiveO2 sensor is operated in stand alone mode.
author Ideenmodellierer
date Wed, 29 Jan 2025 17:21:20 +0100 (7 weeks ago)
parents effadaa3a1f7
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;
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
69 static uint8_t lastComState = 0;
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 uint8_t *pmap = externalInterface_GetSensorMapPointer(0);
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
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
77 if(localComState == UART_CO2_ERROR)
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
78 {
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
79 localComState = lastComState;
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
80 }
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 if(localComState == UART_CO2_INIT)
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
83 {
809
9602a7338f28 DevBugfix CO2 sensor in streaming mode:
Ideenmodellierer
parents: 798
diff changeset
84 CO2Connected = 0;
798
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
85 externalInterface_SetCO2Scale(0.0);
976
0b81ac558e89 Devbugfix UART buffer cleaning:
Ideenmodellierer
parents: 932
diff changeset
86 UART_ReadData(SENSOR_CO2, 1); /* flush buffer */
932
effadaa3a1f7 Cleanup Gnss UART implementation:
Ideenmodellierer
parents: 919
diff changeset
87 UART_StartDMA_Receiption(&Uart1Ctrl);
798
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
88 localComState = UART_CO2_SETUP;
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
89 }
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
90 if(localComState == UART_CO2_SETUP)
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
91 {
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
92 if(externalInterface_GetCO2Scale() == 0.0)
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
93 {
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
94 uartCo2_SendCmd(CO2CMD_GETSCALE, cmdString, &cmdLength);
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
95 }
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
96 else
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
97 {
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
98 localComState = UART_CO2_IDLE;
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
99 }
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
100 }
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
101 else
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
102 {
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
103 if(localComState == UART_CO2_CALIBRATE)
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
104 {
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
105 uartCo2_SendCmd(CO2CMD_CALIBRATE, cmdString, &cmdLength);
809
9602a7338f28 DevBugfix CO2 sensor in streaming mode:
Ideenmodellierer
parents: 798
diff changeset
106 localComState = UART_CO2_IDLE;
798
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
107 }
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
108 else if(pmap[EXT_INTERFACE_SENSOR_CNT-1] == SENSOR_MUX) /* sensor is working in polling mode if mux is connected to avoid interference with other sensors */
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
109 {
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
110 //if(cmdLength == 0) /* poll data */
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
111 if(localComState == UART_CO2_IDLE)
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
112 {
976
0b81ac558e89 Devbugfix UART buffer cleaning:
Ideenmodellierer
parents: 932
diff changeset
113 if(externalInterface_GetCO2Scale() == 0.0)
0b81ac558e89 Devbugfix UART buffer cleaning:
Ideenmodellierer
parents: 932
diff changeset
114 {
0b81ac558e89 Devbugfix UART buffer cleaning:
Ideenmodellierer
parents: 932
diff changeset
115 uartCo2_SendCmd(CO2CMD_GETSCALE, cmdString, &cmdLength);
0b81ac558e89 Devbugfix UART buffer cleaning:
Ideenmodellierer
parents: 932
diff changeset
116 localComState = UART_CO2_SETUP;
0b81ac558e89 Devbugfix UART buffer cleaning:
Ideenmodellierer
parents: 932
diff changeset
117 }
0b81ac558e89 Devbugfix UART buffer cleaning:
Ideenmodellierer
parents: 932
diff changeset
118 else
0b81ac558e89 Devbugfix UART buffer cleaning:
Ideenmodellierer
parents: 932
diff changeset
119 {
0b81ac558e89 Devbugfix UART buffer cleaning:
Ideenmodellierer
parents: 932
diff changeset
120 uartCo2_SendCmd(CO2CMD_GETDATA, cmdString, &cmdLength);
0b81ac558e89 Devbugfix UART buffer cleaning:
Ideenmodellierer
parents: 932
diff changeset
121 localComState = UART_CO2_OPERATING;
0b81ac558e89 Devbugfix UART buffer cleaning:
Ideenmodellierer
parents: 932
diff changeset
122 }
798
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 else /* resend last command */
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
125 {
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
126 UART_SendCmdString(cmdString);
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
127 cmdLength = 0;
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 }
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
130 else
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 localComState = UART_CO2_OPERATING; /* sensor in streaming mode if not connected to mux => operating */
932
effadaa3a1f7 Cleanup Gnss UART implementation:
Ideenmodellierer
parents: 919
diff changeset
133 UART_StartDMA_Receiption(&Uart1Ctrl);
798
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 }
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
136 lastComState = localComState;
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
137 externalInterface_SetSensorState(activeSensor + EXT_INTERFACE_MUX_OFFSET,localComState);
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
138 }
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
139
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
140
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
141 void uartCo2_ProcessData(uint8_t data)
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 static uint8_t dataType = 0;
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
144 static uint32_t dataValue = 0;
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
145 uint8_t activeSensor = externalInterface_GetActiveUartSensor();
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
146 uartCO2Status_t localComState = externalInterface_GetSensorState(activeSensor + EXT_INTERFACE_MUX_OFFSET);
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
147
842
c3dd461ca3f9 Migrated Sentinel protocol to new UART structure:
Ideenmodellierer
parents: 809
diff changeset
148 if(rxState == CO2RX_Ready) /* identify data content */
798
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
149 {
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
150 switch(data)
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 case 'G':
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
153 case 'l':
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
154 case 'D':
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
155 case 'Z':
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
156 case '.': dataType = data;
842
c3dd461ca3f9 Migrated Sentinel protocol to new UART structure:
Ideenmodellierer
parents: 809
diff changeset
157 rxState = CO2RX_Data0;
798
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
158 dataValue = 0;
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
159 break;
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
160 case '?': localComState = UART_CO2_ERROR;
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
161 break;
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
162 default: /* unknown or corrupted => ignore */
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
163 break;
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
164 }
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
165 }
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
166 else if((data >= '0') && (data <= '9'))
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
167 {
842
c3dd461ca3f9 Migrated Sentinel protocol to new UART structure:
Ideenmodellierer
parents: 809
diff changeset
168 if((rxState >= CO2RX_Data0) && (rxState <= CO2RX_Data4))
798
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
169 {
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
170 dataValue = dataValue * 10 + (data - '0');
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
171 rxState++;
842
c3dd461ca3f9 Migrated Sentinel protocol to new UART structure:
Ideenmodellierer
parents: 809
diff changeset
172 if(rxState == CO2RX_Data5)
798
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
173 {
842
c3dd461ca3f9 Migrated Sentinel protocol to new UART structure:
Ideenmodellierer
parents: 809
diff changeset
174 rxState = CO2RX_DataComplete;
798
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
175 }
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
176 }
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
177 else /* protocol error data has max 5 digits */
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
178 {
842
c3dd461ca3f9 Migrated Sentinel protocol to new UART structure:
Ideenmodellierer
parents: 809
diff changeset
179 if(rxState != CO2RX_DataComplete) /* commands will not answer with number values */
809
9602a7338f28 DevBugfix CO2 sensor in streaming mode:
Ideenmodellierer
parents: 798
diff changeset
180 {
842
c3dd461ca3f9 Migrated Sentinel protocol to new UART structure:
Ideenmodellierer
parents: 809
diff changeset
181 rxState = CO2RX_Ready;
809
9602a7338f28 DevBugfix CO2 sensor in streaming mode:
Ideenmodellierer
parents: 798
diff changeset
182 }
798
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
183 }
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
184 }
916
4832981f9af8 External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents: 842
diff changeset
185 else if((data == ' ') || (data == '\n')) /* Abort data detection */
798
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
186 {
842
c3dd461ca3f9 Migrated Sentinel protocol to new UART structure:
Ideenmodellierer
parents: 809
diff changeset
187 if(rxState == CO2RX_DataComplete)
798
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
188 {
809
9602a7338f28 DevBugfix CO2 sensor in streaming mode:
Ideenmodellierer
parents: 798
diff changeset
189 CO2Connected = 1;
9602a7338f28 DevBugfix CO2 sensor in streaming mode:
Ideenmodellierer
parents: 798
diff changeset
190 if(localComState == UART_CO2_SETUP)
9602a7338f28 DevBugfix CO2 sensor in streaming mode:
Ideenmodellierer
parents: 798
diff changeset
191 {
9602a7338f28 DevBugfix CO2 sensor in streaming mode:
Ideenmodellierer
parents: 798
diff changeset
192 if(dataType == '.')
9602a7338f28 DevBugfix CO2 sensor in streaming mode:
Ideenmodellierer
parents: 798
diff changeset
193 {
9602a7338f28 DevBugfix CO2 sensor in streaming mode:
Ideenmodellierer
parents: 798
diff changeset
194 localComState = UART_CO2_IDLE;
9602a7338f28 DevBugfix CO2 sensor in streaming mode:
Ideenmodellierer
parents: 798
diff changeset
195 }
9602a7338f28 DevBugfix CO2 sensor in streaming mode:
Ideenmodellierer
parents: 798
diff changeset
196 }
9602a7338f28 DevBugfix CO2 sensor in streaming mode:
Ideenmodellierer
parents: 798
diff changeset
197 else
9602a7338f28 DevBugfix CO2 sensor in streaming mode:
Ideenmodellierer
parents: 798
diff changeset
198 {
9602a7338f28 DevBugfix CO2 sensor in streaming mode:
Ideenmodellierer
parents: 798
diff changeset
199 localComState = UART_CO2_IDLE;
9602a7338f28 DevBugfix CO2 sensor in streaming mode:
Ideenmodellierer
parents: 798
diff changeset
200 }
798
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
201 if(externalInterface_GetCO2State() == 0)
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
202 {
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
203 externalInterface_SetCO2State(EXT_INTERFACE_33V_ON);
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
204 }
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
205 switch(dataType)
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
206 {
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
207 case 'D': externalInterface_SetCO2SignalStrength(dataValue);
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
208 break;
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
209 case 'l': LED_ZeroOffset = dataValue;
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
210 break;
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
211 case 'Z': externalInterface_SetCO2Value(dataValue);
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
212 break;
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
213 case '.': externalInterface_SetCO2Scale(dataValue);
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
214 break;
842
c3dd461ca3f9 Migrated Sentinel protocol to new UART structure:
Ideenmodellierer
parents: 809
diff changeset
215 default: rxState = CO2RX_Ready;
798
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
216 break;
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
217 }
976
0b81ac558e89 Devbugfix UART buffer cleaning:
Ideenmodellierer
parents: 932
diff changeset
218 rxState = CO2RX_Ready;
798
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
219 }
842
c3dd461ca3f9 Migrated Sentinel protocol to new UART structure:
Ideenmodellierer
parents: 809
diff changeset
220 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
221 {
842
c3dd461ca3f9 Migrated Sentinel protocol to new UART structure:
Ideenmodellierer
parents: 809
diff changeset
222 rxState = CO2RX_Ready;
798
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
223 }
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
224 }
916
4832981f9af8 External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents: 842
diff changeset
225 else
4832981f9af8 External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents: 842
diff changeset
226 {
4832981f9af8 External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents: 842
diff changeset
227 if((rxState >= CO2RX_Data0) && (rxState <= CO2RX_Data4))
4832981f9af8 External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents: 842
diff changeset
228 {
4832981f9af8 External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents: 842
diff changeset
229 rxState = CO2RX_Ready; /* numerical data expected => abort */
4832981f9af8 External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents: 842
diff changeset
230 }
4832981f9af8 External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents: 842
diff changeset
231 }
798
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
232 externalInterface_SetSensorState(activeSensor + EXT_INTERFACE_MUX_OFFSET,localComState);
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
233 }
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
234
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
235 uint8_t uartCo2_isSensorConnected()
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
236 {
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
237 return CO2Connected;
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
238 }
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
239
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
240 #endif
e9eba334b942 Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
diff changeset
241