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