From 83f11b1fcd139521396ccc4bd7420655ebf9a846 Mon Sep 17 00:00:00 2001 From: Florian Hoelzl <hoelzl@fortiss.org> Date: Mon, 9 Oct 2017 13:06:34 +0000 Subject: [PATCH] Started RasPi code generation. refs 3079 --- .../trunk/plugin.xml | 10 + .../ActuatorPWMPropertySection.java | 71 ++++ .../BoundedIntPositiveZeroValidator.java | 58 +++ ...spberryPiExecutionUnitPropertySection.java | 8 +- .../executable/RaspberryPIExecutable.java | 170 +++------ .../generator/templates/ProjectFile.stg | 30 ++ .../generator/templates/RasPiCTemplates.java | 70 ++++ .../trunk/test-data/model/SCA-CAN-Test.af3_23 | 357 ++++++++++++++++++ 8 files changed, 655 insertions(+), 119 deletions(-) create mode 100644 org.fortiss.af3.platform.raspberry.ui/trunk/src/org/fortiss/af3/platform/raspberry/ui/properties/ActuatorPWMPropertySection.java create mode 100644 org.fortiss.af3.platform.raspberry.ui/trunk/src/org/fortiss/af3/platform/raspberry/ui/properties/BoundedIntPositiveZeroValidator.java create mode 100644 org.fortiss.af3.platform.raspberry/trunk/src/org/fortiss/af3/platform/raspberry/generator/templates/ProjectFile.stg create mode 100644 org.fortiss.af3.platform.raspberry/trunk/src/org/fortiss/af3/platform/raspberry/generator/templates/RasPiCTemplates.java create mode 100644 org.fortiss.af3.platform.raspberry/trunk/test-data/model/SCA-CAN-Test.af3_23 diff --git a/org.fortiss.af3.platform.raspberry.ui/trunk/plugin.xml b/org.fortiss.af3.platform.raspberry.ui/trunk/plugin.xml index ac775ed5..ad58509f 100644 --- a/org.fortiss.af3.platform.raspberry.ui/trunk/plugin.xml +++ b/org.fortiss.af3.platform.raspberry.ui/trunk/plugin.xml @@ -151,6 +151,16 @@ type="org.fortiss.af3.platform.raspberry.model.RaspberryPi"> </input> </propertySection> + <propertySection + afterSection="org.fortiss.tooling.kernel.ui.internal.properties.NamedCommentedPropertySection" + class="org.fortiss.af3.platform.raspberry.ui.properties.ActuatorPWMPropertySection" + enablesFor="1" + id="org.fortiss.af3.platform.raspberry.ui.properties.ActuatorPWMPropertySection" + tab="org.fortiss.tooling.kernel.ui.property.tab.general"> + <input + type="org.fortiss.af3.platform.raspberry.model.ActuatorPWM"> + </input> + </propertySection> </propertySections> </extension> </plugin> diff --git a/org.fortiss.af3.platform.raspberry.ui/trunk/src/org/fortiss/af3/platform/raspberry/ui/properties/ActuatorPWMPropertySection.java b/org.fortiss.af3.platform.raspberry.ui/trunk/src/org/fortiss/af3/platform/raspberry/ui/properties/ActuatorPWMPropertySection.java new file mode 100644 index 00000000..bf48ea02 --- /dev/null +++ b/org.fortiss.af3.platform.raspberry.ui/trunk/src/org/fortiss/af3/platform/raspberry/ui/properties/ActuatorPWMPropertySection.java @@ -0,0 +1,71 @@ +/*--------------------------------------------------------------------------+ +$Id$ +| | +| Copyright 2013 ForTISS GmbH | +| | +| Licensed under the Apache License, Version 2.0 (the "License"); | +| you may not use this file except in compliance with the License. | +| You may obtain a copy of the License at | +| | +| http://www.apache.org/licenses/LICENSE-2.0 | +| | +| Unless required by applicable law or agreed to in writing, software | +| distributed under the License is distributed on an "AS IS" BASIS, | +| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | +| See the License for the specific language governing permissions and | +| limitations under the License. | ++--------------------------------------------------------------------------*/ +package org.fortiss.af3.platform.raspberry.ui.properties; + +import static org.fortiss.af3.expression.ui.databinding.validate.IntToStringConverter.INT_STRING_CONVERTER; +import static org.fortiss.af3.expression.ui.databinding.validate.StringToIntConverter.STRING_INT_CONVERTER; +import static org.fortiss.tooling.kernel.ui.util.DataBindingUtils.performComplexTextBinding; +import static org.fortiss.tooling.kernel.ui.util.ObservableUtils.observeValue; + +import org.conqat.ide.commons.ui.databinding.validate.TextToIntegerValidator; +import org.eclipse.core.databinding.observable.value.IObservableValue; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Text; +import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage; +import org.fortiss.af3.platform.raspberry.model.ActuatorPWM; +import org.fortiss.af3.platform.raspberry.model.RaspberryPiModelPackage; +import org.fortiss.tooling.kernel.ui.extension.base.PropertySectionBase; + +/** + * Property section for {@link ActuatorPWM}s. + * + * @author hoelzl + * @author $Author$ + * @version $Rev$ + * @ConQAT.Rating GREEN Hash: 9E768B733BD37201F97399293FA0DFA7 + */ +public class ActuatorPWMPropertySection extends PropertySectionBase { + /** The actuator. */ + private ActuatorPWM actuator; + /** The PWM channel widget. */ + private Text pwmChannelText; + + /** {@inheritDoc} */ + @Override + public void createControls(Composite parent, TabbedPropertySheetPage tabbedPropertySheetPage) { + super.createControls(parent, tabbedPropertySheetPage); + pwmChannelText = createDecoratedText("PWM Channel (0, 1)"); + } + + /** {@inheritDoc} */ + @Override + protected void setSectionInput(Object input) { + actuator = (ActuatorPWM)input; + } + + /** {@inheritDoc} */ + @Override + public void refresh() { + super.refresh(); + IObservableValue modelObservable = + observeValue(actuator, RaspberryPiModelPackage.Literals.ACTUATOR_PWM__CHANNEL_ID); + performComplexTextBinding(dbc, pwmChannelText, modelObservable, INT_STRING_CONVERTER, + STRING_INT_CONVERTER, TextToIntegerValidator.INSTANCE, + new BoundedIntPositiveZeroValidator(0, 1)); + } +} diff --git a/org.fortiss.af3.platform.raspberry.ui/trunk/src/org/fortiss/af3/platform/raspberry/ui/properties/BoundedIntPositiveZeroValidator.java b/org.fortiss.af3.platform.raspberry.ui/trunk/src/org/fortiss/af3/platform/raspberry/ui/properties/BoundedIntPositiveZeroValidator.java new file mode 100644 index 00000000..7b5f5c6a --- /dev/null +++ b/org.fortiss.af3.platform.raspberry.ui/trunk/src/org/fortiss/af3/platform/raspberry/ui/properties/BoundedIntPositiveZeroValidator.java @@ -0,0 +1,58 @@ +/*--------------------------------------------------------------------------+ +$Id$ +| | +| Copyright 2017 fortiss GmbH | +| | +| Licensed under the Apache License, Version 2.0 (the "License"); | +| you may not use this file except in compliance with the License. | +| You may obtain a copy of the License at | +| | +| http://www.apache.org/licenses/LICENSE-2.0 | +| | +| Unless required by applicable law or agreed to in writing, software | +| distributed under the License is distributed on an "AS IS" BASIS, | +| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | +| See the License for the specific language governing permissions and | +| limitations under the License. | ++--------------------------------------------------------------------------*/ +package org.fortiss.af3.platform.raspberry.ui.properties; + +import org.eclipse.core.databinding.validation.ValidationStatus; +import org.eclipse.core.runtime.IStatus; +import org.fortiss.tooling.base.ui.databinding.NumberPositiveZeroValidator; + +/** + * A {@link NumberPositiveZeroValidator} with boundary checking for int values. + * + * @author hoelzl + * @author $Author$ + * @version $Rev$ + * @ConQAT.Rating RED Hash: + */ +public class BoundedIntPositiveZeroValidator extends NumberPositiveZeroValidator { + /** The lower bound. */ + private final int lowerBound; + /** The upper bound. */ + private final int upperBound; + + /** Constructor. */ + public BoundedIntPositiveZeroValidator(int lower, int upper) { + this.lowerBound = lower; + this.upperBound = upper; + } + + /** {@inheritDoc} */ + @Override + public IStatus validate(Object value) { + IStatus status = super.validate(value); + if(status == ValidationStatus.ok()) { + double dval = ((Number)value).doubleValue(); + if(dval >= lowerBound && dval <= upperBound) { + return ValidationStatus.ok(); + } + return ValidationStatus.cancel("Value must be between " + lowerBound + " and " + + upperBound + "!"); + } + return status; + } +} diff --git a/org.fortiss.af3.platform.raspberry.ui/trunk/src/org/fortiss/af3/platform/raspberry/ui/properties/RaspberryPiExecutionUnitPropertySection.java b/org.fortiss.af3.platform.raspberry.ui/trunk/src/org/fortiss/af3/platform/raspberry/ui/properties/RaspberryPiExecutionUnitPropertySection.java index 548aada7..11190dff 100644 --- a/org.fortiss.af3.platform.raspberry.ui/trunk/src/org/fortiss/af3/platform/raspberry/ui/properties/RaspberryPiExecutionUnitPropertySection.java +++ b/org.fortiss.af3.platform.raspberry.ui/trunk/src/org/fortiss/af3/platform/raspberry/ui/properties/RaspberryPiExecutionUnitPropertySection.java @@ -24,7 +24,6 @@ import static org.fortiss.af3.expression.ui.databinding.validate.StringToIntConv import static org.fortiss.tooling.kernel.ui.util.DataBindingUtils.performComplexTextBinding; import static org.fortiss.tooling.kernel.ui.util.ObservableUtils.observeValue; -import org.conqat.ide.commons.ui.databinding.validate.NumberPositiveValidator; import org.conqat.ide.commons.ui.databinding.validate.TextToIntegerValidator; import org.eclipse.core.databinding.observable.value.IObservableValue; import org.eclipse.swt.SWT; @@ -45,10 +44,9 @@ import org.fortiss.tooling.kernel.ui.extension.base.PropertySectionBase; * @ConQAT.Rating GREEN Hash: 9E768B733BD37201F97399293FA0DFA7 */ public class RaspberryPiExecutionUnitPropertySection extends PropertySectionBase { - /** The execution unit. */ private RaspberryPi unit; - /** The virtual keyboard port number widget. */ + /** The CAN ID of this unit. */ private Text canCoordinationIDText; /** The cycle time widget. */ private Text cycleTimeText; @@ -85,13 +83,13 @@ public class RaspberryPiExecutionUnitPropertySection extends PropertySectionBase RaspberryPiModelPackage.Literals.RASPBERRY_PI__CAN_COORDINATION_ID); performComplexTextBinding(dbc, canCoordinationIDText, modelObservable, INT_STRING_CONVERTER, STRING_INT_CONVERTER, TextToIntegerValidator.INSTANCE, - new NumberPositiveValidator()); + new BoundedIntPositiveZeroValidator(245, 255)); modelObservable = observeValue(unit, RaspberryPiModelPackage.Literals.RASPBERRY_PI__CYCLE_TIME); performComplexTextBinding(dbc, cycleTimeText, modelObservable, INT_STRING_CONVERTER, STRING_INT_CONVERTER, TextToIntegerValidator.INSTANCE, - new NumberPositiveValidator()); + new BoundedIntPositiveZeroValidator(20, 10000)); modelObservable = observeValue(unit, RaspberryPiModelPackage.Literals.RASPBERRY_PI__IP_ADDRESS); diff --git a/org.fortiss.af3.platform.raspberry/trunk/src/org/fortiss/af3/platform/raspberry/generator/executable/RaspberryPIExecutable.java b/org.fortiss.af3.platform.raspberry/trunk/src/org/fortiss/af3/platform/raspberry/generator/executable/RaspberryPIExecutable.java index 6417443a..2eec8c5c 100644 --- a/org.fortiss.af3.platform.raspberry/trunk/src/org/fortiss/af3/platform/raspberry/generator/executable/RaspberryPIExecutable.java +++ b/org.fortiss.af3.platform.raspberry/trunk/src/org/fortiss/af3/platform/raspberry/generator/executable/RaspberryPIExecutable.java @@ -17,55 +17,51 @@ $Id: codetemplates.xml 1 2011-01-01 00:00:01Z hoelzl $ +--------------------------------------------------------------------------*/ package org.fortiss.af3.platform.raspberry.generator.executable; -import static org.fortiss.af3.expression.utils.ExpressionModelElementFactory.funcCall; +import static org.fortiss.af3.expression.utils.ExpressionModelElementFactory.createDataDictionary; import static org.fortiss.af3.generator.common.utils.CLanguageModelElementFacade.addUserHeaderInclude; +import static org.fortiss.af3.generator.common.utils.CLanguageModelElementFactory.createCSourcePackage; import static org.fortiss.af3.generator.common.utils.SourceModelElementFactory.createByteContentUnitForPluginFile; +import static org.fortiss.af3.platform.raspberry.generator.templates.RasPiCTemplates.getEclipseProjectFile; +import static org.fortiss.tooling.kernel.utils.KernelModelElementUtils.getRootElement; +import static org.fortiss.tooling.kernel.utils.LoggingUtils.error; +import static org.fortiss.tooling.kernel.utils.TransformationUtils.createTransformedObjectFor; import java.io.IOException; import java.net.URISyntaxException; import java.util.List; -import java.util.Set; 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.component.model.generator.ComponentFunction; -import org.fortiss.af3.component.model.generator.LocalFunction; +import org.fortiss.af3.component.model.generator.ComponentProgram; +import org.fortiss.af3.expression.model.DataDictionary; import org.fortiss.af3.expression.model.terms.IExpressionTerm; -import org.fortiss.af3.expression.model.terms.imperative.IStatementTerm; import org.fortiss.af3.generator.common.model.c.CSourcePackage; import org.fortiss.af3.generator.common.model.source.SourceUnit; -import org.fortiss.af3.platform.generic.generator.executable.GenericExecutionUnitExecutable; -import org.fortiss.af3.platform.language.executable.IInitializableExecutable; -import org.fortiss.af3.platform.language.executable.IReadableExecutable; -import org.fortiss.af3.platform.language.executable.ITerminatableExecutable; -import org.fortiss.af3.platform.language.executable.IWritableExecutable; +import org.fortiss.af3.platform.language.executable.ExecutionUnitExecutableBase; import org.fortiss.af3.platform.model.ExecutionUnit; import org.fortiss.af3.platform.model.PlatformConnectorUnit; -import org.fortiss.af3.platform.model.generic.GenericTransceiver; import org.fortiss.af3.platform.raspberry.AF3PlatformRaspberryActivator; import org.fortiss.af3.platform.raspberry.model.RaspberryPi; import org.fortiss.tooling.kernel.extension.data.ITransformationContext; +import org.fortiss.tooling.kernel.extension.exception.ChainTransformationFailedException; /** - * {@link IInitializableExecutable} and {@link ITerminatableExecutable} for the {@link RaspberryPi} - * platform. - * + * {@link ExecutionUnitExecutableBase} for the {@link RaspberryPi} platform. * * @author eder + * @author hoelzl * @author $Author: eder $ * @version $Rev: 18709 $ * @ConQAT.Rating RED Hash: */ -public class RaspberryPIExecutable extends GenericExecutionUnitExecutable { +public class RaspberryPIExecutable extends ExecutionUnitExecutableBase<RaspberryPi, CSourcePackage> { private static final String SRC_LIB_SUB_PACKAGE_NAME = "src-lib"; private static final String INC_LIB_SUB_PACKAGE_NAME = "inc-lib"; /** Constructor. */ - public RaspberryPIExecutable(ExecutionUnit modelElement) { + public RaspberryPIExecutable(RaspberryPi modelElement) { super(modelElement); } @@ -74,60 +70,51 @@ public class RaspberryPIExecutable extends GenericExecutionUnitExecutable { protected CSourcePackage createExecutionUnitSourcePackage(String name, List<Pair<ExecutionUnit, Component>> deployedComponents, List<Pair<PlatformConnectorUnit, Port>> deployedPorts, ITransformationContext context) { - - CSourcePackage pkg = - super.createExecutionUnitSourcePackage(name, deployedComponents, deployedPorts, - context); - - // get system.h to add references to self-defined inc files - SourceUnit system = pkg.getSrcGenPackage().findSourceUnitByName("system.c"); - - // Add source/header files here to be copied into the deployment directory + // create the result package + CSourcePackage sourcePackage = createCSourcePackage(); + sourcePackage.setBaseLocation(name); try { - /** COMPONENTS **/ - - addFile(pkg, "src/main.c"); - - // reference is added by GenericExecutableBase -> only add file - addFile(pkg, "inc/io.h"); - addFile(pkg, "src/io.c"); - - // add all components including references - addFilesWithReference(pkg, system, "CanConnector"); - addFilesWithReference(pkg, system, "Gamepad"); - addFilesWithReference(pkg, system, "GPIO"); - addFilesWithReference(pkg, system, "IMU"); - addFilesWithReference(pkg, system, "LaserRangeFinder"); - addFilesWithReference(pkg, system, "LaserScanner"); - addFilesWithReference(pkg, system, "PWM"); - - /** LIBRARIES **/ - - // add UART lib - addFile(pkg, "inc/libuart.h"); - addFile(pkg, "src/libuart.c"); - addFile(pkg, "inc/libmaestro.h"); - addFile(pkg, "src/libmaestro.c"); - addFile(pkg, "inc/libcansocket.h"); - addFile(pkg, "src/libcansocket.c"); - - /** FIXES AND PATCHES **/ - - // overwrite data_dictionary, the new one has all functions - // required for the simulation commented out so there are no - // conflicts - addFile(pkg, "inc-gen/data_dictionary.h"); - addFile(pkg, "src-gen/data_dictionary.c"); + addDataDictionaryCode(context, sourcePackage); + addLogicalComponentCode(deployedComponents, context, sourcePackage); + addEclipseCProjectFiles(sourcePackage, modelElement.getName()); + } catch(Exception ex) { + error(AF3PlatformRaspberryActivator.getDefault(), ex.getMessage(), ex); + ex.printStackTrace(); + } + return sourcePackage; + } - // overwrite Makedefs, the new one uses -std=gnu99 instead of -std=c99 - // so libuart compiles properly - addFile(pkg, "Makedefs"); + /** Adds auxiliary files for Eclipse C project. */ + private void addEclipseCProjectFiles(CSourcePackage sourcePackage, String projectName) { + sourcePackage.addUnit(getEclipseProjectFile(projectName)); + } - } catch(IOException | URISyntaxException e) { - throw new RuntimeException("could not add header and source files from lib", e); + /** Creates the code for all deployed components. */ + private void addLogicalComponentCode(List<Pair<ExecutionUnit, Component>> deployedComponents, + ITransformationContext context, CSourcePackage sourcePackage) + throws ChainTransformationFailedException { + for(Pair<ExecutionUnit, Component> pair : deployedComponents) { + if(pair.getFirst() != modelElement) { + continue; + } + Component cmp = pair.getSecond(); + ComponentProgram cprog = + createTransformedObjectFor(cmp, ComponentProgram.class, context); + CSourcePackage cPack = createTransformedObjectFor(cprog, CSourcePackage.class, context); + cPack.mergeInto(sourcePackage); } + } - return pkg; + /** Creates the code for the data dictionary. */ + private void + addDataDictionaryCode(ITransformationContext context, CSourcePackage sourcePackage) + throws ChainTransformationFailedException { + DataDictionary dd = getRootElement(modelElement, DataDictionary.class); + if(dd == null) { + dd = createDataDictionary(); + } + CSourcePackage ddPackage = createTransformedObjectFor(dd, CSourcePackage.class, context); + ddPackage.mergeInto(sourcePackage); } private static void addFilesWithReference(CSourcePackage pkg, SourceUnit source, @@ -147,60 +134,15 @@ public class RaspberryPIExecutable extends GenericExecutionUnitExecutable { addUserHeaderInclude(source, reference); } - /** {@inheritDoc} */ - @Override - protected ComponentFunction createInitializeFunction( - List<Pair<ExecutionUnit, Component>> deployedComponents, - Set<PlatformConnectorUnit> usedUnits) { - return super.createInitializeFunction(deployedComponents, usedUnits); - } - - /** {@inheritDoc} */ - @Override - protected void - createReadAccess(IReadableExecutable exec, InputPort p, List<IStatementTerm> body) { - super.createReadAccess(exec, p, body); - } - - /** {@inheritDoc} */ - @Override - protected LocalFunction createReadInputFunction( - List<Pair<PlatformConnectorUnit, Port>> deployedPorts, - Set<GenericTransceiver> usedTransceivers) { - return super.createReadInputFunction(deployedPorts, usedTransceivers); - } - - /** {@inheritDoc} */ - @Override - protected ComponentFunction createStepFunction( - List<Pair<ExecutionUnit, Component>> deployedComponents, - List<Pair<PlatformConnectorUnit, Port>> deployedPorts, - Set<GenericTransceiver> usedTransceivers) { - return super.createStepFunction(deployedComponents, deployedPorts, usedTransceivers); - } - - /** {@inheritDoc} */ - @Override - protected LocalFunction createTerminationFunction(Set<PlatformConnectorUnit> usedUnits) { - return super.createTerminationFunction(usedUnits); - } - - /** {@inheritDoc} */ - @Override - protected void createWriteAccess(IWritableExecutable exec, OutputPort p, - List<IStatementTerm> body) { - super.createWriteAccess(exec, p, body); - } - /** {@inheritDoc} */ @Override public IExpressionTerm getInitialization() { - return funcCall("init_raspberryPI_ecu"); + return null; } /** {@inheritDoc} */ @Override public IExpressionTerm getTermination() { - return funcCall("term_raspberryPI_ecu"); + return null; } } diff --git a/org.fortiss.af3.platform.raspberry/trunk/src/org/fortiss/af3/platform/raspberry/generator/templates/ProjectFile.stg b/org.fortiss.af3.platform.raspberry/trunk/src/org/fortiss/af3/platform/raspberry/generator/templates/ProjectFile.stg new file mode 100644 index 00000000..743d23b1 --- /dev/null +++ b/org.fortiss.af3.platform.raspberry/trunk/src/org/fortiss/af3/platform/raspberry/generator/templates/ProjectFile.stg @@ -0,0 +1,30 @@ +group ProjectFile; + +ProjectFile(projectname) ::= << +<?xml version="1.0" encoding="UTF-8"?> +<projectDescription> + <name>$projectname$</name> + <comment></comment> + <projects> + </projects> + <buildSpec> + <buildCommand> + <name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name> + <triggers>clean,full,incremental,</triggers> + <arguments> + </arguments> + </buildCommand> + <buildCommand> + <name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name> + <triggers>full,incremental,</triggers> + <arguments> + </arguments> + </buildCommand> + </buildSpec> + <natures> + <nature>org.eclipse.cdt.core.cnature</nature> + <nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature> + <nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature> + </natures> +</projectDescription> +>> \ No newline at end of file diff --git a/org.fortiss.af3.platform.raspberry/trunk/src/org/fortiss/af3/platform/raspberry/generator/templates/RasPiCTemplates.java b/org.fortiss.af3.platform.raspberry/trunk/src/org/fortiss/af3/platform/raspberry/generator/templates/RasPiCTemplates.java new file mode 100644 index 00000000..ba111b33 --- /dev/null +++ b/org.fortiss.af3.platform.raspberry/trunk/src/org/fortiss/af3/platform/raspberry/generator/templates/RasPiCTemplates.java @@ -0,0 +1,70 @@ +/*--------------------------------------------------------------------------+ +$Id$ +| | +| Copyright 2017 fortiss GmbH | +| | +| Licensed under the Apache License, Version 2.0 (the "License"); | +| you may not use this file except in compliance with the License. | +| You may obtain a copy of the License at | +| | +| http://www.apache.org/licenses/LICENSE-2.0 | +| | +| Unless required by applicable law or agreed to in writing, software | +| distributed under the License is distributed on an "AS IS" BASIS, | +| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | +| See the License for the specific language governing permissions and | +| limitations under the License. | ++--------------------------------------------------------------------------*/ +package org.fortiss.af3.platform.raspberry.generator.templates; + +import static org.fortiss.af3.generator.common.AF3GeneratorCommonActivator.getDefault; +import static org.fortiss.af3.generator.common.utils.SourceModelElementFactory.createStaticContentSourceUnit; +import static org.fortiss.tooling.kernel.utils.LoggingUtils.error; + +import java.io.IOException; +import java.io.InputStreamReader; + +import org.antlr.stringtemplate.StringTemplate; +import org.antlr.stringtemplate.StringTemplateGroup; +import org.antlr.stringtemplate.language.DefaultTemplateLexer; +import org.fortiss.af3.generator.common.model.source.AbstractUnit; +import org.fortiss.af3.generator.common.model.source.StaticContentSourceUnit; + +/** + * Templates used by the RasPi C code generator. + * + * @author hoelzl + * @author $Author$ + * @version $Rev$ + * @ConQAT.Rating RED Hash: + */ +public final class RasPiCTemplates { + /** Returns the '.project' file used for Eclipse project. */ + public static AbstractUnit getEclipseProjectFile(String projectName) { + StringTemplate template = makeTemplate("ProjectFile.stg", "ProjectFile"); + template.setAttribute("projectname", projectName); + StaticContentSourceUnit unit = + createStaticContentSourceUnit(".project", template.toString(), false); + return unit; + } + + /** Evaluates the given template. */ + protected static StringTemplate makeTemplate(String stgFile, String instance) { + StringTemplateGroup stg = loadResourceSTG(stgFile); + StringTemplate st = stg.getInstanceOf(instance); + return st; + } + + /** Loads the given template using the class loader of the given class. */ + private static StringTemplateGroup loadResourceSTG(String stgName) { + InputStreamReader in = + new InputStreamReader(RasPiCTemplates.class.getResourceAsStream(stgName)); + StringTemplateGroup templates = new StringTemplateGroup(in, DefaultTemplateLexer.class); + try { + in.close(); + } catch(IOException e) { + error(getDefault(), "AF3 generator could not load stringtemplate " + stgName + ".", e); + } + return templates; + } +} diff --git a/org.fortiss.af3.platform.raspberry/trunk/test-data/model/SCA-CAN-Test.af3_23 b/org.fortiss.af3.platform.raspberry/trunk/test-data/model/SCA-CAN-Test.af3_23 new file mode 100644 index 00000000..5dfe74be --- /dev/null +++ b/org.fortiss.af3.platform.raspberry/trunk/test-data/model/SCA-CAN-Test.af3_23 @@ -0,0 +1,357 @@ +<?xml version="1.0" encoding="UTF-8"?> +<org-fortiss-af3-project:FileProject xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:org-fortiss-af3-component="http://www.fortiss.org/af3/component" xmlns:org-fortiss-af3-component-annotation="http://www.fortiss.org/af3/component/annotation" xmlns:org-fortiss-af3-component-behavior-code="http://www.fortiss.org/af3/component/behavior/code" xmlns:org-fortiss-af3-deployment="http://www.fortiss.org/af3/deployment" xmlns:org-fortiss-af3-expression="http://www.fortiss.org/af3/expression" xmlns:org-fortiss-af3-expression-definitions="http://www.fortiss.org/af3/expression/definitions" xmlns:org-fortiss-af3-expression-terms="http://www.fortiss.org/af3/expression/terms" xmlns:org-fortiss-af3-expression-terms-imperative="http://www.fortiss.org/af3/expression/terms/imperative" xmlns:org-fortiss-af3-expression-types="http://www.fortiss.org/af3/expression/types" xmlns:org-fortiss-af3-platform="http://www.fortiss.org/af3/platform" xmlns:org-fortiss-af3-platform-annotation="http://www.fortiss.org/af3/platform/annotation" xmlns:org-fortiss-af3-platform-raspberry="http://www.fortiss.org/af3/platform/raspberry" xmlns:org-fortiss-af3-platform-raspberry-gamepad="http://www.fortiss.org/af3/platform/raspberry/gamepad" xmlns:org-fortiss-af3-project="http://www.fortiss.org/af3/project" xmlns:org-fortiss-af3-project-configuration="http://www.fortiss.org/af3/project/configuration" xmlns:org-fortiss-af3-project-development="http://www.fortiss.org/af3/project/development" xmlns:org-fortiss-af3-project-execution="http://www.fortiss.org/af3/project/execution" xmlns:org-fortiss-af3-safety-annotation="http://www.fortiss.org/af3/safety/annotation" xmlns:org-fortiss-af3-timing-annotation="http://www.fortiss.org/af3/timing/annotation" xmlns:org-fortiss-tooling-base-model-layout="http://www.fortiss.org/tooling/base/model/layout" xmi:id="0" name="SCA-CAN Test" af3Version="2.11.0.qualifier"> + <rootElements xsi:type="org-fortiss-af3-project:ProjectConfiguration" xmi:id="1" id="1"> + <configurationElements xsi:type="org-fortiss-af3-project-configuration:TypeSystemConfiguration" xmi:id="2" id="2"> + <typesystem xsi:type="org-fortiss-af3-expression:MicroTypeSystem"/> + </configurationElements> + <configurationElements xsi:type="org-fortiss-af3-project-configuration:DevelopmentProcessConfiguration" xmi:id="3" id="3"> + <development xsi:type="org-fortiss-af3-project-development:ConstraintBasedDevelopmentProcess" currentObjective="4" constraintInstanceContainer="3"> + <configurations xmi:id="4" id="4" name="Default configuration"/> + </development> + </configurationElements> + </rootElements> + <rootElements xsi:type="org-fortiss-af3-expression:DataDictionary" xmi:id="5" id="5"> + <typeDefinitions xsi:type="org-fortiss-af3-expression-definitions:Enumeration" xmi:id="46" id="46" name="MyEnum"> + <members xmi:id="47" id="47" name="First"/> + <members xmi:id="48" id="48" name="Second"/> + </typeDefinitions> + </rootElements> + <rootElements xsi:type="org-fortiss-af3-component:ComponentArchitecture" xmi:id="6" id="6" name="Component Architecture" referencedBy="//@rootElements.5/@componentArchitectureReference"> + <containedElements xsi:type="org-fortiss-af3-component:Component" xmi:id="7" id="7" name="SCATest" comment=""> + <containedElements xsi:type="org-fortiss-af3-component:Component" xmi:id="12" id="12" name="Gamepad_Input" comment=""> + <specifications xsi:type="org-fortiss-af3-component:CausalityComponentSpecification" xmi:id="13" id="13" stronglyCausal="true"/> + <specifications xsi:type="org-fortiss-af3-component:VerifBehaviourComponentSpecification" xmi:id="14" id="14"/> + <specifications xsi:type="org-fortiss-af3-safety-annotation:SafetyIntegrityLevel" xmi:id="15" id="15"/> + <specifications xsi:type="org-fortiss-af3-component-annotation:MemoryRequirement" xmi:id="16" id="16"/> + <specifications xsi:type="org-fortiss-af3-component-behavior-code:CodeSpecification" xmi:id="60" id="60"> + <body> + <statements xsi:type="org-fortiss-af3-expression-terms-imperative:IfThenElse"> + <guard xsi:type="org-fortiss-af3-expression-terms:FunctionCall"> + <function xsi:type="org-fortiss-af3-expression-terms:PredefinedFunction" operator="GreaterThan"/> + <arguments xsi:type="org-fortiss-af3-expression-terms:Var" identifier="Button_1"/> + <arguments xsi:type="org-fortiss-af3-expression-terms:IntConst"/> + </guard> + <thenBlock> + <statements xsi:type="org-fortiss-af3-expression-terms-imperative:Assignment"> + <variable identifier="sensorInput"/> + <value xsi:type="org-fortiss-af3-expression-terms:IntConst" value="1"/> + </statements> + </thenBlock> + <elseBlock> + <statements xsi:type="org-fortiss-af3-expression-terms-imperative:Assignment"> + <variable identifier="sensorInput"/> + <value xsi:type="org-fortiss-af3-expression-terms:IntConst"/> + </statements> + </elseBlock> + </statements> + <statements xsi:type="org-fortiss-af3-expression-terms-imperative:Return"/> + </body> + </specifications> + <connectors xsi:type="org-fortiss-af3-component:OutputPort" xmi:id="36" id="36" name="sensorInput" comment="" outgoing="40"> + <specifications xsi:type="org-fortiss-af3-component:PortSpecification" xmi:id="37" id="37"> + <type xsi:type="org-fortiss-af3-expression-types:TInt" lowerBound="0"/> + <initialValue xsi:type="org-fortiss-af3-expression-terms:IntConst"/> + </specifications> + <layoutData xsi:type="org-fortiss-tooling-base-model-layout:Point" key="pos"/> + <layoutData xsi:type="org-fortiss-tooling-base-model-layout:Dimension" key="dim" width="108" height="72"/> + <layoutData xsi:type="org-fortiss-tooling-base-model-layout:Point" key="cpos"/> + <layoutData xsi:type="org-fortiss-tooling-base-model-layout:Dimension" key="cdim" width="0" height="0"/> + <layoutData xsi:type="org-fortiss-tooling-base-model-layout:OffsetOrientation" key="coffsetorient" offset="24" orientation="EAST"/> + </connectors> + <connectors xsi:type="org-fortiss-af3-component:InputPort" xmi:id="41" id="41" name="Button_1" comment=""> + <specifications xsi:type="org-fortiss-af3-component:PortSpecification" xmi:id="42" id="42" NoValAllowed="false"> + <type xsi:type="org-fortiss-af3-expression-types:TInt" lowerBound="0" upperBound="1"/> + <initialValue xsi:type="org-fortiss-af3-expression-terms:DefinedConst" value="NoVal"/> + </specifications> + <layoutData xsi:type="org-fortiss-tooling-base-model-layout:Point" key="pos"/> + <layoutData xsi:type="org-fortiss-tooling-base-model-layout:Dimension" key="dim" width="108" height="72"/> + <layoutData xsi:type="org-fortiss-tooling-base-model-layout:Point" key="cpos"/> + <layoutData xsi:type="org-fortiss-tooling-base-model-layout:Dimension" key="cdim" width="0" height="0"/> + <layoutData xsi:type="org-fortiss-tooling-base-model-layout:OffsetOrientation" key="coffsetorient" offset="24" orientation="WEST"/> + </connectors> + <layoutData xsi:type="org-fortiss-tooling-base-model-layout:Point" key="pos" x="24" y="144"/> + <layoutData xsi:type="org-fortiss-tooling-base-model-layout:Dimension" key="dim" width="217" height="121"/> + </containedElements> + <containedElements xsi:type="org-fortiss-af3-component:Component" xmi:id="22" id="22" name="Coordinator" comment=""> + <specifications xsi:type="org-fortiss-af3-component:CausalityComponentSpecification" xmi:id="23" id="23" stronglyCausal="true"/> + <specifications xsi:type="org-fortiss-af3-component:VerifBehaviourComponentSpecification" xmi:id="24" id="24"/> + <specifications xsi:type="org-fortiss-af3-safety-annotation:SafetyIntegrityLevel" xmi:id="25" id="25"/> + <specifications xsi:type="org-fortiss-af3-component-annotation:MemoryRequirement" xmi:id="26" id="26"/> + <specifications xsi:type="org-fortiss-af3-component-behavior-code:CodeSpecification" xmi:id="61" id="61"> + <body> + <statements xsi:type="org-fortiss-af3-expression-terms-imperative:IfThenElse"> + <guard xsi:type="org-fortiss-af3-expression-terms:FunctionCall"> + <function xsi:type="org-fortiss-af3-expression-terms:PredefinedFunction" operator="Equal"/> + <arguments xsi:type="org-fortiss-af3-expression-terms:Var" identifier="sensorInput"/> + <arguments xsi:type="org-fortiss-af3-expression-terms:IntConst"/> + </guard> + <thenBlock> + <statements xsi:type="org-fortiss-af3-expression-terms-imperative:Assignment"> + <variable identifier="actuatorOutput"/> + <value xsi:type="org-fortiss-af3-expression-terms:IntConst" value="6000"/> + </statements> + </thenBlock> + <elseBlock> + <statements xsi:type="org-fortiss-af3-expression-terms-imperative:Assignment"> + <variable identifier="actuatorOutput"/> + <value xsi:type="org-fortiss-af3-expression-terms:IntConst"/> + </statements> + </elseBlock> + </statements> + <statements xsi:type="org-fortiss-af3-expression-terms-imperative:Return"/> + </body> + </specifications> + <connectors xsi:type="org-fortiss-af3-component:InputPort" xmi:id="38" id="38" name="sensorInput" comment="" incoming="40"> + <specifications xsi:type="org-fortiss-af3-component:PortSpecification" xmi:id="39" id="39"> + <type xsi:type="org-fortiss-af3-expression-types:TInt" lowerBound="0"/> + <initialValue xsi:type="org-fortiss-af3-expression-terms:IntConst"/> + </specifications> + <layoutData xsi:type="org-fortiss-tooling-base-model-layout:Point" key="pos"/> + <layoutData xsi:type="org-fortiss-tooling-base-model-layout:Dimension" key="dim" width="108" height="72"/> + <layoutData xsi:type="org-fortiss-tooling-base-model-layout:Point" key="cpos"/> + <layoutData xsi:type="org-fortiss-tooling-base-model-layout:Dimension" key="cdim" width="0" height="0"/> + <layoutData xsi:type="org-fortiss-tooling-base-model-layout:OffsetOrientation" key="coffsetorient" offset="24" orientation="WEST"/> + </connectors> + <connectors xsi:type="org-fortiss-af3-component:OutputPort" xmi:id="53" id="53" name="actuatorOutput" comment="" outgoing="57"> + <specifications xsi:type="org-fortiss-af3-component:PortSpecification" xmi:id="54" id="54"> + <type xsi:type="org-fortiss-af3-expression-types:TInt" lowerBound="0" upperBound="6000"/> + <initialValue xsi:type="org-fortiss-af3-expression-terms:DefinedConst" value="NoVal"/> + </specifications> + <layoutData xsi:type="org-fortiss-tooling-base-model-layout:Point" key="pos"/> + <layoutData xsi:type="org-fortiss-tooling-base-model-layout:Dimension" key="dim" width="108" height="72"/> + <layoutData xsi:type="org-fortiss-tooling-base-model-layout:Point" key="cpos"/> + <layoutData xsi:type="org-fortiss-tooling-base-model-layout:Dimension" key="cdim" width="0" height="0"/> + <layoutData xsi:type="org-fortiss-tooling-base-model-layout:OffsetOrientation" key="coffsetorient" offset="24" orientation="EAST"/> + </connectors> + <layoutData xsi:type="org-fortiss-tooling-base-model-layout:Point" key="pos" x="420" y="144"/> + <layoutData xsi:type="org-fortiss-tooling-base-model-layout:Dimension" key="dim" width="217" height="121"/> + </containedElements> + <containedElements xsi:type="org-fortiss-af3-component:Component" xmi:id="27" id="27" name="PWM Output" comment=""> + <specifications xsi:type="org-fortiss-af3-component:CausalityComponentSpecification" xmi:id="28" id="28" stronglyCausal="true"/> + <specifications xsi:type="org-fortiss-af3-component:VerifBehaviourComponentSpecification" xmi:id="29" id="29"/> + <specifications xsi:type="org-fortiss-af3-safety-annotation:SafetyIntegrityLevel" xmi:id="30" id="30"/> + <specifications xsi:type="org-fortiss-af3-component-annotation:MemoryRequirement" xmi:id="31" id="31"/> + <specifications xsi:type="org-fortiss-af3-component-behavior-code:CodeSpecification" xmi:id="62" id="62"> + <body> + <statements xsi:type="org-fortiss-af3-expression-terms-imperative:Assignment"> + <variable identifier="PWM"/> + <value xsi:type="org-fortiss-af3-expression-terms:Var" identifier="actuatorOutput"/> + </statements> + <statements xsi:type="org-fortiss-af3-expression-terms-imperative:Return"/> + </body> + </specifications> + <connectors xsi:type="org-fortiss-af3-component:InputPort" xmi:id="55" id="55" name="actuatorOutput" comment="" incoming="57"> + <specifications xsi:type="org-fortiss-af3-component:PortSpecification" xmi:id="56" id="56"> + <type xsi:type="org-fortiss-af3-expression-types:TInt" lowerBound="0" upperBound="6000"/> + <initialValue xsi:type="org-fortiss-af3-expression-terms:DefinedConst" value="NoVal"/> + </specifications> + <layoutData xsi:type="org-fortiss-tooling-base-model-layout:Point" key="pos"/> + <layoutData xsi:type="org-fortiss-tooling-base-model-layout:Dimension" key="dim" width="108" height="72"/> + <layoutData xsi:type="org-fortiss-tooling-base-model-layout:Point" key="cpos"/> + <layoutData xsi:type="org-fortiss-tooling-base-model-layout:Dimension" key="cdim" width="0" height="0"/> + <layoutData xsi:type="org-fortiss-tooling-base-model-layout:OffsetOrientation" key="coffsetorient" offset="24" orientation="WEST"/> + </connectors> + <connectors xsi:type="org-fortiss-af3-component:OutputPort" xmi:id="58" id="58" name="PWM" comment=""> + <specifications xsi:type="org-fortiss-af3-component:PortSpecification" xmi:id="59" id="59" NoValAllowed="false"> + <type xsi:type="org-fortiss-af3-expression-types:TInt" lowerBound="0" upperBound="6000"/> + <initialValue xsi:type="org-fortiss-af3-expression-terms:DefinedConst" value="NoVal"/> + </specifications> + <layoutData xsi:type="org-fortiss-tooling-base-model-layout:Point" key="pos"/> + <layoutData xsi:type="org-fortiss-tooling-base-model-layout:Dimension" key="dim" width="108" height="72"/> + <layoutData xsi:type="org-fortiss-tooling-base-model-layout:Point" key="cpos"/> + <layoutData xsi:type="org-fortiss-tooling-base-model-layout:Dimension" key="cdim" width="0" height="0"/> + <layoutData xsi:type="org-fortiss-tooling-base-model-layout:OffsetOrientation" key="coffsetorient" offset="24" orientation="EAST"/> + </connectors> + <layoutData xsi:type="org-fortiss-tooling-base-model-layout:Point" key="pos" x="912" y="144"/> + <layoutData xsi:type="org-fortiss-tooling-base-model-layout:Dimension" key="dim" width="217" height="121"/> + </containedElements> + <specifications xsi:type="org-fortiss-af3-component:CausalityComponentSpecification" xmi:id="8" id="8"/> + <specifications xsi:type="org-fortiss-af3-component:VerifBehaviourComponentSpecification" xmi:id="9" id="9"/> + <specifications xsi:type="org-fortiss-af3-safety-annotation:SafetyIntegrityLevel" xmi:id="43" id="43"/> + <specifications xsi:type="org-fortiss-af3-component-annotation:MemoryRequirement" xmi:id="44" id="44"/> + <connections xsi:type="org-fortiss-af3-component:Channel" xmi:id="40" id="40" name="sensorInput" comment="" source="36" target="38"> + <layoutData xsi:type="org-fortiss-tooling-base-model-layout:Points" key="points"/> + </connections> + <connections xsi:type="org-fortiss-af3-component:Channel" xmi:id="57" id="57" name="actuatorOutput" comment="" source="53" target="55"> + <layoutData xsi:type="org-fortiss-tooling-base-model-layout:Points" key="points"/> + </connections> + <layoutData xsi:type="org-fortiss-tooling-base-model-layout:Point" key="pos"/> + <layoutData xsi:type="org-fortiss-tooling-base-model-layout:Dimension" key="dim" width="216" height="72"/> + </containedElements> + <specifications xsi:type="org-fortiss-af3-safety-annotation:SafetyIntegrityLevel" xmi:id="45" id="45"/> + </rootElements> + <rootElements xsi:type="org-fortiss-af3-project-execution:ExecutionConfigurationStore" xmi:id="114" id="114"> + <configurations xmi:id="115" id="115" name="Execonf" comment="" idReference="11"/> + </rootElements> + <rootElements xsi:type="org-fortiss-af3-platform:PlatformArchitecture" xmi:id="116" id="116" name="Platform Architecture" comment="" referencedBy="//@rootElements.5/@platformArchitectureReference"> + <containedElements xsi:type="org-fortiss-af3-platform-raspberry:RaspberryPi" xmi:id="117" id="117" name="SensorUnit" canCoordinationID="253" ipAddress="192.168.21.241" cycleTime="100"> + <specifications xsi:type="org-fortiss-af3-platform-annotation:PowerConsumption" xmi:id="118" id="118"/> + <specifications xsi:type="org-fortiss-af3-platform-annotation:HardwareCost" xmi:id="119" id="119"/> + <specifications xsi:type="org-fortiss-af3-platform-annotation:MemoryPerNode" xmi:id="120" id="120"/> + <specifications xsi:type="org-fortiss-af3-safety-annotation:SafetyIntegrityLevel" xmi:id="121" id="121"/> + <connectors xsi:type="org-fortiss-af3-platform-raspberry:CanConnector" xmi:id="137" id="137" name="CanConnector253" outgoing="143"> + <layoutData xsi:type="org-fortiss-tooling-base-model-layout:Point" key="pos"/> + <layoutData xsi:type="org-fortiss-tooling-base-model-layout:Dimension" key="dim" width="108" height="72"/> + <layoutData xsi:type="org-fortiss-tooling-base-model-layout:Point" key="cpos"/> + <layoutData xsi:type="org-fortiss-tooling-base-model-layout:Dimension" key="cdim" width="0" height="0"/> + <layoutData xsi:type="org-fortiss-tooling-base-model-layout:OffsetOrientation" key="coffsetorient" offset="96" orientation="SOUTH"/> + </connectors> + <connectors xsi:type="org-fortiss-af3-platform-raspberry-gamepad:Button1" xmi:id="146" id="146" name="Button1_Triangle"> + <layoutData xsi:type="org-fortiss-tooling-base-model-layout:Point" key="pos"/> + <layoutData xsi:type="org-fortiss-tooling-base-model-layout:Dimension" key="dim" width="108" height="72"/> + <layoutData xsi:type="org-fortiss-tooling-base-model-layout:Point" key="cpos"/> + <layoutData xsi:type="org-fortiss-tooling-base-model-layout:Dimension" key="cdim" width="0" height="0"/> + <layoutData xsi:type="org-fortiss-tooling-base-model-layout:OffsetOrientation" key="coffsetorient" offset="36" orientation="WEST"/> + </connectors> + <layoutData xsi:type="org-fortiss-tooling-base-model-layout:Point" key="pos" x="84" y="72"/> + <layoutData xsi:type="org-fortiss-tooling-base-model-layout:Dimension" key="dim" width="241" height="277"/> + </containedElements> + <containedElements xsi:type="org-fortiss-af3-platform-raspberry:RaspberryPi" xmi:id="122" id="122" name="CoordinatorUnit" comment="" canCoordinationID="254" ipAddress="192.168.21.242" coordinatorUnit="true" cycleTime="100"> + <specifications xsi:type="org-fortiss-af3-platform-annotation:PowerConsumption" xmi:id="123" id="123"/> + <specifications xsi:type="org-fortiss-af3-platform-annotation:HardwareCost" xmi:id="124" id="124"/> + <specifications xsi:type="org-fortiss-af3-platform-annotation:MemoryPerNode" xmi:id="125" id="125"/> + <specifications xsi:type="org-fortiss-af3-safety-annotation:SafetyIntegrityLevel" xmi:id="126" id="126"/> + <connectors xsi:type="org-fortiss-af3-platform-raspberry:CanConnector" xmi:id="138" id="138" name="CanConnector254" outgoing="144"> + <layoutData xsi:type="org-fortiss-tooling-base-model-layout:Point" key="pos"/> + <layoutData xsi:type="org-fortiss-tooling-base-model-layout:Dimension" key="dim" width="108" height="72"/> + <layoutData xsi:type="org-fortiss-tooling-base-model-layout:Point" key="cpos"/> + <layoutData xsi:type="org-fortiss-tooling-base-model-layout:Dimension" key="cdim" width="0" height="0"/> + <layoutData xsi:type="org-fortiss-tooling-base-model-layout:OffsetOrientation" key="coffsetorient" offset="96" orientation="SOUTH"/> + </connectors> + <layoutData xsi:type="org-fortiss-tooling-base-model-layout:Point" key="pos" x="384" y="72"/> + <layoutData xsi:type="org-fortiss-tooling-base-model-layout:Dimension" key="dim" width="241" height="277"/> + </containedElements> + <containedElements xsi:type="org-fortiss-af3-platform-raspberry:RaspberryPi" xmi:id="128" id="128" name="ActuatorUnit" canCoordinationID="255" ipAddress="192.168.21.243" cycleTime="100"> + <specifications xsi:type="org-fortiss-af3-platform-annotation:PowerConsumption" xmi:id="129" id="129"/> + <specifications xsi:type="org-fortiss-af3-platform-annotation:HardwareCost" xmi:id="130" id="130"/> + <specifications xsi:type="org-fortiss-af3-platform-annotation:MemoryPerNode" xmi:id="131" id="131"/> + <specifications xsi:type="org-fortiss-af3-safety-annotation:SafetyIntegrityLevel" xmi:id="132" id="132"/> + <connectors xsi:type="org-fortiss-af3-platform-raspberry:CanConnector" xmi:id="139" id="139" name="CanConnector255" outgoing="145"> + <layoutData xsi:type="org-fortiss-tooling-base-model-layout:Point" key="pos"/> + <layoutData xsi:type="org-fortiss-tooling-base-model-layout:Dimension" key="dim" width="108" height="72"/> + <layoutData xsi:type="org-fortiss-tooling-base-model-layout:Point" key="cpos"/> + <layoutData xsi:type="org-fortiss-tooling-base-model-layout:Dimension" key="cdim" width="0" height="0"/> + <layoutData xsi:type="org-fortiss-tooling-base-model-layout:OffsetOrientation" key="coffsetorient" offset="96" orientation="SOUTH"/> + </connectors> + <connectors xsi:type="org-fortiss-af3-platform-raspberry:ActuatorPWM" xmi:id="147" id="147" name="PWM"> + <layoutData xsi:type="org-fortiss-tooling-base-model-layout:Point" key="pos"/> + <layoutData xsi:type="org-fortiss-tooling-base-model-layout:Dimension" key="dim" width="108" height="72"/> + <layoutData xsi:type="org-fortiss-tooling-base-model-layout:Point" key="cpos"/> + <layoutData xsi:type="org-fortiss-tooling-base-model-layout:Dimension" key="cdim" width="0" height="0"/> + <layoutData xsi:type="org-fortiss-tooling-base-model-layout:OffsetOrientation" key="coffsetorient" offset="24" orientation="EAST"/> + </connectors> + <layoutData xsi:type="org-fortiss-tooling-base-model-layout:Point" key="pos" x="684" y="72"/> + <layoutData xsi:type="org-fortiss-tooling-base-model-layout:Dimension" key="dim" width="241" height="277"/> + </containedElements> + <containedElements xsi:type="org-fortiss-af3-platform-raspberry:CanBus" xmi:id="134" id="134" name="CanBus"> + <specifications xsi:type="org-fortiss-af3-safety-annotation:SafetyIntegrityLevel" xmi:id="135" id="135"/> + <specifications xsi:type="org-fortiss-af3-timing-annotation:TransmissionUnitBandwidth" xmi:id="136" id="136"/> + <connectors xsi:type="org-fortiss-af3-platform-raspberry:CanConnector" xmi:id="140" id="140" name="CanConnector253" incoming="143"> + <layoutData xsi:type="org-fortiss-tooling-base-model-layout:Point" key="pos"/> + <layoutData xsi:type="org-fortiss-tooling-base-model-layout:Dimension" key="dim" width="108" height="72"/> + <layoutData xsi:type="org-fortiss-tooling-base-model-layout:Point" key="cpos"/> + <layoutData xsi:type="org-fortiss-tooling-base-model-layout:Dimension" key="cdim" width="0" height="0"/> + <layoutData xsi:type="org-fortiss-tooling-base-model-layout:OffsetOrientation" key="coffsetorient" offset="96"/> + </connectors> + <connectors xsi:type="org-fortiss-af3-platform-raspberry:CanConnector" xmi:id="141" id="141" name="CanConnector254" incoming="144"> + <layoutData xsi:type="org-fortiss-tooling-base-model-layout:Point" key="pos"/> + <layoutData xsi:type="org-fortiss-tooling-base-model-layout:Dimension" key="dim" width="108" height="72"/> + <layoutData xsi:type="org-fortiss-tooling-base-model-layout:Point" key="cpos"/> + <layoutData xsi:type="org-fortiss-tooling-base-model-layout:Dimension" key="cdim" width="0" height="0"/> + <layoutData xsi:type="org-fortiss-tooling-base-model-layout:OffsetOrientation" key="coffsetorient" offset="396"/> + </connectors> + <connectors xsi:type="org-fortiss-af3-platform-raspberry:CanConnector" xmi:id="142" id="142" name="CanConnector255" incoming="145"> + <layoutData xsi:type="org-fortiss-tooling-base-model-layout:Point" key="pos"/> + <layoutData xsi:type="org-fortiss-tooling-base-model-layout:Dimension" key="dim" width="108" height="72"/> + <layoutData xsi:type="org-fortiss-tooling-base-model-layout:Point" key="cpos"/> + <layoutData xsi:type="org-fortiss-tooling-base-model-layout:Dimension" key="cdim" width="0" height="0"/> + <layoutData xsi:type="org-fortiss-tooling-base-model-layout:OffsetOrientation" key="coffsetorient" offset="696"/> + </connectors> + <layoutData xsi:type="org-fortiss-tooling-base-model-layout:Point" key="pos" x="84" y="384"/> + <layoutData xsi:type="org-fortiss-tooling-base-model-layout:Dimension" key="dim" width="841" height="72"/> + </containedElements> + <specifications xsi:type="org-fortiss-af3-safety-annotation:SafetyIntegrityLevel" xmi:id="127" id="127"/> + <connections xsi:type="org-fortiss-af3-platform:TransmissionConnection" xmi:id="143" id="143" name="CanConnector253" comment="" source="137" target="140"> + <layoutData xsi:type="org-fortiss-tooling-base-model-layout:Points" key="points"/> + </connections> + <connections xsi:type="org-fortiss-af3-platform:TransmissionConnection" xmi:id="144" id="144" name="CanConnector254" comment="" source="138" target="141"> + <layoutData xsi:type="org-fortiss-tooling-base-model-layout:Points" key="points"/> + </connections> + <connections xsi:type="org-fortiss-af3-platform:TransmissionConnection" xmi:id="145" id="145" name="CanConnector255" comment="" source="139" target="142"> + <layoutData xsi:type="org-fortiss-tooling-base-model-layout:Points" key="points"/> + </connections> + </rootElements> + <rootElements xsi:type="org-fortiss-af3-deployment:Deployment" xmi:id="148" id="148" name="Deployment"> + <componentArchitectureReference reference="6"/> + <platformArchitectureReference reference="116"/> + <componentAllocations xmi:id="149" id="149" component="12" executionUnit="117"> + <layoutData xsi:type="org-fortiss-tooling-base-model-layout:Points" key="points"/> + </componentAllocations> + <componentAllocations xmi:id="150" id="150" component="22" executionUnit="122"> + <layoutData xsi:type="org-fortiss-tooling-base-model-layout:Points" key="points"/> + </componentAllocations> + <componentAllocations xmi:id="151" id="151" component="27" executionUnit="128"> + <layoutData xsi:type="org-fortiss-tooling-base-model-layout:Points" key="points"/> + </componentAllocations> + <portAllocations xsi:type="org-fortiss-af3-deployment:InputPortAllocation" inputPort="41" receiver="146"/> + <portAllocations xsi:type="org-fortiss-af3-deployment:OutputPortAllocation" outputPort="58" transmitter="147"/> + <portAllocations xsi:type="org-fortiss-af3-deployment:TransceiverAllocation" port="36" transceiver="137"/> + <portAllocations xsi:type="org-fortiss-af3-deployment:TransceiverAllocation" port="38" transceiver="138"/> + <portAllocations xsi:type="org-fortiss-af3-deployment:TransceiverAllocation" port="53" transceiver="138"/> + <portAllocations xsi:type="org-fortiss-af3-deployment:TransceiverAllocation" port="55" transceiver="139"/> + <deploymentParameterMap> + <key/> + <value xmi:id="152" id="152" component="12" executionUnit="117"> + <specifications xsi:type="org-fortiss-af3-timing-annotation:Wcet" xmi:id="153" id="153"/> + </value> + </deploymentParameterMap> + <deploymentParameterMap> + <key/> + <value xmi:id="154" id="154" component="12" executionUnit="122"> + <specifications xsi:type="org-fortiss-af3-timing-annotation:Wcet" xmi:id="155" id="155"/> + </value> + </deploymentParameterMap> + <deploymentParameterMap> + <key/> + <value xmi:id="156" id="156" component="12" executionUnit="128"> + <specifications xsi:type="org-fortiss-af3-timing-annotation:Wcet" xmi:id="157" id="157"/> + </value> + </deploymentParameterMap> + <deploymentParameterMap> + <key/> + <value xmi:id="158" id="158" component="22" executionUnit="117"> + <specifications xsi:type="org-fortiss-af3-timing-annotation:Wcet" xmi:id="159" id="159"/> + </value> + </deploymentParameterMap> + <deploymentParameterMap> + <key/> + <value xmi:id="160" id="160" component="22" executionUnit="122"> + <specifications xsi:type="org-fortiss-af3-timing-annotation:Wcet" xmi:id="161" id="161"/> + </value> + </deploymentParameterMap> + <deploymentParameterMap> + <key/> + <value xmi:id="162" id="162" component="22" executionUnit="128"> + <specifications xsi:type="org-fortiss-af3-timing-annotation:Wcet" xmi:id="163" id="163"/> + </value> + </deploymentParameterMap> + <deploymentParameterMap> + <key/> + <value xmi:id="164" id="164" component="27" executionUnit="117"> + <specifications xsi:type="org-fortiss-af3-timing-annotation:Wcet" xmi:id="165" id="165"/> + </value> + </deploymentParameterMap> + <deploymentParameterMap> + <key/> + <value xmi:id="166" id="166" component="27" executionUnit="122"> + <specifications xsi:type="org-fortiss-af3-timing-annotation:Wcet" xmi:id="167" id="167"/> + </value> + </deploymentParameterMap> + <deploymentParameterMap> + <key/> + <value xmi:id="168" id="168" component="27" executionUnit="128"> + <specifications xsi:type="org-fortiss-af3-timing-annotation:Wcet" xmi:id="169" id="169"/> + </value> + </deploymentParameterMap> + </rootElements> +</org-fortiss-af3-project:FileProject> -- GitLab