diff Small_CPU/Src/externalInterface.c @ 1081:1b38d7b8da35 Icon_Integration

Send sensor data cyclic: In the previous version the sensor data which had been updated at last was send to the main CPU. With the introduction of the hud a second device is sending sensor data information => in case of fast sensor data updated it could happen that a sensor data record was never transmitted. To avoid this the sensor data of all sensor slots is now transmitted on a cyclic basis.
author Ideenmodellierer
date Sun, 15 Mar 2026 21:28:53 +0100
parents b02311fbb1e1
children
line wrap: on
line diff
--- a/Small_CPU/Src/externalInterface.c	Sun Mar 08 21:08:33 2026 +0100
+++ b/Small_CPU/Src/externalInterface.c	Sun Mar 15 21:28:53 2026 +0100
@@ -547,11 +547,25 @@
 
 uint8_t externalInterface_GetSensorData(uint8_t sensorId, uint8_t* pDataStruct)
 {
+	static uint8_t cyclingSensorId = 0;
 	uint8_t index = 0;
 	uint8_t localId = sensorId;
 	if(localId == 0xFF)
 	{
-		localId = lastSensorDataId;
+		if(lastSensorDataId != 0xFF)
+		{
+			localId = lastSensorDataId;
+			lastSensorDataId = 0xFF;
+		}
+		else
+		{
+			localId = cyclingSensorId;
+			cyclingSensorId++;
+			if(cyclingSensorId == EXT_INTERFACE_SENSOR_CNT)
+			{
+				cyclingSensorId = 0;
+			}
+		}
 	}
 
 	if((pDataStruct != NULL) && (localId <= EXT_INTERFACE_SENSOR_CNT))
@@ -576,34 +590,33 @@
 	return localId;
 }
 
+void externalInterface_ResetSensorData(uint8_t sensorId)
+{
+	if(sensorId < EXT_INTERFACE_SENSOR_CNT)
+	{
+		memset(&sensorData[sensorId],0,EXTIF_SENSOR_INFO_SIZE);
+	}
+}
 void externalInterface_SetSensorData(uint8_t sensorId, uint8_t* pDataStruct)
 {
 	uint8_t index = 0;
 
-	if(pDataStruct != NULL)
+	if((pDataStruct != NULL) && (sensorId < EXT_INTERFACE_SENSOR_CNT))
 	{
-		if((sensorId != 0xFF) && (sensorId < EXT_INTERFACE_SENSOR_CNT))
+		externalInterface_CopySensorData(sensorId, &sensorData[sensorId][0], pDataStruct);
+		lastSensorDataId = sensorId;
+		if(sensorId >= MAX_ADC_CHANNEL)
 		{
-			externalInterface_CopySensorData(sensorId, &sensorData[sensorId][0], pDataStruct);
-			lastSensorDataId = sensorId;
-			if(sensorId >= MAX_ADC_CHANNEL)
+			for(index = 0; index < MAX_ADC_CHANNEL; index++)
 			{
-				for(index = 0; index < MAX_ADC_CHANNEL; index++)
+				if(Mux2ADCMap[index] == sensorId)
 				{
-					if(Mux2ADCMap[index] == sensorId)
-					{
-						externalInterface_CopySensorData(index, &sensorData[index][0], pDataStruct);
-						lastSensorDataId = index;
-						break;
-					}
+					externalInterface_CopySensorData(index, &sensorData[index][0], pDataStruct);
+					lastSensorDataId = index;
+					break;
 				}
 			}
 		}
-		else
-		{
-			memset(&sensorData,0,EXTIF_SENSOR_INFO_SIZE * EXT_INTERFACE_SENSOR_CNT);
-			lastSensorDataId = 0xFF;
-		}
 	}
 }