Mercurial > public > ostc4
comparison Small_CPU/Src/uartProtocol_Co2.c @ 1063:a3f42192da0f Icon_Integration
Always use polling mode for CO2 operation:
In the previous version the CO2 sensor was operated in streaming mode (2 measurements a second) in case it was used stand alone (without multiplexer). This added some complexity to the implementation (setup, error handling etc). To reduce this the sensor will now always be operated in polling mode like it is done for multiplexer operation. To make sure that the correct mode is set a command has been added to the configuration steps.
| author | Ideenmodellierer |
|---|---|
| date | Wed, 11 Feb 2026 18:35:44 +0100 |
| parents | 0b81ac558e89 |
| children | 1f2067cad41b |
comparison
equal
deleted
inserted
replaced
| 1062:785772303f9c | 1063:a3f42192da0f |
|---|---|
| 69 static uint8_t lastComState = 0; | 69 static uint8_t lastComState = 0; |
| 70 | 70 |
| 71 uint8_t activeSensor = externalInterface_GetActiveUartSensor(); | 71 uint8_t activeSensor = externalInterface_GetActiveUartSensor(); |
| 72 uartCO2Status_t localComState = externalInterface_GetSensorState(activeSensor + EXT_INTERFACE_MUX_OFFSET); | 72 uartCO2Status_t localComState = externalInterface_GetSensorState(activeSensor + EXT_INTERFACE_MUX_OFFSET); |
| 73 | 73 |
| 74 uint8_t *pmap = externalInterface_GetSensorMapPointer(0); | |
| 75 | |
| 76 | |
| 77 if(localComState == UART_CO2_ERROR) | 74 if(localComState == UART_CO2_ERROR) |
| 78 { | 75 { |
| 79 localComState = lastComState; | 76 localComState = lastComState; |
| 80 } | 77 } |
| 81 | 78 |
| 93 { | 90 { |
| 94 uartCo2_SendCmd(CO2CMD_GETSCALE, cmdString, &cmdLength); | 91 uartCo2_SendCmd(CO2CMD_GETSCALE, cmdString, &cmdLength); |
| 95 } | 92 } |
| 96 else | 93 else |
| 97 { | 94 { |
| 98 localComState = UART_CO2_IDLE; | 95 localComState = UART_CO2_MODE; |
| 99 } | 96 } |
| 97 } | |
| 98 else if(localComState == UART_CO2_MODE) | |
| 99 { | |
| 100 uartCo2_SendCmd(CO2CMD_MODE_POLL, cmdString, &cmdLength); | |
| 100 } | 101 } |
| 101 else | 102 else |
| 102 { | 103 { |
| 103 if(localComState == UART_CO2_CALIBRATE) | 104 if(localComState == UART_CO2_CALIBRATE) |
| 104 { | 105 { |
| 105 uartCo2_SendCmd(CO2CMD_CALIBRATE, cmdString, &cmdLength); | 106 uartCo2_SendCmd(CO2CMD_CALIBRATE, cmdString, &cmdLength); |
| 106 localComState = UART_CO2_IDLE; | 107 localComState = UART_CO2_IDLE; |
| 107 } | 108 } |
| 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 */ | 109 else |
| 109 { | 110 { |
| 110 //if(cmdLength == 0) /* poll data */ | |
| 111 if(localComState == UART_CO2_IDLE) | 111 if(localComState == UART_CO2_IDLE) |
| 112 { | 112 { |
| 113 if(externalInterface_GetCO2Scale() == 0.0) | 113 if(externalInterface_GetCO2Scale() == 0.0) |
| 114 { | 114 { |
| 115 uartCo2_SendCmd(CO2CMD_GETSCALE, cmdString, &cmdLength); | 115 uartCo2_SendCmd(CO2CMD_GETSCALE, cmdString, &cmdLength); |
| 125 { | 125 { |
| 126 UART_SendCmdString(cmdString); | 126 UART_SendCmdString(cmdString); |
| 127 cmdLength = 0; | 127 cmdLength = 0; |
| 128 } | 128 } |
| 129 } | 129 } |
| 130 else | |
| 131 { | |
| 132 localComState = UART_CO2_OPERATING; /* sensor in streaming mode if not connected to mux => operating */ | |
| 133 UART_StartDMA_Receiption(&Uart1Ctrl); | |
| 134 } | |
| 135 } | 130 } |
| 136 lastComState = localComState; | 131 lastComState = localComState; |
| 137 externalInterface_SetSensorState(activeSensor + EXT_INTERFACE_MUX_OFFSET,localComState); | 132 externalInterface_SetSensorState(activeSensor + EXT_INTERFACE_MUX_OFFSET,localComState); |
| 138 } | 133 } |
| 139 | 134 |
| 148 if(rxState == CO2RX_Ready) /* identify data content */ | 143 if(rxState == CO2RX_Ready) /* identify data content */ |
| 149 { | 144 { |
| 150 switch(data) | 145 switch(data) |
| 151 { | 146 { |
| 152 case 'G': | 147 case 'G': |
| 148 case 'K': | |
| 153 case 'l': | 149 case 'l': |
| 154 case 'D': | 150 case 'D': |
| 155 case 'Z': | 151 case 'Z': |
| 156 case '.': dataType = data; | 152 case '.': dataType = data; |
| 157 rxState = CO2RX_Data0; | 153 rxState = CO2RX_Data0; |
| 185 else if((data == ' ') || (data == '\n')) /* Abort data detection */ | 181 else if((data == ' ') || (data == '\n')) /* Abort data detection */ |
| 186 { | 182 { |
| 187 if(rxState == CO2RX_DataComplete) | 183 if(rxState == CO2RX_DataComplete) |
| 188 { | 184 { |
| 189 CO2Connected = 1; | 185 CO2Connected = 1; |
| 190 if(localComState == UART_CO2_SETUP) | 186 switch(localComState) |
| 191 { | 187 { |
| 192 if(dataType == '.') | 188 case UART_CO2_SETUP: if(dataType == '.') |
| 193 { | 189 { |
| 194 localComState = UART_CO2_IDLE; | 190 localComState = UART_CO2_IDLE; |
| 195 } | 191 } |
| 196 } | 192 break; |
| 197 else | 193 case UART_CO2_MODE: if((dataType == 'K') && (dataValue == 2)) |
| 198 { | 194 { |
| 199 localComState = UART_CO2_IDLE; | 195 localComState = UART_CO2_IDLE; |
| 200 } | 196 } |
| 197 break; | |
| 198 default: localComState = UART_CO2_IDLE; | |
| 199 break; | |
| 200 } | |
| 201 | |
| 201 if(externalInterface_GetCO2State() == 0) | 202 if(externalInterface_GetCO2State() == 0) |
| 202 { | 203 { |
| 203 externalInterface_SetCO2State(EXT_INTERFACE_33V_ON); | 204 externalInterface_SetCO2State(EXT_INTERFACE_33V_ON); |
| 204 } | 205 } |
| 205 switch(dataType) | 206 switch(dataType) |
