From 4933931023d1ad0a65a5189819a1c1270e3109b9 Mon Sep 17 00:00:00 2001
From: Florian Hoelzl <hoelzl@fortiss.org>
Date: Fri, 13 Oct 2017 09:41:32 +0000
Subject: [PATCH] Added port code generation. refs 3079

---
 .../trunk/code-gen-hal/inc/temp_actuator.h    |  14 +++
 .../trunk/code-gen-hal/lib/libaf3pihal.a      | Bin 1297238 -> 1392302 bytes
 .../generator/executable/MainGenerator.java   |  95 +++++++++++++++++-
 3 files changed, 105 insertions(+), 4 deletions(-)
 create mode 100644 org.fortiss.af3.platform.raspberry/trunk/code-gen-hal/inc/temp_actuator.h

diff --git a/org.fortiss.af3.platform.raspberry/trunk/code-gen-hal/inc/temp_actuator.h b/org.fortiss.af3.platform.raspberry/trunk/code-gen-hal/inc/temp_actuator.h
new file mode 100644
index 00000000..7edc9167
--- /dev/null
+++ b/org.fortiss.af3.platform.raspberry/trunk/code-gen-hal/inc/temp_actuator.h
@@ -0,0 +1,14 @@
+#ifndef INC_TEMP_ACTUATOR_H_
+#define INC_TEMP_ACTUATOR_H_
+
+#include <stdint.h>
+
+void temp_actuator_initialize(const char * device);
+
+int temp_actuator_get_position(uint8_t channel);
+
+int temp_actuator_set_target(uint8_t channel, uint16_t target);
+
+void temp_actuator_terminate();
+
+#endif /* INC_TEMP_ACTUATOR_H_ */
diff --git a/org.fortiss.af3.platform.raspberry/trunk/code-gen-hal/lib/libaf3pihal.a b/org.fortiss.af3.platform.raspberry/trunk/code-gen-hal/lib/libaf3pihal.a
index f5a7f9b432da53a1d1764d0dcce667f065b59afe..3d6219dbd5f7d4fd2e36ff267d21144e75bbfbd9 100644
GIT binary patch
delta 42730
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%0Df5
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
ViSJS+mX|Je&-WyrOgx3<{{h9EH6Q>0

delta 403
zcmZ4YH{{wh{|VCdW@eTq=H^BU3I+-wfJ`bV7@8YF1QZgu7#J8F7#P?mk&PKom@%MZ
z=K7L(49rAeR{MVp=$P%@E(UbWaYl;)7v@^>ivbz)=<Q<A2N595yY?Lef9Wka7L;Dc
zAoOG#I-VX`&uG1QGGhg6b3S`}K06~2GXXI(5VHU=D-g2*F-VRBh&h3n3y8Uam<Nb?
XftU}7`GHsfhy{UIXnQ`paP$!X_Hb-Q

diff --git a/org.fortiss.af3.platform.raspberry/trunk/src/org/fortiss/af3/platform/raspberry/generator/executable/MainGenerator.java b/org.fortiss.af3.platform.raspberry/trunk/src/org/fortiss/af3/platform/raspberry/generator/executable/MainGenerator.java
index 74b343d8..87dd2ae0 100644
--- a/org.fortiss.af3.platform.raspberry/trunk/src/org/fortiss/af3/platform/raspberry/generator/executable/MainGenerator.java
+++ b/org.fortiss.af3.platform.raspberry/trunk/src/org/fortiss/af3/platform/raspberry/generator/executable/MainGenerator.java
@@ -23,11 +23,23 @@ import java.util.List;
 
 import org.conqat.lib.commons.collections.Pair;
 import org.fortiss.af3.component.model.Component;
+import org.fortiss.af3.component.model.InputPort;
+import org.fortiss.af3.component.model.OutputPort;
 import org.fortiss.af3.component.model.Port;
 import org.fortiss.af3.generator.common.model.source.AbstractUnit;
 import org.fortiss.af3.platform.model.ExecutionUnit;
 import org.fortiss.af3.platform.model.PlatformConnectorUnit;
+import org.fortiss.af3.platform.model.Receiver;
+import org.fortiss.af3.platform.model.Transmitter;
+import org.fortiss.af3.platform.raspberry.model.ActuatorPWM;
 import org.fortiss.af3.platform.raspberry.model.RaspberryPi;
+import org.fortiss.af3.platform.raspberry.model.gamepad.Button1;
+import org.fortiss.af3.platform.raspberry.model.gamepad.Button2;
+import org.fortiss.af3.platform.raspberry.model.gamepad.Button3;
+import org.fortiss.af3.platform.raspberry.model.gamepad.Button4;
+import org.fortiss.af3.platform.raspberry.model.gamepad.GamepadReceiverBase;
+import org.fortiss.af3.platform.raspberry.model.gamepad.Left_StickX_Position;
+import org.fortiss.af3.platform.raspberry.model.gamepad.Left_StickY_Position;
 import org.fortiss.tooling.kernel.extension.data.ITransformationContext;
 
 /**
@@ -43,35 +55,110 @@ class MainGenerator {
 	public AbstractUnit createMain(RaspberryPi executionUnit,
 			List<Pair<ExecutionUnit, Component>> deployedComponents,
 			List<Pair<PlatformConnectorUnit, Port>> deployedPorts, ITransformationContext context) {
-		String includes = createIncludes(deployedComponents);
+		String includes = createIncludes(deployedComponents, deployedPorts);
 		// TODO: syncbox code
 		String initCode = createInitCode(deployedComponents);
-		String workerCode = createWorkerCode(deployedComponents);
+		String workerCode = createWorkerCode(deployedComponents, deployedPorts);
 		return getMainCFile(executionUnit.getName(), executionUnit.isCoordinatorUnit(),
 				executionUnit.getCanCoordinationID(), executionUnit.getCycleTime(), 250, includes,
 				"// TODO\n", initCode, workerCode);
 	}
 
 	/** Creates the includes of the system headers. */
-	private String createIncludes(List<Pair<ExecutionUnit, Component>> deployedComponents) {
+	private String createIncludes(List<Pair<ExecutionUnit, Component>> deployedComponents,
+			List<Pair<PlatformConnectorUnit, Port>> deployedPorts) {
 		StringBuilder sb = new StringBuilder();
 		for(Pair<ExecutionUnit, Component> p : deployedComponents) {
 			Component c = p.getSecond();
 			sb.append("#include <" + c.getName() + "_ID_" + c.getId() + ".h>\n");
 		}
+		boolean useGamepad = false;
+		boolean usePWM = false;
+		for(Pair<PlatformConnectorUnit, Port> p : deployedPorts) {
+			if(!useGamepad && p.getFirst() instanceof GamepadReceiverBase) {
+				sb.append("#include <gamepad.h>\n");
+				useGamepad = true;
+			}
+			if(!usePWM && p.getFirst() instanceof ActuatorPWM) {
+				sb.append("#include <temp_actuator.h>\n");
+				usePWM = true;
+			}
+		}
 		return sb.toString();
 	}
 
 	/** Create the worker code. */
-	private String createWorkerCode(List<Pair<ExecutionUnit, Component>> deployedComponents) {
+	private String createWorkerCode(List<Pair<ExecutionUnit, Component>> deployedComponents,
+			List<Pair<PlatformConnectorUnit, Port>> deployedPorts) {
 		StringBuilder sb = new StringBuilder();
+		for(Pair<PlatformConnectorUnit, Port> p : deployedPorts) {
+			if(p.getFirst() instanceof Receiver && p.getSecond() instanceof InputPort) {
+				sb.append(createReadCode((Receiver)p.getFirst(), (InputPort)p.getSecond()));
+			}
+		}
 		for(Pair<ExecutionUnit, Component> p : deployedComponents) {
 			Component c = p.getSecond();
 			sb.append(makeCall("perform_step", c));
 		}
+		for(Pair<PlatformConnectorUnit, Port> p : deployedPorts) {
+			if(p.getFirst() instanceof Transmitter && p.getSecond() instanceof OutputPort) {
+				sb.append(createWriteCode((Transmitter)p.getFirst(), (OutputPort)p.getSecond()));
+			}
+		}
 		return sb.toString();
 	}
 
+	/** Returns the port and ID identifier. */
+	private String portName(Port port) {
+		return port.getName() + "_ID_" + port.getId();
+	}
+
+	/** Creates the read code for the given receiver and port. */
+	private String createWriteCode(Transmitter transmitter, OutputPort outport) {
+		if(transmitter instanceof ActuatorPWM) {
+			ActuatorPWM act = (ActuatorPWM)transmitter;
+			String result = "if(!noval_" + portName(outport) + ") {\n";
+			result +=
+					"temp_actuator_set_target(" + act.getChannelID() + ", (uint16_t)" +
+							portName(outport) + ");\n";
+			result += "}\n";
+			return result;
+		}
+		return "";
+	}
+
+	/** Creates the read code for the given receiver and port. */
+	private String createReadCode(Receiver receiver, InputPort inport) {
+		if(receiver instanceof Button1) {
+			return gamepadReadCode("gamepad_get_button_state", "GAMEPAD_BUTTON_1", inport);
+		}
+		if(receiver instanceof Button2) {
+			return gamepadReadCode("gamepad_get_button_state", "GAMEPAD_BUTTON_2", inport);
+		}
+		if(receiver instanceof Button3) {
+			return gamepadReadCode("gamepad_get_button_state", "GAMEPAD_BUTTON_3", inport);
+		}
+		if(receiver instanceof Button4) {
+			return gamepadReadCode("gamepad_get_button_state", "GAMEPAD_BUTTON_4", inport);
+		}
+		if(receiver instanceof Left_StickX_Position) {
+			return gamepadReadCode("gamepad_get_axis_position",
+					"GAMEPAD_AXIS_LEFT_STICK_HORIZONTAL", inport);
+		}
+		if(receiver instanceof Left_StickY_Position) {
+			return gamepadReadCode("gamepad_get_axis_position", "GAMEPAD_AXIS_LEFT_STICK_VERTICAL",
+					inport);
+		}
+		return "";
+	}
+
+	/** Creates read code for gamepad state. */
+	private String gamepadReadCode(String gamepadFun, String btnId, InputPort inport) {
+		String noval = "noval_" + portName(inport) + " = false;\n";
+		String setBtn = portName(inport) + " = " + gamepadFun + "(" + btnId + ");\n";
+		return noval + setBtn;
+	}
+
 	/** Create the initialize code. */
 	private String createInitCode(List<Pair<ExecutionUnit, Component>> deployedComponents) {
 		StringBuilder sb = new StringBuilder();
-- 
GitLab