Mercurial > public > ostc4
diff Small_CPU/Src/uartProtocol_Sentinel.c @ 1062:785772303f9c Icon_Integration
Added pressure sensors in Sentnel mode:
The Red Head/Provide pressure and tempstick information on a uart channel together with the O2 data. The support for receiving pressure data has been added to the Sentinel protocol function.
| author | Ideenmodellierer |
|---|---|
| date | Tue, 10 Feb 2026 19:36:05 +0100 |
| parents | effadaa3a1f7 |
| children |
line wrap: on
line diff
--- a/Small_CPU/Src/uartProtocol_Sentinel.c Sat Feb 07 21:39:40 2026 +0100 +++ b/Small_CPU/Src/uartProtocol_Sentinel.c Tue Feb 10 19:36:05 2026 +0100 @@ -26,7 +26,7 @@ #ifdef ENABLE_SENTINEL_MODE -static uint8_t SentinelConnected = 0; /* Binary indicator if a sensor is connected or not */ +static uint8_t SentinelConnected = 0; /* Binary indicator if a sensor (and what type of subsensor) is connected or not */ static receiveStateSentinel_t rxState = SENTRX_Ready; extern sUartComCtrl Uart1Ctrl; @@ -65,6 +65,10 @@ UART_StartDMA_Receiption(&Uart1Ctrl); localComState = UART_SENTINEL_IDLE; } + if(localComState == UART_SENTINEL_IDLE) + { + localComState = UART_SENTINEL_OPERATING; /* state is only used for timeout detection */ + } externalInterface_SetSensorState(activeSensor + EXT_INTERFACE_MUX_OFFSET,localComState); } @@ -82,14 +86,14 @@ switch(rxState) { - case SENTRX_Ready: if((data >= 'a') && (data <= 'z')) + case SENTRX_Ready: if((data >= 'a') && (data <= 'z')) /* Alive byte */ { rxState = SENTRX_DetectStart; checksum = 0; } break; - case SENTRX_DetectStart: checksum += data; + case SENTRX_DetectStart: checksum += data; /* data available */ if(data == '1') { rxState = SENTRX_SelectData; @@ -102,11 +106,20 @@ } break; - case SENTRX_SelectData: checksum += data; + case SENTRX_SelectData: checksum += data; /* data type */ switch(data) { - case 'T': dataType = data; + case UART_SENTINEL_PRESSURE_O2: /* no '0' spacing for pressure sensors */ + case UART_SENTINEL_PRESSURE_D: dataType = data; + rxState = SENTRX_Data0; + dataValueIdx = 0; + dataValue[0] = 0; break; + case UART_SENTINEL_O2_P: + case UART_SENTINEL_O2_S: + case UART_SENTINEL_TEMPSTICK: dataType = data; + break; + case '0': if(dataType != 0xff) { rxState = SENTRX_Data0; @@ -135,7 +148,14 @@ if((data >= '0') && (data <= '9')) { dataValue[dataValueIdx] = dataValue[dataValueIdx] * 10 + (data - '0'); - rxState++; + if((rxState == SENTRX_Data2) && ((dataType == UART_SENTINEL_PRESSURE_O2) || (dataType == UART_SENTINEL_PRESSURE_D))) + { + rxState = SENTRX_CheckSum; + } + else + { + rxState++; + } } else { @@ -147,35 +167,45 @@ case SENTRX_Data7: checksum += data; if(data == '0') { - rxState++; dataValueIdx++; dataValue[dataValueIdx] = 0; + rxState++; } else { rxState = SENTRX_Ready; } break; - case SENTRX_Data11: rxState = SENTRX_DataComplete; - ConvertByteToHexString(checksum,checksum_str); - if(data == checksum_str[0]) - { - rxState = SENTRX_DataComplete; - } - else - { - rxState = SENTRX_Ready; - } + case SENTRX_CheckSum: ConvertByteToHexString(checksum,checksum_str); + if(data == checksum_str[0]) + { + rxState = SENTRX_DataComplete; + } + else + { + rxState = SENTRX_Ready; + } break; case SENTRX_DataComplete: if(data == checksum_str[1]) { - setExternalInterfaceChannel(0,(float)(dataValue[0] / 10.0)); - setExternalInterfaceChannel(1,(float)(dataValue[1] / 10.0)); - setExternalInterfaceChannel(2,(float)(dataValue[2] / 10.0)); - SentinelConnected = 1; - localComState = UART_SENTINEL_OPERATING; + switch(dataType) + { + case UART_SENTINEL_O2_P: setExternalInterfaceChannel(0,(float)(dataValue[0] / 10.0)); + setExternalInterfaceChannel(1,(float)(dataValue[1] / 10.0)); + setExternalInterfaceChannel(2,(float)(dataValue[2] / 10.0)); + SentinelConnected |= SENTINEL_O2; + break; + case UART_SENTINEL_PRESSURE_O2: externalInterface_SetBottlePressure(0,dataValue[0]); + SentinelConnected |= SENTINEL_PRESSURE; + break; + case UART_SENTINEL_PRESSURE_D: externalInterface_SetBottlePressure(1,dataValue[0]); + SentinelConnected |= SENTINEL_PRESSURE; + break; + case UART_SENTINEL_TEMPSTICK: SentinelConnected |= SENTINEL_TEMPSTICK; + } + localComState = UART_SENTINEL_IDLE; } rxState = SENTRX_Ready; break;
