Skip to content
Snippets Groups Projects
Commit 8d92db8c authored by Stefan's avatar Stefan
Browse files

Merge remote-tracking branch 'remotes/origin/master' into feature/ControlCenter

parents 128cc3ca 5672ee7f
No related branches found
No related tags found
1 merge request!1Feature/control center
Showing
with 215 additions and 56 deletions
......@@ -4,5 +4,5 @@ CanTransmissionCatalog.java 959d488ebec4ae6a50c3f699d42aad535b1ae0c3 YELLOW
ConsoleOutputGeneratorExtension.java d57db44d57630a50e26c9eeed90d6631bf99db5d YELLOW
MultiUnitMainGenerator.java 458754b89c2d79db3fee08baa444424772e40fb7 RED
PWMActuatorGeneratorExtension.java 8cbfd72070cfc1c8a4da4ccc1d18a6b3e75cea7f YELLOW
RaspberryPIGeneratorExtension.java 9822dd93e32d3287c1446eb94333d2ca55ff4274 RED
RaspberryPIGeneratorExtension.java c81d5606099b3922c70aecd103b2a7269b90f0a6 RED
SingleUnitMainGenerator.java 93d0370b01330ab023e02761df818d36fac42b0f RED
......@@ -52,31 +52,23 @@ import org.fortiss.af3.platform.model.ExecutionUnit;
import org.fortiss.af3.platform.model.PlatformConnectorUnit;
import org.fortiss.af3.platform.model.TransmissionUnit;
import org.fortiss.af3.platform.raspberry.AF3PlatformRaspberryActivator;
import org.fortiss.af3.platform.raspberry.generator.framework.IRasPiHeaderGeneratorExtension;
import org.fortiss.af3.platform.raspberry.generator.framework.IRasPiLibraryBasedGeneratorExtension;
import org.fortiss.af3.platform.raspberry.generator.framework.IRasPiSourceBasedGeneratorExtension;
import org.fortiss.af3.platform.raspberry.generator.framework.IRasPiCopiedHeaderGeneratorExtension;
import org.fortiss.af3.platform.raspberry.generator.framework.IRasPiCopiedLibraryBasedGeneratorExtension;
import org.fortiss.af3.platform.raspberry.generator.framework.IRasPiCopiedSourceBasedGeneratorExtension;
import org.fortiss.af3.platform.raspberry.model.CanBus;
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 ExecutionUnitExecutableBase} for the {@link RaspberryPi} platform. */
public class RaspberryPIGeneratorExtension extends ExecutionUnitExecutableBase<RaspberryPi, CSourcePackage> {
public class RaspberryPIGeneratorExtension extends
ExecutionUnitExecutableBase<RaspberryPi, CSourcePackage> {
/** Folder name for library source files. */
private static final String SRC_LIB_SUB_PACKAGE_NAME = "src-lib";
/** Folder name for library include files. */
public static final String INC_LIB_SUB_PACKAGE_NAME = "inc-lib";
/** Folder name for linkable static library files. */
private static final String LIB_SUB_PACKAGE_NAME = "lib";
/** Default library names to be used always. */
// Note that the order is important (GCC linker crap!)
private static final String LIB_NAMES = "af3pihal rt pthread";
/** Default library names extended with brick. */
// Note that the order is important (GCC linker crap!)
private static final String LIB_NAMES_WITH_BRICK = "brick " + LIB_NAMES;
/** Default library names extended with vesc. */
// Note that the order is important (GCC linker crap!)
private static final String LIB_NAMES_WITH_VESC = LIB_NAMES_WITH_BRICK + " vesc";
// code generator input and intermediary data
/** The transformation context provided by the deployment generator framework. */
......@@ -90,6 +82,12 @@ public class RaspberryPIGeneratorExtension extends ExecutionUnitExecutableBase<R
/** The map from platform elements to executables. */
private Map<PlatformConnectorUnit, ExecutableBase<?>> platformConnector2ExecutableBase =
new HashMap<>();
/** Set of headers to be included. */
private Set<String> includedHeaders = new HashSet<>();
/** Set of source files to be included. */
private Set<String> includedSources = new HashSet<>();
/** Set of libraries to be included. */
private List<String> includedLibraries = new ArrayList<String>();
// code generator output
/** The C source package produced by this generator. */
......@@ -128,16 +126,14 @@ public class RaspberryPIGeneratorExtension extends ExecutionUnitExecutableBase<R
*/
private Set<String> addPlatformElementsCode(
List<Pair<PlatformConnectorUnit, Port>> deployedPorts) {
Set<String> includedHeaders = new HashSet<>();
Set<String> includedSources = new HashSet<>();
Set<String> includedLibraries = new HashSet<>();
for(Pair<PlatformConnectorUnit, Port> pair : deployedPorts) {
PlatformConnectorUnit pcu = pair.getFirst();
ExecutableBase<?> executable =
createTransformedObjectWithoutExceptionFor(pcu, ExecutableBase.class, context);
platformConnector2ExecutableBase.put(pcu, executable);
if(executable instanceof IRasPiHeaderGeneratorExtension) {
IRasPiHeaderGeneratorExtension headerExec = (IRasPiHeaderGeneratorExtension)executable;
if(executable instanceof IRasPiCopiedHeaderGeneratorExtension) {
IRasPiCopiedHeaderGeneratorExtension headerExec =
(IRasPiCopiedHeaderGeneratorExtension)executable;
if(!includedHeaders.contains(headerExec.getHeaderFileName())) {
generatorResult.getSubPackage(INC_LIB_SUB_PACKAGE_NAME).addUnit(
headerExec.getHeaderFileContent());
......@@ -145,8 +141,9 @@ public class RaspberryPIGeneratorExtension extends ExecutionUnitExecutableBase<R
}
// ignore header file, since it is already included
}
if(executable instanceof IRasPiSourceBasedGeneratorExtension) {
IRasPiSourceBasedGeneratorExtension srcExec = (IRasPiSourceBasedGeneratorExtension)executable;
if(executable instanceof IRasPiCopiedSourceBasedGeneratorExtension) {
IRasPiCopiedSourceBasedGeneratorExtension srcExec =
(IRasPiCopiedSourceBasedGeneratorExtension)executable;
if(!includedSources.contains(srcExec.getSourceFileName())) {
generatorResult.getSubPackage(SRC_LIB_SUB_PACKAGE_NAME).addUnit(
srcExec.getSourceFileContent());
......@@ -154,12 +151,14 @@ public class RaspberryPIGeneratorExtension extends ExecutionUnitExecutableBase<R
}
// ignore source file, since it is already included
}
if(executable instanceof IRasPiLibraryBasedGeneratorExtension) {
IRasPiLibraryBasedGeneratorExtension libExec = (IRasPiLibraryBasedGeneratorExtension)executable;
if(executable instanceof IRasPiCopiedLibraryBasedGeneratorExtension) {
IRasPiCopiedLibraryBasedGeneratorExtension libExec =
(IRasPiCopiedLibraryBasedGeneratorExtension)executable;
if(!includedLibraries.contains(libExec.getLibraryFileName())) {
generatorResult.getSubPackage(LIB_SUB_PACKAGE_NAME).addUnit(
libExec.getLibraryFileContent());
includedLibraries.add(libExec.getLibraryFileName());
includedLibraries.addAll(libExec.getDependencyLibraries());
}
// ignore library file, since it is already included
}
......@@ -257,7 +256,11 @@ public class RaspberryPIGeneratorExtension extends ExecutionUnitExecutableBase<R
/** Adds the build process files: configure and Makedefs. */
private void addConfigureAndMakedefsFiles() {
generatorResult.addUnit(getConfigureFile(modelElement.getName(), LIB_NAMES_WITH_VESC));
StringBuilder sb = new StringBuilder();
for(String s : includedLibraries) {
sb.append(s).append(' ');
}
generatorResult.addUnit(getConfigureFile(modelElement.getName(), sb.toString()));
generatorResult.addUnit(getMakedefsFile());
}
......
BrickLibraryGeneratorExtensionBase.java a02f7030ddcc539c8e48488e8e3c29858edaf1f7 YELLOW
PiHALLibraryGeneratorExtensionBase.java 74752cafe6b83d8c00dc88945bf001507704022b YELLOW
BrickLibraryGeneratorExtensionBase.java 2b22b7ef042ef6eced32f227fd4d682bab421722 YELLOW
PiHALLibraryGeneratorExtensionBase.java d6678cf07b655b33844329dae89603d7827c63b1 YELLOW
VescLibraryGeneratorExtensionBase.java 1227d3de77cab52a396b3d9751a6b43a8c373b31 YELLOW
......@@ -15,22 +15,26 @@
+--------------------------------------------------------------------------*/
package org.fortiss.af3.platform.raspberry.generator.extension.library;
import static java.util.Arrays.asList;
import static org.fortiss.af3.generator.common.utils.SourceModelElementFactory.createByteContentUnitForPluginFileInRCP;
import java.util.List;
import org.eclipse.emf.ecore.EObject;
import org.fortiss.af3.generator.common.model.source.ByteContentUnit;
import org.fortiss.af3.platform.language.executable.ExecutableBase;
import org.fortiss.af3.platform.raspberry.AF3PlatformRaspberryActivator;
import org.fortiss.af3.platform.raspberry.generator.framework.IRasPiHeaderGeneratorExtension;
import org.fortiss.af3.platform.raspberry.generator.framework.IRasPiLibraryBasedGeneratorExtension;
import org.fortiss.af3.platform.raspberry.generator.framework.IRasPiCopiedHeaderGeneratorExtension;
import org.fortiss.af3.platform.raspberry.generator.framework.IRasPiCopiedLibraryBasedGeneratorExtension;
/**
* Base class for executables using the AF3 Pi HAL library.
*
* @author hoelzl
*/
public abstract class BrickLibraryGeneratorExtensionBase<T extends EObject> extends ExecutableBase<T>
implements IRasPiLibraryBasedGeneratorExtension, IRasPiHeaderGeneratorExtension {
public abstract class BrickLibraryGeneratorExtensionBase<T extends EObject> extends
ExecutableBase<T> implements IRasPiCopiedLibraryBasedGeneratorExtension,
IRasPiCopiedHeaderGeneratorExtension {
/** Constructor. */
public BrickLibraryGeneratorExtensionBase(T modelElement) {
super(modelElement);
......@@ -39,7 +43,14 @@ public abstract class BrickLibraryGeneratorExtensionBase<T extends EObject> exte
/** {@inheritDoc} */
@Override
public final String getLibraryFileName() {
return "libbrick.a";
return "brick";
}
/** {@inheritDoc} */
@Override
public List<String> getDependencyLibraries() {
// Note that the order is important (GCC linker crap!)
return asList("rt", "pthread");
}
/** {@inheritDoc} */
......
......@@ -15,22 +15,26 @@
+--------------------------------------------------------------------------*/
package org.fortiss.af3.platform.raspberry.generator.extension.library;
import static java.util.Arrays.asList;
import static org.fortiss.af3.generator.common.utils.SourceModelElementFactory.createByteContentUnitForPluginFileInRCP;
import java.util.List;
import org.eclipse.emf.ecore.EObject;
import org.fortiss.af3.generator.common.model.source.ByteContentUnit;
import org.fortiss.af3.platform.language.executable.ExecutableBase;
import org.fortiss.af3.platform.raspberry.AF3PlatformRaspberryActivator;
import org.fortiss.af3.platform.raspberry.generator.framework.IRasPiHeaderGeneratorExtension;
import org.fortiss.af3.platform.raspberry.generator.framework.IRasPiLibraryBasedGeneratorExtension;
import org.fortiss.af3.platform.raspberry.generator.framework.IRasPiCopiedHeaderGeneratorExtension;
import org.fortiss.af3.platform.raspberry.generator.framework.IRasPiCopiedLibraryBasedGeneratorExtension;
/**
* Base class for executables using the AF3 Pi HAL library.
*
* @author hoelzl
*/
public abstract class PiHALLibraryGeneratorExtensionBase<T extends EObject> extends ExecutableBase<T>
implements IRasPiLibraryBasedGeneratorExtension, IRasPiHeaderGeneratorExtension {
public abstract class PiHALLibraryGeneratorExtensionBase<T extends EObject> extends
ExecutableBase<T> implements IRasPiCopiedLibraryBasedGeneratorExtension,
IRasPiCopiedHeaderGeneratorExtension {
/** Constructor. */
public PiHALLibraryGeneratorExtensionBase(T modelElement) {
super(modelElement);
......@@ -39,7 +43,14 @@ public abstract class PiHALLibraryGeneratorExtensionBase<T extends EObject> exte
/** {@inheritDoc} */
@Override
public final String getLibraryFileName() {
return "libaf3pihal.a";
return "af3pihal";
}
/** {@inheritDoc} */
@Override
public List<String> getDependencyLibraries() {
// Note that the order is important (GCC linker crap!)
return asList("rt", "pthread");
}
/** {@inheritDoc} */
......
/*-------------------------------------------------------------------------+
| Copyright 2018 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.extension.library;
import static java.util.Arrays.asList;
import java.util.List;
import org.eclipse.emf.ecore.EObject;
import org.fortiss.af3.platform.language.executable.ExecutableBase;
import org.fortiss.af3.platform.raspberry.generator.framework.IPreinstalledHeaderGeneratorExtension;
import org.fortiss.af3.platform.raspberry.generator.framework.IPreinstalledLibraryGeneratorExtension;
/**
* Base class for executables using the Vesc library.
*
* @author hoelzl
*/
public abstract class VescLibraryGeneratorExtensionBase<T extends EObject> extends
ExecutableBase<T> implements IPreinstalledLibraryGeneratorExtension,
IPreinstalledHeaderGeneratorExtension {
/** Constructor. */
public VescLibraryGeneratorExtensionBase(T modelElement) {
super(modelElement);
}
/** {@inheritDoc} */
@Override
public String getHeaderIncludes() {
return "#include \"hal.h\"\n" + "#include \"commands.h\"\n";
}
/** {@inheritDoc} */
@Override
public List<String> getLibraryNames() {
return asList("vesc");
}
}
MotorControlGeneratorExtensionBase.java 3144ca92ff4dd5c7aff891c8a5e6df2a63d18e33 RED
MotorControlInputGeneratorExtension.java 46e45f37f30b48fe50a7167799adaab015b8abd3 RED
MotorControlGeneratorExtensionBase.java 3b62fdf7052bc212bc565c8b891fc3da0912b04b RED
MotorControlInputGeneratorExtension.java fc4f86caf0867d5ec27e2db2461d2e6365eb2dd2 RED
MotorControlOutputGeneratorExtension.java 9ab48031ad519db2aed2cab21c5219d6c8feeefb RED
......@@ -24,8 +24,8 @@ import org.fortiss.af3.platform.raspberry.generator.framework.ISingletonInitiali
*
* @author hoelzl
*/
abstract class MotorControlGeneratorExtensionBase<T extends EObject> extends ExecutableBase<T> implements
ISingletonInitializationGeneratorExtension {
abstract class MotorControlGeneratorExtensionBase<T extends EObject> extends ExecutableBase<T>
implements ISingletonInitializationGeneratorExtension {
/** Constructor. */
public MotorControlGeneratorExtensionBase(T modelElement) {
super(modelElement);
......@@ -46,6 +46,8 @@ abstract class MotorControlGeneratorExtensionBase<T extends EObject> extends Exe
/** {@inheritDoc} */
@Override
public final String getSingletonAuxiliaryFunctions(String singletonPostfix) {
// return "extern void initUSB(char* device, int baudRate);\n"
// + "extern void uint8_t get_values();";
return null;
}
......
......@@ -15,17 +15,27 @@
+--------------------------------------------------------------------------*/
package org.fortiss.af3.platform.raspberry.generator.extension.motorcontrol;
import org.fortiss.af3.platform.language.executable.ExecutableBase;
import org.fortiss.af3.component.model.InputPort;
import org.fortiss.af3.expression.model.terms.IExpressionTerm;
import org.fortiss.af3.platform.language.executable.IReadableExecutable;
import org.fortiss.af3.platform.raspberry.model.motorcontrol.MotorControlInput;
/**
* {@link ExecutableBase} for {@link MotorControlInput}.
* Generator extension for {@link MotorControlInput}.
*
* @author hoelzl
*/
public class MotorControlInputGeneratorExtension extends MotorControlGeneratorExtensionBase<MotorControlInput> {
public class MotorControlInputGeneratorExtension extends
MotorControlGeneratorExtensionBase<MotorControlInput> implements IReadableExecutable {
/** Constructor. */
public MotorControlInputGeneratorExtension(MotorControlInput modelElement) {
super(modelElement);
}
/** {@inheritDoc} */
@Override
public IExpressionTerm getValueReadAccessor(InputPort logicalSignal) {
// TODO Auto-generated method stub
return null;
}
}
IInstanceGeneratorExtension.java 9d20878f9a1b9f82bd8f9f090bd989af1f08c8ab YELLOW
IInstanceInitializationGeneratorExtension.java ae145d29cb2abbc492380c6af303a12fc2a0daa6 YELLOW
IInstanceTerminationGeneratorExtension.java d9632d04207a484bbe46110ec5925c9850228f30 YELLOW
IRasPiHeaderGeneratorExtension.java ba484bfa345f324e8998004868bb0a815ccc1ada YELLOW
IRasPiLibraryBasedGeneratorExtension.java 7759d1510fa776727afaa3c38f881c2209dc97a2 YELLOW
IRasPiSourceBasedGeneratorExtension.java 4aa645389a5f4538d7004ff7d6f6a29008bf29e7 YELLOW
IPreinstalledHeaderGeneratorExtension.java 120c52d35969b35b5ff1ea50570401d5451ba221 YELLOW
IPreinstalledLibraryGeneratorExtension.java 437fafdb45561b1acc6c54db2c43c39c48033280 YELLOW
IRasPiCopiedHeaderGeneratorExtension.java 8c08db84c6dfe01b6eb242ea584f3765210fdc56 YELLOW
IRasPiCopiedLibraryBasedGeneratorExtension.java edac836e2553f72a0487ac6455ae87d87d3f6aae YELLOW
IRasPiCopiedSourceBasedGeneratorExtension.java 28e43319dab6ffb353c06be952b5671c3eb59164 YELLOW
IReadableGeneratorExtension.java cb46973bf8d1635c9893f15d4c37a60c570b5377 YELLOW
ISingletonGeneratorExtension.java c345a55893508b1707f0fbe3cebae7c761f3277d YELLOW
ISingletonInitializationGeneratorExtension.java 50394cc39e0937785c093b7042f7b4a89027aa33 YELLOW
ISingletonTerminationGeneratorExtension.java 5f15352e7343ca551b754f6259dd2324a16b55a8 YELLOW
IWriteableGeneratorExtension.java dd4da2e4939a947d9ff343d94bb8e86a7f15439c YELLOW
IWriteableGeneratorExtension.java b390c0116e7cf823f27c620950f94e7bc14545d4 YELLOW
/*-------------------------------------------------------------------------+
| Copyright 2018 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.framework;
/**
* Interface for generator extensions, which require one or more header files to be imported in the
* created main file. This is usually the case when the header files in question are pre-installed
* (e.g. C standard library headers).
*
* @author hoelzl
*/
public interface IPreinstalledHeaderGeneratorExtension {
/** Returns the included header files. */
public String getHeaderIncludes();
}
/*-------------------------------------------------------------------------+
| Copyright 2018 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.framework;
import java.util.List;
/**
* Interface for generator extensions, which require one or more library files to be included during
* the linker pass. This is usually the case when the libraries in question are pre-installed
* (e.g. C standard libraries). Note that the generator will automatically add the "lib" prefix when
* necessary. Also the implementor is required to provide all library names including any
* dependencies: if {@code LibA} depends on {@code LibB} then returned list must be {@code LibA}
* followed by {@code LibB}, i.e., libraries must be included before libraries they depend on.
*
* @author hoelzl
*/
public interface IPreinstalledLibraryGeneratorExtension {
/** Returns the list of library files. */
public List<String> getLibraryNames();
}
......@@ -18,11 +18,11 @@ package org.fortiss.af3.platform.raspberry.generator.framework;
import org.fortiss.af3.generator.common.model.source.ByteContentUnit;
/**
* Interface for generator extensions, which require a header file to be included.
* Interface for generator extensions, which provide a header file to be copied to target directory.
*
* @author hoelzl
*/
public interface IRasPiHeaderGeneratorExtension {
public interface IRasPiCopiedHeaderGeneratorExtension {
/** Returns the name of the header file required by this executable. */
String getHeaderFileName();
......
......@@ -15,17 +15,23 @@
+--------------------------------------------------------------------------*/
package org.fortiss.af3.platform.raspberry.generator.framework;
import java.util.List;
import org.fortiss.af3.generator.common.model.source.ByteContentUnit;
/**
* Interface for generator extensions, which require a static library to be included.
* Interface for generator extensions, which provide a static library to be copied to the target
* folder.
*
* @author hoelzl
*/
public interface IRasPiLibraryBasedGeneratorExtension {
public interface IRasPiCopiedLibraryBasedGeneratorExtension {
/** Returns the name of the library required by this executable. */
String getLibraryFileName();
/** Returns the list of libraries the copied library depends on. */
List<String> getDependencyLibraries();
/** Returns the library as {@link ByteContentUnit} binary. */
ByteContentUnit getLibraryFileContent();
}
......@@ -18,11 +18,12 @@ package org.fortiss.af3.platform.raspberry.generator.framework;
import org.fortiss.af3.generator.common.model.source.ByteContentUnit;
/**
* Interface for generator extensions, which require a source file to be included.
* Interface for generator extensions, which provide a source file to be copied to the target
* folder.
*
* @author hoelzl
*/
public interface IRasPiSourceBasedGeneratorExtension {
public interface IRasPiCopiedSourceBasedGeneratorExtension {
/** Returns the name of the source file required by this executable. */
String getSourceFileName();
......
......@@ -18,9 +18,9 @@ package org.fortiss.af3.platform.raspberry.generator.framework;
import org.fortiss.af3.component.model.OutputPort;
/**
* Executable for platform elements that can be written (e.g. actuators and busses). Each method
* is provided a value by the calling code generator, which should be used to obtain the
* value to be written. Implementors are also provided a {@code postfix} and a
* Interface for generator extensions for platform elements that can be written (e.g. actuators and
* busses). Each method is provided a value by the calling code generator, which should be used to
* obtain the value to be written. Implementors are also provided a {@code postfix} and a
* {@code singletonPostfix} if they also implement {@link IInstanceGeneratorExtension} and
* {@link ISingletonGeneratorExtension}, respectively. The code generator also provides the deployed
* {@link OutputPort} in case an implementor needs additional data from the model (e.g. the type of
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment