From caa9cdb17da0a77c50d3c96b926ac4e2a482b927 Mon Sep 17 00:00:00 2001
From: Mayank Chaudhary <chaudhary@fortiss.org>
Date: Mon, 21 Mar 2016 14:49:11 +0000
Subject: [PATCH]

---
 ...pberryPi1ToCANBusConnectionCompositor.java |   8 +-
 ...pberryPi2ToCANBusConnectionCompositor.java |   8 +-
 ...pberryPi3ToCANBusConnectionCompositor.java |   8 +-
 .../ui/prototypes/PrototypeProvider.java      |   2 +-
 .../trunk/META-INF/MANIFEST.MF                |   2 +
 .../trunk/model/raspberry.ecore               |  16 +-
 .../trunk/plugin.xml                          | 322 +-----------------
 ...yPlatformHierarchicalCompositionRules.java |   2 -
 .../generator/executable/BusExecutable.java   |   3 +-
 .../executable/CANBusExecutable.java          |   3 +-
 .../generator/executable/CoreExecutable.java  | 292 +++++++++++++++-
 ...NBusTransmissionCatalogTransformation.java |   6 +-
 12 files changed, 318 insertions(+), 354 deletions(-)

diff --git a/org.fortiss.af3.platform.raspberry.ui/trunk/src/org/fortiss/af3/platform/raspberry/ui/compose/connections/RaspberryPi1ToCANBusConnectionCompositor.java b/org.fortiss.af3.platform.raspberry.ui/trunk/src/org/fortiss/af3/platform/raspberry/ui/compose/connections/RaspberryPi1ToCANBusConnectionCompositor.java
index 6794a4ea..6d7feaef 100644
--- a/org.fortiss.af3.platform.raspberry.ui/trunk/src/org/fortiss/af3/platform/raspberry/ui/compose/connections/RaspberryPi1ToCANBusConnectionCompositor.java
+++ b/org.fortiss.af3.platform.raspberry.ui/trunk/src/org/fortiss/af3/platform/raspberry/ui/compose/connections/RaspberryPi1ToCANBusConnectionCompositor.java
@@ -21,8 +21,8 @@ import static org.fortiss.af3.platform.raspberry.utils.RaspberryModelElementFact
 import static org.fortiss.af3.platform.raspberry.utils.RaspberryModelElementFactory.createCANBusMasterPort;
 import static org.fortiss.af3.platform.utils.PlatformModelElementFactory.createTransmissionConnection;
 
+import org.fortiss.af3.platform.model.PlatformArchitecture;
 import org.fortiss.af3.platform.raspberry.model.CANBus;
-import org.fortiss.af3.platform.raspberry.model.Core;
 import org.fortiss.af3.platform.raspberry.model.RaspberryPi1;
 import org.fortiss.tooling.base.compose.HierarchicElementConnectionCompositorBase;
 import org.fortiss.tooling.base.model.element.IConnection;
@@ -39,11 +39,11 @@ import org.fortiss.tooling.kernel.service.IPersistencyService;
  * @ConQAT.Rating RED Hash:
  */
 public class RaspberryPi1ToCANBusConnectionCompositor extends
