diff Small_CPU/Src/uart.c @ 842:c3dd461ca3f9 Evo_2_23

Migrated Sentinel protocol to new UART structure: The Sentinel protocol had not been migrated to the new UART structure which was introduced with the introduction of the UART MUX. The Sentinel is now supported by autodetection again (development version only)
author Ideenmodellierer
date Mon, 15 Jan 2024 21:44:18 +0100
parents 9602a7338f28
children ad96f99ebc78
line wrap: on
line diff
--- a/Small_CPU/Src/uart.c	Sun Jan 07 21:25:34 2024 +0100
+++ b/Small_CPU/Src/uart.c	Mon Jan 15 21:44:18 2024 +0100
@@ -22,6 +22,7 @@
 #include "uart.h"
 #include "uartProtocol_O2.h"
 #include "uartProtocol_Co2.h"
+#include "uartProtocol_Sentinel.h"
 #include "externalInterface.h"
 #include "data_exchange.h"
 #include <string.h>	/* memset */
@@ -44,9 +45,6 @@
 static uint8_t dmaActive;								/* Indicator if DMA reception needs to be started */
 
 
-static uint8_t SentinelConnected = 0;					/* Binary indicator if a sensor is connected or not */
-
-
 /* Exported functions --------------------------------------------------------*/
 
 
@@ -72,9 +70,6 @@
   lastCmdIndex = 0;
   rxWriteIndex = 0;
   dmaActive = 0;
-
-  SentinelConnected = 0;
-
 }
 
 void MX_USART1_UART_DeInit(void)
@@ -166,28 +161,6 @@
 	}
 	*puint64 = result;
 }
-void ConvertByteToHexString(uint8_t byte, char* str)
-{
-	uint8_t worker = 0;
-	uint8_t digit = 0;
-	uint8_t digitCnt = 1;
-
-	worker = byte;
-	while((worker!=0) && (digitCnt != 255))
-	{
-		digit = worker % 16;
-		if( digit < 10)
-		{
-			digit += '0';
-		}
-		else
-		{
-			digit += 'A' - 10;
-		}
-		str[digitCnt--]= digit;
-		worker = worker / 16;
-	}
-}
 
 void UART_StartDMA_Receiption()
 {
@@ -223,164 +196,6 @@
 	}
 }
 
-#ifdef ENABLE_SENTINEL_MODE
-void UART_HandleSentinelData(void)
-{
-	uint8_t localRX = rxReadIndex;
-	static uint8_t dataType = 0;
-	static uint32_t dataValue[3];
-	static uint8_t dataValueIdx = 0;
-	static receiveState_t rxState = RX_Ready;
-	static uint32_t lastReceiveTick = 0;
-	static uint8_t lastAlive = 0;
-	static uint8_t curAlive = 0;
-	static uint8_t checksum = 0;
-	static char checksum_str[]="00";
-
-	while((rxBuffer[localRX]!=0))
-	{
-		lastReceiveTick = HAL_GetTick();
-
-		switch(rxState)
-		{
-			case RX_Ready:	if((rxBuffer[localRX] >= 'a') && (rxBuffer[localRX] <= 'z'))
-							{
-								rxState = RX_DetectStart;
-								curAlive = rxBuffer[localRX];
-								checksum = 0;
-							}
-					break;
-
-			case RX_DetectStart: 	checksum += rxBuffer[localRX];
-									if(rxBuffer[localRX] == '1')
-								 	{
-								 		rxState = RX_SelectData;
-								 		dataType = 0xFF;
-
-								 	}
-									else
-									{
-										rxState = RX_Ready;
-									}
-					break;
-
-			case RX_SelectData:		checksum += rxBuffer[localRX];
-									switch(rxBuffer[localRX])
-									{
-										case 'T':	dataType = rxBuffer[localRX];
-											break;
-										case '0': 	if(dataType != 0xff)
-													{
-														rxState = RX_Data0;
-														dataValueIdx = 0;
-														dataValue[0] = 0;
-
-													}
-													else
-													{
-														rxState = RX_Ready;
-													}
-											break;
-										default:	rxState = RX_Ready;
-									}
-					break;
-
-			case RX_Data0:
-			case RX_Data1:
-			case RX_Data2:
-			case RX_Data4:
-			case RX_Data5:
-			case RX_Data6:
-			case RX_Data8:
-			case RX_Data9:
-			case RX_Data10: checksum += rxBuffer[localRX];
-							if((rxBuffer[localRX] >= '0') && (rxBuffer[localRX] <= '9'))
-							{
-								dataValue[dataValueIdx] = dataValue[dataValueIdx] * 10 + (rxBuffer[localRX] - '0');
-								rxState++;
-							}
-							else
-							{
-								rxState = RX_Ready;
-							}
-					break;
-
-			case RX_Data3:
-			case RX_Data7:	checksum += rxBuffer[localRX];
-							if(rxBuffer[localRX] == '0')
-							{
-								rxState++;
-								dataValueIdx++;
-								dataValue[dataValueIdx] = 0;
-							}
-							else
-							{
-								rxState = RX_Ready;
-							}
-					break;
-			case RX_Data11: rxState = RX_DataComplete;
-							ConvertByteToHexString(checksum,checksum_str);
-							if(rxBuffer[localRX] == checksum_str[0])
-							{
-								rxState = RX_DataComplete;
-							}
-							else
-							{
-								rxState = RX_Ready;
-							}
-
-				break;
-
-			case RX_DataComplete:	if(rxBuffer[localRX] == 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;
-									}
-									rxState = RX_Ready;
-				break;
-
-
-			default:				rxState = RX_Ready;
-				break;
-
-		}
-		localRX++;
-		rxReadIndex++;
-		if(rxReadIndex >= CHUNK_SIZE * CHUNKS_PER_BUFFER)
-		{
-			localRX = 0;
-			rxReadIndex = 0;
-		}
-	}
-
-	if(time_elapsed_ms(lastReceiveTick,HAL_GetTick()) > 4000)	/* check for communication timeout */
-	{
-		if(curAlive == lastAlive)
-		{
-			setExternalInterfaceChannel(0,0.0);
-			setExternalInterfaceChannel(1,0.0);
-			setExternalInterfaceChannel(2,0.0);
-			SentinelConnected = 0;
-		}
-		lastAlive = curAlive;
-	}
-
-	if((dmaActive == 0)	&& (externalInterface_isEnabledPower33()))	/* Should never happen in normal operation => restart in case of communication error */
-	{
-		UART_StartDMA_Receiption();
-	}
-}
-#endif
-
-
-
-uint8_t UART_isSentinelConnected()
-{
-	return SentinelConnected;
-}
-
 void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
 {
     if(huart == &huart1)
@@ -413,6 +228,10 @@
 			case SENSOR_CO2:	uartCo2_ProcessData(rxBuffer[localRX]);
 				break;
 #endif
+#ifdef ENABLE_SENTINEL_MODE
+			case SENSOR_SENTINEL:	uartSentinel_ProcessData(rxBuffer[localRX]);
+				break;
+#endif
 			default:
 				break;
 		}