-		HierarchicElementConnectionCompositorBase<RaspberryPi1, Core, CANBus> {
+		HierarchicElementConnectionCompositorBase<PlatformArchitecture, RaspberryPi1, CANBus> {
 
 	/** {@inheritDoc} */
 	@Override
-	public boolean canConnect(Core source, CANBus target, RaspberryPi1 parent,
+	public boolean canConnect(RaspberryPi1 source, CANBus target, PlatformArchitecture parent,
 			IConnectionCompositionContext context) {
 
 		if(source.eContainer() != target.eContainer()) {
@@ -54,7 +54,7 @@ public class RaspberryPi1ToCANBusConnectionCompositor extends
 
 	/** {@inheritDoc} */
 	@Override
-	public boolean connect(Core source, CANBus target, RaspberryPi1 parent,
+	public boolean connect(RaspberryPi1 source, CANBus target, PlatformArchitecture parent,
 			IConnectionCompositionContext context) {
 		IConnector sourceConnector = createEntryConnector();
 		avoidDuplicateConnectorName(source, sourceConnector);
diff --git a/org.fortiss.af3.platform.raspberry.ui/trunk/src/org/fortiss/af3/platform/raspberry/ui/compose/connections/RaspberryPi2ToCANBusConnectionCompositor.java b/org.fortiss.af3.platform.raspberry.ui/trunk/src/org/fortiss/af3/platform/raspberry/ui/compose/connections/RaspberryPi2ToCANBusConnectionCompositor.java
index 97062072..144fe3a2 100644
--- a/org.fortiss.af3.platform.raspberry.ui/trunk/src/org/fortiss/af3/platform/raspberry/ui/compose/connections/RaspberryPi2ToCANBusConnectionCompositor.java
+++ b/org.fortiss.af3.platform.raspberry.ui/trunk/src/org/fortiss/af3/platform/raspberry/ui/compose/connections/RaspberryPi2ToCANBusConnectionCompositor.java
@@ -21,8 +21,8 @@ import static org.fortiss.af3.platform.raspberry.utils.RaspberryModelElementFact
 import static org.fortiss.af3.platform.raspberry.utils.RaspberryModelElementFactory.createCANBusMasterPort;
 import static org.fortiss.af3.platform.utils.PlatformModelElementFactory.createTransmissionConnection;
 
+import org.fortiss.af3.platform.model.PlatformArchitecture;
 import org.fortiss.af3.platform.raspberry.model.CANBus;
-import org.fortiss.af3.platform.raspberry.model.Core;
 import org.fortiss.af3.platform.raspberry.model.RaspberryPi2;
 import org.fortiss.tooling.base.compose.HierarchicElementConnectionCompositorBase;
 import org.fortiss.tooling.base.model.element.IConnection;
@@ -39,11 +39,11 @@ import org.fortiss.tooling.kernel.service.IPersistencyService;
  * @ConQAT.Rating RED Hash:
  */
 public class RaspberryPi2ToCANBusConnectionCompositor extends
-		HierarchicElementConnectionCompositorBase<RaspberryPi2, Core, CANBus> {
+		HierarchicElementConnectionCompositorBase<PlatformArchitecture, RaspberryPi2, CANBus> {
 
 	/** {@inheritDoc} */
 	@Override
-	public boolean canConnect(Core source, CANBus target, RaspberryPi2 parent,
+	public boolean canConnect(RaspberryPi2 source, CANBus target, PlatformArchitecture parent,
 			IConnectionCompositionContext context) {
 
 		if(source.eContainer() != target.eContainer()) {
@@ -54,7 +54,7 @@ public class RaspberryPi2ToCANBusConnectionCompositor extends
 
 	/** {@inheritDoc} */
 	@Override
-	public boolean connect(Core source, CANBus target, RaspberryPi2 parent,
+	public boolean connect(RaspberryPi2 source, CANBus target, PlatformArchitecture parent,
 			IConnectionCompositionContext context) {
 		IConnector sourceConnector = createEntryConnector();
 		avoidDuplicateConnectorName(source, sourceConnector);
diff --git a/org.fortiss.af3.platform.raspberry.ui/trunk/src/org/fortiss/af3/platform/raspberry/ui/compose/connections/RaspberryPi3ToCANBusConnectionCompositor.java b/org.fortiss.af3.platform.raspberry.ui/trunk/src/org/fortiss/af3/platform/raspberry/ui/compose/connections/RaspberryPi3ToCANBusConnectionCompositor.java
index db86d2ae..84a717a3 100644
--- a/org.fortiss.af3.platform.raspberry.ui/trunk/src/org/fortiss/af3/platform/raspberry/ui/compose/connections/RaspberryPi3ToCANBusConnectionCompositor.java
+++ b/org.fortiss.af3.platform.raspberry.ui/trunk/src/org/fortiss/af3/platform/raspberry/ui/compose/connections/RaspberryPi3ToCANBusConnectionCompositor.java
@@ -21,8 +21,8 @@ import static org.fortiss.af3.platform.raspberry.utils.RaspberryModelElementFact
 import static org.fortiss.af3.platform.raspberry.utils.RaspberryModelElementFactory.createCANBusMasterPort;
 import static org.fortiss.af3.platform.utils.PlatformModelElementFactory.createTransmissionConnection;
 
+import org.fortiss.af3.platform.model.PlatformArchitecture;
 import org.fortiss.af3.platform.raspberry.model.CANBus;
-import org.fortiss.af3.platform.raspberry.model.Core;
 import org.fortiss.af3.platform.raspberry.model.RaspberryPi3;
 import org.fortiss.tooling.base.compose.HierarchicElementConnectionCompositorBase;
 import org.fortiss.tooling.base.model.element.IConnection;
@@ -39,11 +39,11 @@ import org.fortiss.tooling.kernel.service.IPersistencyService;
  * @ConQAT.Rating RED Hash:
  */
 public class RaspberryPi3ToCANBusConnectionCompositor extends
-		HierarchicElementConnectionCompositorBase<RaspberryPi3, Core, CANBus> {
+		HierarchicElementConnectionCompositorBase<PlatformArchitecture, RaspberryPi3, CANBus> {
 
 	/** {@inheritDoc} */
 	@Override
-	public boolean canConnect(Core source, CANBus target, RaspberryPi3 parent,
+	public boolean canConnect(RaspberryPi3 source, CANBus target, PlatformArchitecture parent,
 			IConnectionCompositionContext context) {
 
 		if(source.eContainer() != target.eContainer()) {
@@ -54,7 +54,7 @@ public class RaspberryPi3ToCANBusConnectionCompositor extends
 
 	/** {@inheritDoc} */
 	@Override
-	public boolean connect(Core source, CANBus target, RaspberryPi3 parent,
+	public boolean connect(RaspberryPi3 source, CANBus target, PlatformArchitecture parent,
 			IConnectionCompositionContext context) {
 		IConnector sourceConnector = createEntryConnector();
 		avoidDuplicateConnectorName(source, sourceConnector);
diff --git a/org.fortiss.af3.platform.raspberry.ui/trunk/src/org/fortiss/af3/platform/raspberry/ui/prototypes/PrototypeProvider.java b/org.fortiss.af3.platform.raspberry.ui/trunk/src/org/fortiss/af3/platform/raspberry/ui/prototypes/PrototypeProvider.java
index 4f61640f..9b9cdb9e 100644
--- a/org.fortiss.af3.platform.raspberry.ui/trunk/src/org/fortiss/af3/platform/raspberry/ui/prototypes/PrototypeProvider.java
+++ b/org.fortiss.af3.platform.raspberry.ui/trunk/src/org/fortiss/af3/platform/raspberry/ui/prototypes/PrototypeProvider.java
@@ -80,7 +80,7 @@ public class PrototypeProvider extends PrototypeProviderBase {
 		ActuatorOut actuatorOut = createActuatorOut("ActuatorOut");
 		setNodePosition(actuatorOut, 0, 0);
 		setConnectorPosition(actuator, 0, 0);
-		registerPrototype("ActuatorOut", actuator, CATEGORY_NAME);
+		registerPrototype("ActuatorOut", actuatorOut, CATEGORY_NAME);
 
 		Bus bus = createBus("Bus");
 		setNodePosition(bus, 0, 0);
diff --git a/org.fortiss.af3.platform.raspberry/trunk/META-INF/MANIFEST.MF b/org.fortiss.af3.platform.raspberry/trunk/META-INF/MANIFEST.MF
index bd0c3492..d6667c3a 100644
--- a/org.fortiss.af3.platform.raspberry/trunk/META-INF/MANIFEST.MF
+++ b/org.fortiss.af3.platform.raspberry/trunk/META-INF/MANIFEST.MF
@@ -20,6 +20,8 @@ Require-Bundle: org.fortiss.af3.project,
  org.eclipse.jface;bundle-version="3.9.1"
 Export-Package: org.fortiss.af3.platform.raspberry.compositor,
  org.fortiss.af3.platform.raspberry.model,
+ org.fortiss.af3.platform.raspberry.model.impl,
+ org.fortiss.af3.platform.raspberry.model.util,
  org.fortiss.af3.platform.raspberry.utils
 Import-Package: org.fortiss.af3.deployment.generator,
  org.fortiss.af3.platform.model
diff --git a/org.fortiss.af3.platform.raspberry/trunk/model/raspberry.ecore b/org.fortiss.af3.platform.raspberry/trunk/model/raspberry.ecore
index 777c1223..01992bf0 100644
--- a/org.fortiss.af3.platform.raspberry/trunk/model/raspberry.ecore
+++ b/org.fortiss.af3.platform.raspberry/trunk/model/raspberry.ecore
@@ -2,7 +2,7 @@
 <ecore:EPackage xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="model" nsURI="http://www.fortiss.org/af3/platform/raspberry"
     nsPrefix="org-fortiss-af3-platform-raspberry">
-  <eClassifiers xsi:type="ecore:EClass" name="CANBus" eSuperTypes="platform:/resource/org.fortiss.af3.platform/model/platform.ecore#//TransmissionUnit platform:/resource/org.fortiss.af3.platform/model/platform.ecore#//IIpCorePlatformArchitectureElement #//IBoardDomain"/>
+  <eClassifiers xsi:type="ecore:EClass" name="CANBus" eSuperTypes="platform:/resource/org.fortiss.af3.platform/model/platform.ecore#//TransmissionUnit platform:/resource/org.fortiss.af3.platform/model/platform.ecore#//IBoardPlatformArchitectureElement #//IBoardDomain"/>
   <eClassifiers xsi:type="ecore:EClass" name="IProcessorDomain" eSuperTypes="platform:/resource/org.fortiss.af3.platform/model/platform.ecore#//IArchitectureDomain">
     <eOperations name="getArchitectureDomainName" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
       <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
@@ -19,17 +19,17 @@
       </eAnnotations>
     </eOperations>
   </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="RaspberryPi1" eSuperTypes="platform:/resource/org.fortiss.af3.platform/model/platform.ecore#//GenericPlatformUnit platform:/resource/org.fortiss.af3.platform/model/platform.ecore#//ICommunicationMaster platform:/resource/org.fortiss.af3.platform/model/platform.ecore#//IIpCorePlatformArchitectureElement #//IBoardDomain"/>
-  <eClassifiers xsi:type="ecore:EClass" name="RaspberryPi2" eSuperTypes="platform:/resource/org.fortiss.af3.platform/model/platform.ecore#//GenericPlatformUnit platform:/resource/org.fortiss.af3.platform/model/platform.ecore#//ICommunicationMaster platform:/resource/org.fortiss.af3.platform/model/platform.ecore#//IIpCorePlatformArchitectureElement #//IBoardDomain"/>
-  <eClassifiers xsi:type="ecore:EClass" name="RaspberryPi3" eSuperTypes="platform:/resource/org.fortiss.af3.platform/model/platform.ecore#//GenericPlatformUnit platform:/resource/org.fortiss.af3.platform/model/platform.ecore#//ICommunicationMaster platform:/resource/org.fortiss.af3.platform/model/platform.ecore#//IIpCorePlatformArchitectureElement #//IBoardDomain"/>
+  <eClassifiers xsi:type="ecore:EClass" name="RaspberryPi1" eSuperTypes="platform:/resource/org.fortiss.af3.platform/model/platform.ecore#//GenericPlatformUnit platform:/resource/org.fortiss.af3.platform/model/platform.ecore#//ICommunicationMaster platform:/resource/org.fortiss.af3.platform/model/platform.ecore#//IBoardPlatformArchitectureElement #//IBoardDomain"/>
+  <eClassifiers xsi:type="ecore:EClass" name="RaspberryPi2" eSuperTypes="platform:/resource/org.fortiss.af3.platform/model/platform.ecore#//GenericPlatformUnit platform:/resource/org.fortiss.af3.platform/model/platform.ecore#//ICommunicationMaster platform:/resource/org.fortiss.af3.platform/model/platform.ecore#//IBoardPlatformArchitectureElement #//IBoardDomain"/>
+  <eClassifiers xsi:type="ecore:EClass" name="RaspberryPi3" eSuperTypes="platform:/resource/org.fortiss.af3.platform/model/platform.ecore#//GenericPlatformUnit platform:/resource/org.fortiss.af3.platform/model/platform.ecore#//ICommunicationMaster platform:/resource/org.fortiss.af3.platform/model/platform.ecore#//IBoardPlatformArchitectureElement #//IBoardDomain"/>
   <eClassifiers xsi:type="ecore:EClass" name="Core" eSuperTypes="platform:/resource/org.fortiss.af3.platform/model/platform.ecore#//ExecutionUnit platform:/resource/org.fortiss.af3.platform/model/platform.ecore#//ICommunicationMaster platform:/resource/org.fortiss.af3.platform/model/platform.ecore#//IIpCorePlatformArchitectureElement #//IProcessorDomain"/>
   <eClassifiers xsi:type="ecore:EClass" name="Bus" eSuperTypes="platform:/resource/org.fortiss.af3.platform/model/platform.ecore#//TransmissionUnit platform:/resource/org.fortiss.af3.platform/model/platform.ecore#//IIpCorePlatformArchitectureElement #//IProcessorDomain"/>
-  <eClassifiers xsi:type="ecore:EClass" name="Sensor" eSuperTypes="platform:/resource/org.fortiss.af3.platform/model/platform.ecore#//Receiver platform:/resource/org.fortiss.af3.platform/model/platform.ecore#//IIpCorePlatformArchitectureElement platform:/resource/org.fortiss.af3.platform/model/platform.ecore#//ICommunicationMaster #//IBoardDomain platform:/resource/org.fortiss.af3.platform/model/platform.ecore#//IPlatformPort platform:/resource/org.fortiss.af3.platform/model/platform.ecore#//IPlatformIOResource"/>
-  <eClassifiers xsi:type="ecore:EClass" name="Actuator" eSuperTypes="platform:/resource/org.fortiss.af3.platform/model/platform.ecore#//Transmitter platform:/resource/org.fortiss.af3.platform/model/platform.ecore#//IIpCorePlatformArchitectureElement platform:/resource/org.fortiss.af3.platform/model/platform.ecore#//ICommunicationMaster #//IBoardDomain platform:/resource/org.fortiss.af3.platform/model/platform.ecore#//IPlatformPort platform:/resource/org.fortiss.af3.platform/model/platform.ecore#//IPlatformIOResource"/>
+  <eClassifiers xsi:type="ecore:EClass" name="Sensor" eSuperTypes="platform:/resource/org.fortiss.af3.platform/model/platform.ecore#//Receiver platform:/resource/org.fortiss.af3.platform/model/platform.ecore#//IBoardPlatformArchitectureElement platform:/resource/org.fortiss.af3.platform/model/platform.ecore#//ICommunicationMaster #//IBoardDomain platform:/resource/org.fortiss.af3.platform/model/platform.ecore#//IPlatformPort platform:/resource/org.fortiss.af3.platform/model/platform.ecore#//IPlatformIOResource"/>
+  <eClassifiers xsi:type="ecore:EClass" name="Actuator" eSuperTypes="platform:/resource/org.fortiss.af3.platform/model/platform.ecore#//Transmitter platform:/resource/org.fortiss.af3.platform/model/platform.ecore#//IBoardPlatformArchitectureElement platform:/resource/org.fortiss.af3.platform/model/platform.ecore#//ICommunicationMaster #//IBoardDomain platform:/resource/org.fortiss.af3.platform/model/platform.ecore#//IPlatformPort platform:/resource/org.fortiss.af3.platform/model/platform.ecore#//IPlatformIOResource"/>
   <eClassifiers xsi:type="ecore:EClass" name="SensorIn" eSuperTypes="platform:/resource/org.fortiss.af3.platform/model/platform.ecore#//Receiver platform:/resource/org.fortiss.af3.platform/model/platform.ecore#//IIpCorePlatformArchitectureElement platform:/resource/org.fortiss.af3.platform/model/platform.ecore#//ICommunicationMaster #//IProcessorDomain platform:/resource/org.fortiss.af3.platform/model/platform.ecore#//IPlatformPort platform:/resource/org.fortiss.af3.platform/model/platform.ecore#//IPlatformIOResource"/>
   <eClassifiers xsi:type="ecore:EClass" name="ActuatorOut" eSuperTypes="platform:/resource/org.fortiss.af3.platform/model/platform.ecore#//Transmitter platform:/resource/org.fortiss.af3.platform/model/platform.ecore#//IIpCorePlatformArchitectureElement platform:/resource/org.fortiss.af3.platform/model/platform.ecore#//ICommunicationMaster #//IProcessorDomain platform:/resource/org.fortiss.af3.platform/model/platform.ecore#//IPlatformPort platform:/resource/org.fortiss.af3.platform/model/platform.ecore#//IPlatformIOResource"/>
   <eClassifiers xsi:type="ecore:EClass" name="BusMasterInterface" eSuperTypes="platform:/resource/org.fortiss.af3.platform/model/platform.ecore#//Transceiver platform:/resource/org.fortiss.af3.platform/model/platform.ecore#//IIpCorePlatformArchitectureElement platform:/resource/org.fortiss.af3.platform/model/platform.ecore#//IPlatformInterface platform:/resource/org.fortiss.af3.platform/model/platform.ecore#//ICommunicationMaster #//IProcessorDomain"/>
   <eClassifiers xsi:type="ecore:EClass" name="BusMasterPort" eSuperTypes="platform:/resource/org.fortiss.af3.platform/model/platform.ecore#//Transceiver platform:/resource/org.fortiss.af3.platform/model/platform.ecore#//IIpCorePlatformArchitectureElement platform:/resource/org.fortiss.af3.platform/model/platform.ecore#//IPlatformPort platform:/resource/org.fortiss.af3.platform/model/platform.ecore#//ICommunicationMaster #//IProcessorDomain"/>
-  <eClassifiers xsi:type="ecore:EClass" name="CANBusMasterPort" eSuperTypes="platform:/resource/org.fortiss.af3.platform/model/platform.ecore#//Transceiver platform:/resource/org.fortiss.af3.platform/model/platform.ecore#//IIpCorePlatformArchitectureElement platform:/resource/org.fortiss.af3.platform/model/platform.ecore#//IPlatformPort platform:/resource/org.fortiss.af3.platform/model/platform.ecore#//ICommunicationMaster #//IBoardDomain"/>
-  <eClassifiers xsi:type="ecore:EClass" name="CANBusMasterInterface" eSuperTypes="platform:/resource/org.fortiss.af3.platform/model/platform.ecore#//Transceiver platform:/resource/org.fortiss.af3.platform/model/platform.ecore#//IIpCorePlatformArchitectureElement platform:/resource/org.fortiss.af3.platform/model/platform.ecore#//IPlatformInterface platform:/resource/org.fortiss.af3.platform/model/platform.ecore#//ICommunicationMaster #//IBoardDomain"/>
+  <eClassifiers xsi:type="ecore:EClass" name="CANBusMasterPort" eSuperTypes="platform:/resource/org.fortiss.af3.platform/model/platform.ecore#//Transceiver platform:/resource/org.fortiss.af3.platform/model/platform.ecore#//IBoardPlatformArchitectureElement platform:/resource/org.fortiss.af3.platform/model/platform.ecore#//IPlatformPort platform:/resource/org.fortiss.af3.platform/model/platform.ecore#//ICommunicationMaster #//IBoardDomain"/>
+  <eClassifiers xsi:type="ecore:EClass" name="CANBusMasterInterface" eSuperTypes="platform:/resource/org.fortiss.af3.platform/model/platform.ecore#//Transceiver platform:/resource/org.fortiss.af3.platform/model/platform.ecore#//IBoardPlatformArchitectureElement platform:/resource/org.fortiss.af3.platform/model/platform.ecore#//IPlatformInterface platform:/resource/org.fortiss.af3.platform/model/platform.ecore#//ICommunicationMaster #//IBoardDomain"/>
 </ecore:EPackage>
diff --git a/org.fortiss.af3.platform.raspberry/trunk/plugin.xml b/org.fortiss.af3.platform.raspberry/trunk/plugin.xml
index 66c99db1..f68d42be 100644
--- a/org.fortiss.af3.platform.raspberry/trunk/plugin.xml
+++ b/org.fortiss.af3.platform.raspberry/trunk/plugin.xml
@@ -9,328 +9,12 @@
 -->
 
 <plugin>
-
- <extension point="org.eclipse.emf.ecore.generated_package">
-      <!-- @generated model -->
+   <extension point="org.eclipse.emf.ecore.generated_package">
+      <!-- @generated raspberry -->
       <package
             uri="http://www.fortiss.org/af3/platform/raspberry"
-            class="org.fortiss.af3.platform.raspberry.model.ModelFactory"
+            class="org.fortiss.af3.platform.raspberry.model.ModelPackage"
             genModel="model/raspberry.genmodel"/>
    </extension>
-   
-    <extension
-         point="org.fortiss.tooling.kernel.transformationProvider">
-      <transformationProvider
-            transformationProvider="org.fortiss.af3.platform.raspberry.generator.transform.RaspberryPi1ExecutableTransformation">
-         <source>
-            <objectClass
-                  objectClass="org.fortiss.af3.platform.raspberry.model.RaspberryPi1">
-            </objectClass>
-         </source>
-         <target>
-            <objectClass
-                  objectClass="org.fortiss.af3.platform.raspberry.generator.executable.RaspberryPi1Executable">
-            </objectClass>
-         </target>
-      </transformationProvider>
-      <transformationProvider
-            transformationProvider="org.fortiss.af3.platform.raspberry.generator.transform.RaspberryPi2ExecutableTransformation">
-         <source>
-            <objectClass
-                  objectClass="org.fortiss.af3.platform.raspberry.model.RaspberryPi2">
-            </objectClass>
-         </source>
-         <target>
-            <objectClass
-                  objectClass="org.fortiss.af3.platform.raspberry.generator.executable.RaspberryPi2Executable">
-            </objectClass>
-         </target>
-      </transformationProvider>
-      <transformationProvider
-            transformationProvider="org.fortiss.af3.platform.raspberry.generator.transform.RaspberryPi3ExecutableTransformation">
-         <source>
-            <objectClass
-                  objectClass="org.fortiss.af3.platform.raspberry.model.RaspberryPi3">
-            </objectClass>
-         </source>
-         <target>
-            <objectClass
-                  objectClass="org.fortiss.af3.platform.raspberry.generator.executable.RaspberryPi3Executable">
-            </objectClass>
-         </target>
-      </transformationProvider>
-      <transformationProvider
-            transformationProvider="org.fortiss.af3.platform.raspberry.generator.transform.CoreExecutableTransformation">
-         <source>
-            <objectClass
-                  objectClass="org.fortiss.af3.platform.raspberry.model.Core">
-            </objectClass>
-         </source>
-         <target>
-            <objectClass
-                  objectClass="org.fortiss.af3.platform.raspberry.generator.executable.CoreExecutable">
-            </objectClass>
-         </target>
-      </transformationProvider>
-      <transformationProvider
-            transformationProvider="org.fortiss.af3.platform.raspberry.generator.transform.BusExecutableTransformation">
-         <source>
-            <objectClass
-                  objectClass="org.fortiss.af3.platform.raspberry.model.Bus">
-            </objectClass>
-         </source>
-         <target>
-            <objectClass
-                  objectClass="org.fortiss.af3.platform.raspberry.generator.executable.BusExecutable">
-            </objectClass>
-         </target>
-      </transformationProvider>
-      <transformationProvider
-            transformationProvider="org.fortiss.af3.platform.raspberry.generator.transform.BusMasterInterfaceExecutableTransformation">
-         <source>
-            <objectClass
-                  objectClass="org.fortiss.af3.platform.raspberry.model.BusMasterInterface">
-            </objectClass>
-         </source>
-         <target>
-            <objectClass
-                  objectClass="org.fortiss.af3.platform.raspberry.generator.executable.BusMasterInterfaceExecutable">
-            </objectClass>
-         </target>
-      </transformationProvider>
-      <transformationProvider
-            transformationProvider="org.fortiss.af3.platform.raspberry.generator.transform.BusMasterPortExecutableTransformation">
-         <source>
-            <objectClass
-                  objectClass="org.fortiss.af3.platform.raspberry.model.BusMasterPort">
-            </objectClass>
-         </source>
-         <target>
-            <objectClass
-                  objectClass="org.fortiss.af3.platform.raspberry.generator.executable.BusMasterPortExecutable">
-            </objectClass>
-         </target>
-      </transformationProvider>
-      <transformationProvider
-            transformationProvider="org.fortiss.af3.platform.raspberry.generator.transform.CANBusExecutableTransformation">
-         <source>
-            <objectClass
-                  objectClass="org.fortiss.af3.platform.raspberry.model.CANBus">
-            </objectClass>
-         </source>
-         <target>
-            <objectClass
-                  objectClass="org.fortiss.af3.platform.raspberry.generator.executable.CANBusExecutable">
-            </objectClass>
-         </target>
-      </transformationProvider>
-      <transformationProvider
-            transformationProvider="org.fortiss.af3.platform.raspberry.generator.transform.CANBusMasterInterfaceExecutableTransformation">
-         <source>
-            <objectClass
-                  objectClass="org.fortiss.af3.platform.raspberry.model.CANBusMasterInterface">
-            </objectClass>
-         </source>
-         <target>
-            <objectClass
-                  objectClass="org.fortiss.af3.platform.raspberry.generator.executable.CANBusMasterInterfaceExecutable">
-            </objectClass>
-         </target>
-      </transformationProvider>
-      <transformationProvider
-            transformationProvider="org.fortiss.af3.platform.raspberry.generator.transform.CANBusMasterPortExecutableTransformation">
-         <source>
-            <objectClass
-                  objectClass="org.fortiss.af3.platform.raspberry.model.CANBusMasterPort">
-            </objectClass>
-         </source>
-         <target>
-            <objectClass
-                  objectClass="org.fortiss.af3.platform.raspberry.generator.executable.CANBusMasterPortExecutable">
-            </objectClass>
-         </target>
-      </transformationProvider>
-      <transformationProvider
-            transformationProvider="org.fortiss.af3.platform.raspberry.generator.transform.SensorExecutableTransformation">
-         <source>
-            <objectClass
-                  objectClass="org.fortiss.af3.platform.raspberry.model.Sensor">
-            </objectClass>
-         </source>
-         <target>
-            <objectClass
-                  objectClass="org.fortiss.af3.platform.raspberry.generator.executable.SensorExecutable">
-            </objectClass>
-         </target>
-      </transformationProvider>
-      <transformationProvider
-            transformationProvider="org.fortiss.af3.platform.raspberry.generator.transform.SensorInExecutableTransformation">
-         <source>
-            <objectClass
-                  objectClass="org.fortiss.af3.platform.raspberry.model.SensorIn">
-            </objectClass>
-         </source>
-         <target>
-            <objectClass
-                  objectClass="org.fortiss.af3.platform.raspberry.generator.executable.SensorInExecutable">
-            </objectClass>
-         </target>
-      </transformationProvider>
-      <transformationProvider
-            transformationProvider="org.fortiss.af3.platform.raspberry.generator.transform.ActuatorExecutableTransformation">
-         <source>
-            <objectClass
-                  objectClass="org.fortiss.af3.platform.raspberry.model.Actuator">
-            </objectClass>
-         </source>
-         <target>
-            <objectClass
-                  objectClass="org.fortiss.af3.platform.raspberry.generator.executable.ActuatorExecutable">
-            </objectClass>
-         </target>
-      </transformationProvider>
-      <transformationProvider
-            transformationProvider="org.fortiss.af3.platform.raspberry.generator.transform.ActuatorOutExecutableTransformation">
-         <source>
-            <objectClass
-                  objectClass="org.fortiss.af3.platform.raspberry.model.ActuatorOut">
-            </objectClass>
-         </source>
-         <target>
-            <objectClass
-                  objectClass="org.fortiss.af3.platform.raspberry.generator.executable.ActuatorOutExecutable">
-            </objectClass>
-         </target>
-      </transformationProvider>
-      <transformationProvider
-            transformationProvider="org.fortiss.af3.platform.raspberry.generator.transform.ActuatorExecutableTransmissionCatalogTransformation">
-         <source>
-            <objectClass
-                  objectClass="org.fortiss.af3.platform.raspberry.model.Actuator">
-            </objectClass>
-         </source>
-         <target>
-            <objectClass
-                  objectClass="org.fortiss.af3.deployment.generator.TransmissionCatalog">
-            </objectClass>
-         </target>
-      </transformationProvider>
-      <transformationProvider
-            transformationProvider="org.fortiss.af3.platform.raspberry.generator.transform.ActuatorOutExecutableTransmissionCatalogTransformation">
-         <source>
-            <objectClass
-                  objectClass="org.fortiss.af3.platform.raspberry.model.ActuatorOut">
-            </objectClass>
-         </source>
-         <target>
-            <objectClass
-                  objectClass="org.fortiss.af3.deployment.generator.TransmissionCatalog">
-            </objectClass>
-         </target>
-      </transformationProvider>
-      <transformationProvider
-            transformationProvider="org.fortiss.af3.platform.raspberry.generator.transform.BusMasterInterfaceTransmissionCatalogTransformation">
-         <source>
-            <objectClass
-                  objectClass="org.fortiss.af3.platform.raspberry.model.BusMasterInterface">
-            </objectClass>
-         </source>
-         <target>
-            <objectClass
-                  objectClass="org.fortiss.af3.deployment.generator.TransmissionCatalog">
-            </objectClass>
-         </target>
-      </transformationProvider><transformationProvider
-            transformationProvider="org.fortiss.af3.platform.raspberry.generator.transform.BusMasterPortTransmissionCatalogTransformation">
-         <source>
-            <objectClass
-                  objectClass="org.fortiss.af3.platform.raspberry.model.BusMasterPort">
-            </objectClass>
-         </source>
-         <target>
-            <objectClass
-                  objectClass="org.fortiss.af3.deployment.generator.TransmissionCatalog">
-            </objectClass>
-         </target>
-      </transformationProvider>
-      <transformationProvider
-            transformationProvider="org.fortiss.af3.platform.raspberry.generator.transform.BusTransmissionCatalogTransformation">
-         <source>
-            <objectClass
-                  objectClass="org.fortiss.af3.platform.raspberry.model.Bus">
-            </objectClass>
-         </source>
-         <target>
-            <objectClass
-                  objectClass="org.fortiss.af3.deployment.generator.TransmissionCatalog">
-            </objectClass>
-         </target>
-      </transformationProvider>
-      <transformationProvider
-            transformationProvider="org.fortiss.af3.platform.raspberry.generator.transform.CANBusTransmissionCatalogTransformation">
-         <source>
-            <objectClass
-                  objectClass="org.fortiss.af3.platform.raspberry.model.CANBus">
-            </objectClass>
-         </source>
-         <target>
-            <objectClass
-                  objectClass="org.fortiss.af3.deployment.generator.TransmissionCatalog">
-            </objectClass>
-         </target>
-      </transformationProvider>
-      <transformationProvider
-            transformationProvider="org.fortiss.af3.platform.raspberry.generator.transform.CANBusMasterInterfaceTransmissionCatalogTransformation">
-         <source>
-            <objectClass
-                  objectClass="org.fortiss.af3.platform.raspberry.model.CANBusMasterInterface">
-            </objectClass>
-         </source>
-         <target>
-            <objectClass
-                  objectClass="org.fortiss.af3.deployment.generator.TransmissionCatalog">
-            </objectClass>
-         </target>
-      </transformationProvider>
-      <transformationProvider
-            transformationProvider="org.fortiss.af3.platform.raspberry.generator.transform.CANBusMasterPortTransmissionCatalogTransformation">
-         <source>
-            <objectClass
-                  objectClass="org.fortiss.af3.platform.raspberry.model.CANBusMasterPort">
-            </objectClass>
-         </source>
-         <target>
-            <objectClass
-                  objectClass="org.fortiss.af3.deployment.generator.TransmissionCatalog">
-            </objectClass>
-         </target>
-      </transformationProvider>
-      <transformationProvider
-            transformationProvider="org.fortiss.af3.platform.raspberry.generator.transform.SensorExecutableTransmissionCatalogTransformation">
-         <source>
-            <objectClass
-                  objectClass="org.fortiss.af3.platform.raspberry.model.Sensor">
-            </objectClass>
-         </source>
-         <target>
-            <objectClass
-                  objectClass="org.fortiss.af3.deployment.generator.TransmissionCatalog">
-            </objectClass>
-         </target>
-      </transformationProvider>
-      <transformationProvider
-            transformationProvider="org.fortiss.af3.platform.raspberry.generator.transform.SensorInExecutableTransmissionCatalogTransformation">
-         <source>
-            <objectClass
-                  objectClass="org.fortiss.af3.platform.raspberry.model.SensorIn">
-            </objectClass>
-         </source>
-         <target>
-            <objectClass
-                  objectClass="org.fortiss.af3.deployment.generator.TransmissionCatalog">
-            </objectClass>
-         </target>
-      </transformationProvider>
-   </extension>
 
 </plugin>
diff --git a/org.fortiss.af3.platform.raspberry/trunk/src/org/fortiss/af3/platform/raspberry/compositor/RaspberryPlatformHierarchicalCompositionRules.java b/org.fortiss.af3.platform.raspberry/trunk/src/org/fortiss/af3/platform/raspberry/compositor/RaspberryPlatformHierarchicalCompositionRules.java
index b6ecf4a0..c7ed3e08 100644
--- a/org.fortiss.af3.platform.raspberry/trunk/src/org/fortiss/af3/platform/raspberry/compositor/RaspberryPlatformHierarchicalCompositionRules.java
+++ b/org.fortiss.af3.platform.raspberry/trunk/src/org/fortiss/af3/platform/raspberry/compositor/RaspberryPlatformHierarchicalCompositionRules.java
@@ -49,8 +49,6 @@ public class RaspberryPlatformHierarchicalCompositionRules extends
 
 		if(domain.equals(IPlatformDomain.class)) {
 			rval.add(IBoardDomain.class);
-		} else if(hasEqualLevel(domain, IPlatformDomain.class)) {
-			rval.add(IPlatformDomain.class);
 		} else if(hasEqualLevel(domain, IBoardDomain.class)) {
 			rval.add(IProcessorDomain.class);
 		}
diff --git a/org.fortiss.af3.platform.raspberry/trunk/src/org/fortiss/af3/platform/raspberry/generator/executable/BusExecutable.java b/org.fortiss.af3.platform.raspberry/trunk/src/org/fortiss/af3/platform/raspberry/generator/executable/BusExecutable.java
index 1f555bbc..252a6ce5 100644
--- a/org.fortiss.af3.platform.raspberry/trunk/src/org/fortiss/af3/platform/raspberry/generator/executable/BusExecutable.java
+++ b/org.fortiss.af3.platform.raspberry/trunk/src/org/fortiss/af3/platform/raspberry/generator/executable/BusExecutable.java
@@ -26,6 +26,7 @@ import org.fortiss.af3.generator.common.model.source.SourcePackage;
 import org.fortiss.af3.platform.language.executable.TransmissionUnitExecutableBase;
 import org.fortiss.af3.platform.model.ExecutionUnit;
 import org.fortiss.af3.platform.model.TransmissionUnit;
+import org.fortiss.tooling.kernel.extension.data.ITransformationContext;
 
 /**
  * 
@@ -48,7 +49,7 @@ public class BusExecutable extends TransmissionUnitExecutableBase<TransmissionUn
 	@Override
 	public void createAllFiles(SourcePackage pack, Map<ExecutionUnit, List<Port>> euPortsPair,
 			Map<ExecutionUnit, List<Component>> euComponentList, Component topComponent,
-			int deploymentID) {
+			int deploymentID, ITransformationContext context) {
 		// TODO Auto-generated method stub
 
 	}
diff --git a/org.fortiss.af3.platform.raspberry/trunk/src/org/fortiss/af3/platform/raspberry/generator/executable/CANBusExecutable.java b/org.fortiss.af3.platform.raspberry/trunk/src/org/fortiss/af3/platform/raspberry/generator/executable/CANBusExecutable.java
index 9b5a4a57..7ad0777f 100644
--- a/org.fortiss.af3.platform.raspberry/trunk/src/org/fortiss/af3/platform/raspberry/generator/executable/CANBusExecutable.java
+++ b/org.fortiss.af3.platform.raspberry/trunk/src/org/fortiss/af3/platform/raspberry/generator/executable/CANBusExecutable.java
@@ -26,6 +26,7 @@ import org.fortiss.af3.generator.common.model.source.SourcePackage;
 import org.fortiss.af3.platform.language.executable.TransmissionUnitExecutableBase;
 import org.fortiss.af3.platform.model.ExecutionUnit;
 import org.fortiss.af3.platform.model.TransmissionUnit;
+import org.fortiss.tooling.kernel.extension.data.ITransformationContext;
 
 /**
  * 
@@ -48,7 +49,7 @@ public class CANBusExecutable extends TransmissionUnitExecutableBase<Transmissio
 	@Override
 	public void createAllFiles(SourcePackage pack, Map<ExecutionUnit, List<Port>> euPortsPair,
 			Map<ExecutionUnit, List<Component>> euComponentList, Component topComponent,
-			int deploymentID) {
+			int deploymentID, ITransformationContext context) {
 		// TODO Auto-generated method stub
 
 	}
diff --git a/org.fortiss.af3.platform.raspberry/trunk/src/org/fortiss/af3/platform/raspberry/generator/executable/CoreExecutable.java b/org.fortiss.af3.platform.raspberry/trunk/src/org/fortiss/af3/platform/raspberry/generator/executable/CoreExecutable.java
index 9f4401f4..d4c8c4a7 100644
--- a/org.fortiss.af3.platform.raspberry/trunk/src/org/fortiss/af3/platform/raspberry/generator/executable/CoreExecutable.java
+++ b/org.fortiss.af3.platform.raspberry/trunk/src/org/fortiss/af3/platform/raspberry/generator/executable/CoreExecutable.java
@@ -17,18 +17,67 @@ $Id$
 +--------------------------------------------------------------------------*/
 package org.fortiss.af3.platform.raspberry.generator.executable;
 
+import static org.fortiss.af3.component.generator.component.ComponentFunctionIdentifierUtils.getInitializeFunctionName;
+import static org.fortiss.af3.component.generator.component.ComponentFunctionIdentifierUtils.getPerformStepFunctionName;
+import static org.fortiss.af3.component.generator.component.PortVariableUtils.getPortNoValAssignment;
+import static org.fortiss.af3.component.generator.component.PortVariableUtils.getPortPortValueAssignment;
+import static org.fortiss.af3.component.generator.component.PortVariableUtils.getPortValue;
+import static org.fortiss.af3.component.generator.component.PortVariableUtils.getPortValueAssignment;
+import static org.fortiss.af3.component.generator.component.PortVariableUtils.testPortVariableForNoVal;
+import static org.fortiss.af3.component.utils.GeneratorModelElementFactory.createComponentFunction;
+import static org.fortiss.af3.component.utils.GeneratorModelElementFactory.createComponentProgram;
+import static org.fortiss.af3.component.utils.GeneratorModelElementFactory.createLocalFunction;
+import static org.fortiss.af3.expression.utils.ExpressionModelElementFactory.assignment;
+import static org.fortiss.af3.expression.utils.ExpressionModelElementFactory.createDataDictionary;
+import static org.fortiss.af3.expression.utils.ExpressionModelElementFactory.funcCall;
+import static org.fortiss.af3.expression.utils.ExpressionModelElementFactory.ifthenelse;
+import static org.fortiss.af3.expression.utils.ExpressionModelElementFactory.sequence;
+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.CLanguageModelElementFactory.createConfigureFile;
+import static org.fortiss.af3.generator.common.utils.CLanguageModelElementFactory.createMakedefsFile;
+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.util.ArrayList;
+import java.util.HashSet;
 import java.util.List;
+import java.util.Set;
 
 import org.conqat.lib.commons.collections.Pair;
+import org.fortiss.af3.component.model.Channel;
 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.ComponentProgram;
+import org.fortiss.af3.component.model.generator.LocalFunction;
+import org.fortiss.af3.expression.model.DataDictionary;
 import org.fortiss.af3.expression.model.terms.IExpressionTerm;
+import org.fortiss.af3.expression.model.terms.imperative.Assignment;
+import org.fortiss.af3.expression.model.terms.imperative.IStatementTerm;
+import org.fortiss.af3.expression.model.terms.imperative.StatementSequence;
+import org.fortiss.af3.generator.common.model.c.CImplementationFile;
 import org.fortiss.af3.generator.common.model.c.CSourcePackage;
+import org.fortiss.af3.platform.AF3PlatformActivator;
+import org.fortiss.af3.platform.language.executable.ExecutableBase;
 import org.fortiss.af3.platform.language.executable.ExecutionUnitExecutableBase;
+import org.fortiss.af3.platform.language.executable.IInitializableExecutable;
+import org.fortiss.af3.platform.language.executable.IReadableExecutable;
+import org.fortiss.af3.platform.language.executable.IReadableExecutableWithNoValSupport;
+import org.fortiss.af3.platform.language.executable.ITerminatableExecutable;
+import org.fortiss.af3.platform.language.executable.IWritableExecutable;
+import org.fortiss.af3.platform.language.executable.IWritableExecutableWithNoValSupport;
 import org.fortiss.af3.platform.model.ExecutionUnit;
 import org.fortiss.af3.platform.model.PlatformConnectorUnit;
+import org.fortiss.af3.platform.model.generic.GenericReceiver;
+import org.fortiss.af3.platform.model.generic.GenericTransceiver;
+import org.fortiss.af3.platform.model.generic.GenericTransmitter;
 import org.fortiss.af3.platform.raspberry.model.Core;
 import org.fortiss.tooling.kernel.extension.data.ITransformationContext;
+import org.fortiss.tooling.kernel.extension.exception.TransformationFailedException;
 
 /**
  * 
@@ -44,21 +93,18 @@ public class CoreExecutable extends ExecutionUnitExecutableBase<Core, CSourcePac
 	 */
 	public CoreExecutable(Core modelElement) {
 		super(modelElement);
-		// TODO Auto-generated constructor stub
 	}
 
 	/** {@inheritDoc} */
 	@Override
 	public IExpressionTerm getInitialization() {
-		// TODO Auto-generated method stub
-		return null;
+		return funcCall("init_generic_ecu");
 	}
 
 	/** {@inheritDoc} */
 	@Override
 	public IExpressionTerm getTermination() {
-		// TODO Auto-generated method stub
-		return null;
+		return funcCall("term_generic_ecu");
 	}
 
 	/** {@inheritDoc} */
@@ -66,8 +112,240 @@ public class CoreExecutable extends ExecutionUnitExecutableBase<Core, CSourcePac
 	protected CSourcePackage createExecutionUnitSourcePackage(String name,
 			List<Pair<ExecutionUnit, Component>> deployedComponents,
 			List<Pair<PlatformConnectorUnit, Port>> deployedPorts, ITransformationContext context) {
-		// TODO Auto-generated method stub
-		return null;
+
+		/* need to check if all annotations are set */
+
+		CSourcePackage sourcePackage = createCSourcePackage();
+		sourcePackage.setBaseLocation("app/" + name);
+
+		// Fill the the two helper sets. Sets are used to ensure uniqueness of platform connectors.
+		Set<PlatformConnectorUnit> usedUnits = new HashSet<PlatformConnectorUnit>();
+		Set<GenericTransceiver> usedTransceivers = new HashSet<GenericTransceiver>();
+		for(Pair<PlatformConnectorUnit, Port> p : deployedPorts) {
+			usedUnits.add(p.getFirst());
+			if(p.getFirst() instanceof GenericTransceiver) {
+				usedTransceivers.add((GenericTransceiver)p.getFirst());
+			}
+		}
+
+		// Create the system functions.
+		// ComponentFunction init =
+		// createInitializeFunction(deployedComponents, usedUnits, deployedPorts);
+		// ComponentFunction step =
+		// createStepFunction(deployedComponents, deployedPorts, usedTransceivers);
+		// ComponentProgram program = createComponentProgram("system", init, step);
+		// program.getLocalFunctions().add(
+		// createTerminationFunction(deployedPorts, deployedComponents));
+		// program.getLocalFunctions().add(
+		// createReadInputFunction(deployedPorts, usedTransceivers, deployedComponents));
+
+		// Create the system functions.
+		ComponentFunction init = createInitializeFunction(deployedComponents, usedUnits);
+		ComponentFunction step =
+				createStepFunction(deployedComponents, deployedPorts, usedTransceivers);
+		ComponentProgram program = createComponentProgram("system", init, step);
+		program.getLocalFunctions().add(createTerminationFunction(usedUnits));
+		program.getLocalFunctions().add(createReadInputFunction(deployedPorts, usedTransceivers));
+
+		// Fill the system program with the component sub-programs
+		try {
+			// deployed components
+			for(Pair<ExecutionUnit, Component> pair : deployedComponents) {
+				program.getSubPrograms().add(
+						createTransformedObjectFor(pair.getSecond(), ComponentProgram.class,
+								context));
+			}
+
+			// convert the program to C code
+			CSourcePackage cPack =
+					createTransformedObjectFor(program, CSourcePackage.class, context);
+			cPack.mergeInto(sourcePackage);
+
+			if(!deployedComponents.isEmpty()) {
+				DataDictionary dataDict =
+						getRootElement(deployedComponents.get(0).getSecond(), DataDictionary.class);
+				if(dataDict == null) {
+					dataDict = createDataDictionary(); // dummy element => predefined types are
+					// created
+				}
+				CSourcePackage dataDictionaryPackage =
+						createTransformedObjectFor(dataDict, CSourcePackage.class, context);
+				dataDictionaryPackage.mergeInto(sourcePackage);
+			}
+		} catch(TransformationFailedException e) {
+			error(AF3PlatformActivator.getDefault(), e.getMessage(), e);
+		}
+
+		fixSystemCImports((CImplementationFile)sourcePackage.getSrcGenPackage()
+				.findSourceUnitByName("system.c"), usedUnits, usedTransceivers);
+
+		sourcePackage.getUnits().add(createConfigureFile(modelElement.getName()));
+		sourcePackage.getUnits().add(createMakedefsFile());
+		return sourcePackage;
+	}
+
+	/** Adds the platform connectors includes. */
+	private void fixSystemCImports(CImplementationFile system,
+			Set<PlatformConnectorUnit> usedUnits, Set<GenericTransceiver> usedTransceivers) {
+		// Add includes for user code of generic HAL implementation
+		for(GenericTransceiver gt : usedTransceivers) {
+			addUserHeaderInclude(system, gt.getName());
+		}
+		for(PlatformConnectorUnit unit : usedUnits) {
+			if(unit instanceof GenericTransmitter || unit instanceof GenericReceiver) {
+				addUserHeaderInclude(system, "io");
+				break;
+			}
+		}
+	}
+
+	/** Creates the initialize function. */
+	protected ComponentFunction createInitializeFunction(
+			List<Pair<ExecutionUnit, Component>> deployedComponents,
+			Set<PlatformConnectorUnit> usedUnits) {
+		List<IStatementTerm> body = new ArrayList<IStatementTerm>();
+		for(Pair<ExecutionUnit, Component> p : deployedComponents) {
+			body.add(assignment(funcCall(getInitializeFunctionName(p.getSecond()))));
+		}
+
+		for(PlatformConnectorUnit pu : usedUnits) {
+			ExecutableBase<? extends PlatformConnectorUnit> exec =
+					getPlatformArchitectureExecutable().getExecutable(pu);
+			if(exec instanceof IInitializableExecutable) {
+				body.add(assignment(((IInitializableExecutable)exec).getInitialization()));
+			}
+		}
+		return createComponentFunction("initialize_system", null, sequence(body));
+	}
+
+	/** Creates the termination function. */
+	protected LocalFunction createTerminationFunction(Set<PlatformConnectorUnit> usedUnits) {
+		List<IStatementTerm> body = new ArrayList<IStatementTerm>();
+		for(PlatformConnectorUnit pu : usedUnits) {
+			ExecutableBase<? extends PlatformConnectorUnit> exec =
+					getPlatformArchitectureExecutable().getExecutable(pu);
+			if(exec instanceof ITerminatableExecutable) {
+				body.add(assignment(((ITerminatableExecutable)exec).getTermination()));
+			}
+		}
+		return createLocalFunction("terminate_system", null, sequence(body));
+	}
+
+	/** Creates the step function. */
+	protected ComponentFunction createStepFunction(
+			List<Pair<ExecutionUnit, Component>> deployedComponents,
+			List<Pair<PlatformConnectorUnit, Port>> deployedPorts,
+			Set<GenericTransceiver> usedTransceivers) {
+		List<IStatementTerm> body = new ArrayList<IStatementTerm>();
+
+		// Search for local channels, i.e. channels that begin and end at components deployed to
+		// this generic execution unit.
+		// If such channels are found, we have to place the corresponding assignments here, since
+		// there is no super component that would do that for us.
+		for(Pair<ExecutionUnit, Component> p : deployedComponents) {
+			Component comp = p.getSecond();
+			for(InputPort conn : comp.getInputPorts()) {
+				for(Channel ch : conn.getIncomingChannels()) {
+					if(ch.getSource().eContainer().equals(comp)) {
+						// We found a local channel; create the assignments
+						body.add(getPortPortValueAssignment(ch.getSource(), ch.getTarget()));
+					}
+				}
+			}
+		}
+		body.add(assignment(funcCall("read_input")));
+		// Notify transceivers about start of output writing.
+		for(GenericTransceiver gt : usedTransceivers) {
+			body.add(assignment(funcCall("prepare_output_" + gt.getName())));
+		}
+		// Perform component step
+		for(Pair<ExecutionUnit, Component> p : deployedComponents) {
+			Component comp = p.getSecond();
+			if(comp.getSubComponents().isEmpty() && comp.isStronglyCausal()) {
+				writeOutputsForComponent(comp, deployedPorts, body);
+			}
+			body.add(assignment(funcCall(getPerformStepFunctionName(p.getSecond()))));
+			if(!comp.getSubComponents().isEmpty() || !comp.isStronglyCausal()) {
+				writeOutputsForComponent(comp, deployedPorts, body);
+			}
+		}
+		// Notify transceivers about end of output writing.
+		for(GenericTransceiver gt : usedTransceivers) {
+			body.add(assignment(funcCall("finish_output_" + gt.getName())));
+		}
+		return createComponentFunction("run_system", null, sequence(body));
+	}
+
+	/**
+	 * @param deployedPorts
+	 * @param body
+	 */
+	private void writeOutputsForComponent(Component comp,
+			List<Pair<PlatformConnectorUnit, Port>> deployedPorts, List<IStatementTerm> body) {
+		// Write outputs to transmitter and transceivers.
+		for(Pair<PlatformConnectorUnit, Port> p : deployedPorts) {
+			if(p.getSecond().getComponent() != comp) {
+				continue;
+			}
+			ExecutableBase<? extends PlatformConnectorUnit> exec =
+					getPlatformArchitectureExecutable().getExecutable(p.getFirst());
+			if(exec instanceof IWritableExecutable && p.getSecond() instanceof OutputPort) {
+				createWriteAccess((IWritableExecutable)exec, (OutputPort)p.getSecond(), body);
+			}
+		}
+	}
+
+	/** Creates the read input function. */
+	protected LocalFunction createReadInputFunction(
+			List<Pair<PlatformConnectorUnit, Port>> deployedPorts,
+			Set<GenericTransceiver> usedTransceivers) {
+		List<IStatementTerm> body = new ArrayList<IStatementTerm>();
+		// Notify transceivers about start input reading.
+		for(GenericTransceiver gt : usedTransceivers) {
+			body.add(assignment(funcCall("prepare_input_" + gt.getName())));
+		}
+		// Read input from transceivers and receivers.
+		for(Pair<PlatformConnectorUnit, Port> p : deployedPorts) {
+			ExecutableBase<? extends PlatformConnectorUnit> exec =
+					getPlatformArchitectureExecutable().getExecutable(p.getFirst());
+			if(exec instanceof IReadableExecutable && p.getSecond() instanceof InputPort) {
+				createReadAccess((IReadableExecutable)exec, (InputPort)p.getSecond(), body);
+			}
+		}
+		// Notify transceivers about end of input reading.
+		for(GenericTransceiver gt : usedTransceivers) {
+			body.add(assignment(funcCall("finish_input_" + gt.getName())));
+		}
+		return createLocalFunction("read_input", null, sequence(body));
+	}
+
+	/** Creates the read code for the given executable and port */
+	protected void
+			createReadAccess(IReadableExecutable exec, InputPort p, List<IStatementTerm> body) {
+		IStatementTerm valueAssign = getPortValueAssignment(p, exec.getValueReadAccessor(p));
+		if(exec instanceof IReadableExecutableWithNoValSupport) {
+			IExpressionTerm guard =
+					((IReadableExecutableWithNoValSupport)exec).getNoValGuardAccessor(p);
+			StatementSequence thenBlock = sequence(getPortNoValAssignment(p));
+			StatementSequence elseBlock = sequence(valueAssign);
+			body.add(ifthenelse(guard, thenBlock, elseBlock));
+		} else {
+			body.add(valueAssign);
+		}
+	}
+
+	/** Creates the write code for the given executable and port. */
+	protected void createWriteAccess(IWritableExecutable exec, OutputPort p,
+			List<IStatementTerm> body) {
+		Assignment valueAssign = assignment(exec.getValueWriteAccessor(p, getPortValue(p)));
+		if(exec instanceof IWritableExecutableWithNoValSupport) {
+			IExpressionTerm guard = testPortVariableForNoVal(p);
+			Assignment thenBlock =
+					assignment(((IWritableExecutableWithNoValSupport)exec).getNoValWriteAccessor(p));
+			body.add(ifthenelse(guard, sequence(thenBlock), sequence(valueAssign)));
+		} else {
+			body.add(valueAssign);
+		}
 	}
 
 }
diff --git a/org.fortiss.af3.platform.raspberry/trunk/src/org/fortiss/af3/platform/raspberry/generator/transform/CANBusTransmissionCatalogTransformation.java b/org.fortiss.af3.platform.raspberry/trunk/src/org/fortiss/af3/platform/raspberry/generator/transform/CANBusTransmissionCatalogTransformation.java
index 02670224..40554b36 100644
--- a/org.fortiss.af3.platform.raspberry/trunk/src/org/fortiss/af3/platform/raspberry/generator/transform/CANBusTransmissionCatalogTransformation.java
+++ b/org.fortiss.af3.platform.raspberry/trunk/src/org/fortiss/af3/platform/raspberry/generator/transform/CANBusTransmissionCatalogTransformation.java
@@ -17,7 +17,7 @@ $Id$
 +--------------------------------------------------------------------------*/
 package org.fortiss.af3.platform.raspberry.generator.transform;
 
-import org.fortiss.af3.platform.raspberry.generator.executable.CANBusExecutable;
+import org.fortiss.af3.deployment.generator.TransmissionCatalog;
 import org.fortiss.af3.platform.raspberry.model.CANBus;
 import org.fortiss.tooling.kernel.extension.ITransformationProvider;
 import org.fortiss.tooling.kernel.extension.data.ITransformationContext;
@@ -34,7 +34,7 @@ public class CANBusTransmissionCatalogTransformation implements ITransformationP
 	/** {@inheritDoc} */
 	@Override
 	public Class<?> getTargetClass() {
-		return CANBusExecutable.class;
+		return TransmissionCatalog.class;
 	}
 
 	/** {@inheritDoc} */
@@ -53,7 +53,7 @@ public class CANBusTransmissionCatalogTransformation implements ITransformationP
 	/** {@inheritDoc} */
 	@Override
 	public Object transform(Object source, ITransformationContext context) {
-		return new CANBusExecutable((CANBus)source);
+		return new TransmissionCatalog();
 	}
 
 }
-- 
GitLab