From d6cc99f798372fb949ee45d229f6f64fe680460d Mon Sep 17 00:00:00 2001
From: Florian Hoelzl <hoelzl@fortiss.org>
Date: Thu, 30 Nov 2017 12:52:17 +0000
Subject: [PATCH] Brick sensor model elements added. refs 3079

---
 .../trunk/plugin.xml                          | 30 ++++++++
 .../ui/editpart/EditPartFactory.java          |  3 +-
 .../raspberry/ui/handler/BrickletHandler.java | 40 ++++++++++
 .../ui/prototype/ProtoypeProvider.java        | 51 +++++++++++++
 .../trunk/META-INF/MANIFEST.MF                | 12 ++-
 .../trunk/model/raspberry.ecore               | 26 +++++--
 .../trunk/model/raspberry.genmodel            | 14 ++++
 .../trunk/plugin.xml                          |  8 ++
 .../compose/RaspberryPiCompositor.java        | 14 +++-
 .../util/RaspberryModelElementFactory.java    | 73 +++++++++++++++++++
 10 files changed, 260 insertions(+), 11 deletions(-)
 create mode 100644 org.fortiss.af3.platform.raspberry.ui/trunk/src/org/fortiss/af3/platform/raspberry/ui/handler/BrickletHandler.java

diff --git a/org.fortiss.af3.platform.raspberry.ui/trunk/plugin.xml b/org.fortiss.af3.platform.raspberry.ui/trunk/plugin.xml
index ad58509f..e1589e6f 100644
--- a/org.fortiss.af3.platform.raspberry.ui/trunk/plugin.xml
+++ b/org.fortiss.af3.platform.raspberry.ui/trunk/plugin.xml
@@ -53,6 +53,9 @@
       </modelElementClass>
           <modelElementClass
             modelElementClass="org.fortiss.af3.platform.raspberry.model.gamepad.GamepadReceiverBase">
+      </modelElementClass>
+          <modelElementClass
+            modelElementClass="org.fortiss.af3.platform.raspberry.model.brick.UIDUnit">
       </modelElementClass>
    </editPartFactory>
 </extension>
@@ -136,6 +139,33 @@
             modelElementClass="org.fortiss.af3.platform.raspberry.model.gamepad.Right_StickY_Position">
       </modelElementClass>
    </modelElementHandler>
+   <modelElementHandler
+         handler="org.fortiss.af3.platform.raspberry.ui.handler.BrickletHandler">
+      <modelElementClass
+            modelElementClass="org.fortiss.af3.platform.raspberry.model.brick.UltraSonicSensor">
+      </modelElementClass>
+      <modelElementClass
+            modelElementClass="org.fortiss.af3.platform.raspberry.model.brick.LaserRangeSensor">
+      </modelElementClass>
+      <modelElementClass
+            modelElementClass="org.fortiss.af3.platform.raspberry.model.brick.AccelerationXSensor">
+      </modelElementClass>
+      <modelElementClass
+            modelElementClass="org.fortiss.af3.platform.raspberry.model.brick.AccelerationYSensor">
+      </modelElementClass>
+      <modelElementClass
+            modelElementClass="org.fortiss.af3.platform.raspberry.model.brick.AccelerationZSensor">
+      </modelElementClass>
+      <modelElementClass
+            modelElementClass="org.fortiss.af3.platform.raspberry.model.brick.AngularVelocityXSensor">
+      </modelElementClass>
+      <modelElementClass
+            modelElementClass="org.fortiss.af3.platform.raspberry.model.brick.AngularVelocityYSensor">
+      </modelElementClass>
+      <modelElementClass
+            modelElementClass="org.fortiss.af3.platform.raspberry.model.brick.AngularVelocityZSensor">
+      </modelElementClass>
+   </modelElementHandler>
 </extension>
    <extension
          point="org.eclipse.ui.views.properties.tabbed.propertySections">
diff --git a/org.fortiss.af3.platform.raspberry.ui/trunk/src/org/fortiss/af3/platform/raspberry/ui/editpart/EditPartFactory.java b/org.fortiss.af3.platform.raspberry.ui/trunk/src/org/fortiss/af3/platform/raspberry/ui/editpart/EditPartFactory.java
index 4646b874..24a0eda7 100644
--- a/org.fortiss.af3.platform.raspberry.ui/trunk/src/org/fortiss/af3/platform/raspberry/ui/editpart/EditPartFactory.java
+++ b/org.fortiss.af3.platform.raspberry.ui/trunk/src/org/fortiss/af3/platform/raspberry/ui/editpart/EditPartFactory.java
@@ -24,6 +24,7 @@ import org.fortiss.af3.platform.raspberry.model.ActuatorPWM;
 import org.fortiss.af3.platform.raspberry.model.CanBus;
 import org.fortiss.af3.platform.raspberry.model.CanConnector;
 import org.fortiss.af3.platform.raspberry.model.RaspberryPi;
+import org.fortiss.af3.platform.raspberry.model.brick.UIDUnit;
 import org.fortiss.af3.platform.raspberry.model.gamepad.GamepadReceiverBase;
 import org.fortiss.af3.platform.ui.DefaultStyle;
 import org.fortiss.af3.platform.ui.editpart.generic.ExecutionUnitEditPart;
@@ -60,7 +61,7 @@ public class EditPartFactory implements IEditPartFactory {
 		} else if(model instanceof CanBus) {
 			return new TransmissionUnitDefaultEditPart((CanBus)model);
 		} else if(model instanceof CanConnector || model instanceof ActuatorPWM ||
-				model instanceof GamepadReceiverBase) {
+				model instanceof GamepadReceiverBase || model instanceof UIDUnit) {
 			return new StickyPlatformConnectorUnitEditPart((PlatformConnectorUnit)model);
 		}
 		return null;
diff --git a/org.fortiss.af3.platform.raspberry.ui/trunk/src/org/fortiss/af3/platform/raspberry/ui/handler/BrickletHandler.java b/org.fortiss.af3.platform.raspberry.ui/trunk/src/org/fortiss/af3/platform/raspberry/ui/handler/BrickletHandler.java
new file mode 100644
index 00000000..486b777b
--- /dev/null
+++ b/org.fortiss.af3.platform.raspberry.ui/trunk/src/org/fortiss/af3/platform/raspberry/ui/handler/BrickletHandler.java
@@ -0,0 +1,40 @@
+/*--------------------------------------------------------------------------+
+$Id$
+|                                                                          |
+| Copyright 2011 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.handler;
+
+import static org.fortiss.af3.platform.raspberry.ui.AF3PlatformRaspberryUIActivator.getImageDescriptor;
+
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.fortiss.af3.platform.raspberry.model.brick.UIDUnit;
+import org.fortiss.tooling.kernel.ui.extension.base.NamedCommentedModelElementHandlerBase;
+
+/**
+ * Handler for {@link UIDUnit}s.
+ * 
+ * @author hoelzl
+ * @author $Author$
+ * @version $Rev$
+ * @ConQAT.Rating GREEN Hash: D80CF94CBBADB4627AAEDA1F34ABF0A5
+ */
+public class BrickletHandler extends NamedCommentedModelElementHandlerBase<UIDUnit> {
+	/** {@inheritDoc} */
+	@Override
+	public ImageDescriptor getIconImageDescriptor() {
+		return getImageDescriptor("icons/unknown.png");
+	}
+}
diff --git a/org.fortiss.af3.platform.raspberry.ui/trunk/src/org/fortiss/af3/platform/raspberry/ui/prototype/ProtoypeProvider.java b/org.fortiss.af3.platform.raspberry.ui/trunk/src/org/fortiss/af3/platform/raspberry/ui/prototype/ProtoypeProvider.java
index def32a99..e3488ad5 100644
--- a/org.fortiss.af3.platform.raspberry.ui/trunk/src/org/fortiss/af3/platform/raspberry/ui/prototype/ProtoypeProvider.java
+++ b/org.fortiss.af3.platform.raspberry.ui/trunk/src/org/fortiss/af3/platform/raspberry/ui/prototype/ProtoypeProvider.java
@@ -28,6 +28,14 @@ import org.fortiss.af3.platform.raspberry.model.ActuatorPWM;
 import org.fortiss.af3.platform.raspberry.model.CanBus;
 import org.fortiss.af3.platform.raspberry.model.CanConnector;
 import org.fortiss.af3.platform.raspberry.model.RaspberryPi;
+import org.fortiss.af3.platform.raspberry.model.brick.AccelerationXSensor;
+import org.fortiss.af3.platform.raspberry.model.brick.AccelerationYSensor;
+import org.fortiss.af3.platform.raspberry.model.brick.AccelerationZSensor;
+import org.fortiss.af3.platform.raspberry.model.brick.AngularVelocityXSensor;
+import org.fortiss.af3.platform.raspberry.model.brick.AngularVelocityYSensor;
+import org.fortiss.af3.platform.raspberry.model.brick.AngularVelocityZSensor;
+import org.fortiss.af3.platform.raspberry.model.brick.LaserRangeSensor;
+import org.fortiss.af3.platform.raspberry.model.brick.UltraSonicSensor;
 import org.fortiss.af3.platform.raspberry.model.gamepad.Button1;
 import org.fortiss.af3.platform.raspberry.model.gamepad.Button2;
 import org.fortiss.af3.platform.raspberry.model.gamepad.Button3;
@@ -57,6 +65,8 @@ public class ProtoypeProvider extends PrototypeProviderBase {
 	protected final static String CATEGORY_NAME = "RaspberryPI Platform";
 	/** Category for gamepad elements. */
 	protected final static String GAMEPAD = "Gamepad";
+	/** Category for brick elements. */
+	protected final static String BRICK = "Bricklets";
 
 	/** {@inheritDoc} */
 	@Override
@@ -65,6 +75,7 @@ public class ProtoypeProvider extends PrototypeProviderBase {
 		registerPrimaryPrototype("RaspberryPi", pi, CATEGORY_NAME);
 		PrototypeCategory prototypeCategory = registerPrototypeCategory(CATEGORY_NAME);
 		registerPrototypeCategory(prototypeCategory, GAMEPAD);
+		registerPrototypeCategory(prototypeCategory, BRICK);
 
 		CanBus bus = RaspberryModelElementFactory.createCanBus();
 		setNodeBounds(bus,
@@ -140,5 +151,45 @@ public class ProtoypeProvider extends PrototypeProviderBase {
 		setNodePosition(Right_StickY, 0, 0);
 		setConnectorPosition(Right_StickY, 0, 0);
 		registerPrototype(Right_StickY.getName(), Right_StickY, GAMEPAD);
+
+		UltraSonicSensor uss = RaspberryModelElementFactory.createUltraSonicSensor();
+		setNodePosition(uss, 0, 0);
+		setConnectorPosition(uss, 0, 0);
+		registerPrototype(uss.getName(), uss, BRICK);
+
+		LaserRangeSensor lsr = RaspberryModelElementFactory.createLaserRangeSensor();
+		setNodePosition(lsr, 0, 0);
+		setConnectorPosition(lsr, 0, 0);
+		registerPrototype(lsr.getName(), lsr, BRICK);
+
+		AccelerationXSensor accX = RaspberryModelElementFactory.createAccelerationXSensor();
+		setNodePosition(accX, 0, 0);
+		setConnectorPosition(accX, 0, 0);
+		registerPrototype(accX.getName(), accX, BRICK);
+
+		AccelerationYSensor accY = RaspberryModelElementFactory.createAccelerationYSensor();
+		setNodePosition(accY, 0, 0);
+		setConnectorPosition(accY, 0, 0);
+		registerPrototype(accY.getName(), accY, BRICK);
+
+		AccelerationZSensor accZ = RaspberryModelElementFactory.createAccelerationZSensor();
+		setNodePosition(accZ, 0, 0);
+		setConnectorPosition(accZ, 0, 0);
+		registerPrototype(accZ.getName(), accZ, BRICK);
+
+		AngularVelocityXSensor avX = RaspberryModelElementFactory.createAngularVelocityXSensor();
+		setNodePosition(avX, 0, 0);
+		setConnectorPosition(avX, 0, 0);
+		registerPrototype(avX.getName(), avX, BRICK);
+
+		AngularVelocityYSensor avY = RaspberryModelElementFactory.createAngularVelocityYSensor();
+		setNodePosition(avY, 0, 0);
+		setConnectorPosition(avY, 0, 0);
+		registerPrototype(avY.getName(), avY, BRICK);
+
+		AngularVelocityZSensor avZ = RaspberryModelElementFactory.createAngularVelocityZSensor();
+		setNodePosition(avZ, 0, 0);
+		setConnectorPosition(avZ, 0, 0);
+		registerPrototype(avZ.getName(), avZ, BRICK);
 	}
 }
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 9f97ce07..857b6c71 100644
--- a/org.fortiss.af3.platform.raspberry/trunk/META-INF/MANIFEST.MF
+++ b/org.fortiss.af3.platform.raspberry/trunk/META-INF/MANIFEST.MF
@@ -7,9 +7,15 @@ Bundle-ClassPath: .
 Bundle-Vendor: fortiss GmbH
 Bundle-Localization: plugin
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
-Export-Package: 
- org.fortiss.af3.platform.raspberry.model,
+Export-Package: org.fortiss.af3.platform.raspberry.model,
+ org.fortiss.af3.platform.raspberry.model.brick,
+ org.fortiss.af3.platform.raspberry.model.brick.impl,
+ org.fortiss.af3.platform.raspberry.model.brick.util,
  org.fortiss.af3.platform.raspberry.model.gamepad,
+ org.fortiss.af3.platform.raspberry.model.gamepad.impl,
+ org.fortiss.af3.platform.raspberry.model.gamepad.util,
+ org.fortiss.af3.platform.raspberry.model.impl,
+ org.fortiss.af3.platform.raspberry.model.util,
  org.fortiss.af3.platform.raspberry.util
 Bundle-ActivationPolicy: lazy
 Bundle-Activator: org.fortiss.af3.platform.raspberry.AF3PlatformRaspberryActivator
@@ -18,7 +24,7 @@ Require-Bundle: org.fortiss.af3.project,
  org.eclipse.core.runtime,
  org.eclipse.emf.ecore;visibility:=reexport,
  org.fortiss.tooling.base;visibility:=reexport,
- org.fortiss.af3.platform;bundle-version="2.5.0";visibility:=reexport,
+ org.fortiss.af3.platform;visibility:=reexport;bundle-version="2.5.0",
  org.fortiss.tooling.base.ui;bundle-version="2.11.0",
  org.fortiss.af3.generator.common
 Import-Package: org.fortiss.af3.deployment.generator,
diff --git a/org.fortiss.af3.platform.raspberry/trunk/model/raspberry.ecore b/org.fortiss.af3.platform.raspberry/trunk/model/raspberry.ecore
index 44a3fbbb..57ac13db 100644
--- a/org.fortiss.af3.platform.raspberry/trunk/model/raspberry.ecore
+++ b/org.fortiss.af3.platform.raspberry/trunk/model/raspberry.ecore
@@ -2,25 +2,25 @@
 <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="RaspberryPi" eSuperTypes="platform:/resource/org.fortiss.af3.platform/model/platform.ecore#//ExecutionUnit">
+  <eClassifiers xsi:type="ecore:EClass" name="RaspberryPi" eSuperTypes="../../org.fortiss.af3.platform/model/platform.ecore#//ExecutionUnit">
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="canCoordinationID" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="ipAddress" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="coordinatorUnit" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="cycleTime" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
   </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="CanBus" eSuperTypes="platform:/resource/org.fortiss.af3.platform/model/platform.ecore#//TransmissionUnit"/>
-  <eClassifiers xsi:type="ecore:EClass" name="CanConnector" eSuperTypes="platform:/resource/org.fortiss.af3.platform/model/platform.ecore#//Transceiver"/>
-  <eClassifiers xsi:type="ecore:EClass" name="ActuatorPWM" eSuperTypes="platform:/resource/org.fortiss.af3.platform/model/platform.ecore#//Transmitter">
+  <eClassifiers xsi:type="ecore:EClass" name="CanBus" eSuperTypes="../../org.fortiss.af3.platform/model/platform.ecore#//TransmissionUnit"/>
+  <eClassifiers xsi:type="ecore:EClass" name="CanConnector" eSuperTypes="../../org.fortiss.af3.platform/model/platform.ecore#//Transceiver"/>
+  <eClassifiers xsi:type="ecore:EClass" name="ActuatorPWM" eSuperTypes="../../org.fortiss.af3.platform/model/platform.ecore#//Transmitter">
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="channelID" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
   </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="ActuatorDigits" eSuperTypes="platform:/resource/org.fortiss.af3.platform/model/platform.ecore#//Transmitter">
+  <eClassifiers xsi:type="ecore:EClass" name="ActuatorDigits" eSuperTypes="../../org.fortiss.af3.platform/model/platform.ecore#//Transmitter">
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="showHexValue" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="uniqueBrickletID" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
   </eClassifiers>
   <eSubpackages name="gamepad" nsURI="http://www.fortiss.org/af3/platform/raspberry/gamepad"
       nsPrefix="org-fortiss-af3-platform-raspberry-gamepad">
     <eClassifiers xsi:type="ecore:EClass" name="GamepadReceiverBase" abstract="true"
-        eSuperTypes="platform:/resource/org.fortiss.af3.platform/model/platform.ecore#//Receiver"/>
+        eSuperTypes="../../org.fortiss.af3.platform/model/platform.ecore#//Receiver"/>
     <eClassifiers xsi:type="ecore:EClass" name="Button1" eSuperTypes="#//gamepad/GamepadReceiverBase"/>
     <eClassifiers xsi:type="ecore:EClass" name="Button2" eSuperTypes="#//gamepad/GamepadReceiverBase"/>
     <eClassifiers xsi:type="ecore:EClass" name="Button3" eSuperTypes="#//gamepad/GamepadReceiverBase"/>
@@ -34,4 +34,18 @@
     <eClassifiers xsi:type="ecore:EClass" name="Right_StickX_Position" eSuperTypes="#//gamepad/GamepadReceiverBase"/>
     <eClassifiers xsi:type="ecore:EClass" name="Right_StickY_Position" eSuperTypes="#//gamepad/GamepadReceiverBase"/>
   </eSubpackages>
+  <eSubpackages name="brick" nsURI="http://www.fortiss.org/af3/platform/raspberry/brick"
+      nsPrefix="org-fortiss-af3-platform-raspberry">
+    <eClassifiers xsi:type="ecore:EClass" name="UIDUnit" abstract="true" eSuperTypes="../../org.fortiss.tooling.kernel/model/kernel.ecore#//INamedCommentedElement">
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="uniqueBrickletID" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EClass" name="UltraSonicSensor" eSuperTypes="../../org.fortiss.af3.platform/model/platform.ecore#//Receiver #//brick/UIDUnit"/>
+    <eClassifiers xsi:type="ecore:EClass" name="LaserRangeSensor" eSuperTypes="../../org.fortiss.af3.platform/model/platform.ecore#//Receiver #//brick/UIDUnit"/>
+    <eClassifiers xsi:type="ecore:EClass" name="AccelerationXSensor" eSuperTypes="../../org.fortiss.af3.platform/model/platform.ecore#//Receiver #//brick/UIDUnit"/>
+    <eClassifiers xsi:type="ecore:EClass" name="AccelerationYSensor" eSuperTypes="../../org.fortiss.af3.platform/model/platform.ecore#//Receiver #//brick/UIDUnit"/>
+    <eClassifiers xsi:type="ecore:EClass" name="AccelerationZSensor" eSuperTypes="../../org.fortiss.af3.platform/model/platform.ecore#//Receiver #//brick/UIDUnit"/>
+    <eClassifiers xsi:type="ecore:EClass" name="AngularVelocityXSensor" eSuperTypes="../../org.fortiss.af3.platform/model/platform.ecore#//Receiver #//brick/UIDUnit"/>
+    <eClassifiers xsi:type="ecore:EClass" name="AngularVelocityYSensor" eSuperTypes="../../org.fortiss.af3.platform/model/platform.ecore#//Receiver #//brick/UIDUnit"/>
+    <eClassifiers xsi:type="ecore:EClass" name="AngularVelocityZSensor" eSuperTypes="../../org.fortiss.af3.platform/model/platform.ecore#//Receiver #//brick/UIDUnit"/>
+  </eSubpackages>
 </ecore:EPackage>
diff --git a/org.fortiss.af3.platform.raspberry/trunk/model/raspberry.genmodel b/org.fortiss.af3.platform.raspberry/trunk/model/raspberry.genmodel
index df5f346b..72acf717 100644
--- a/org.fortiss.af3.platform.raspberry/trunk/model/raspberry.genmodel
+++ b/org.fortiss.af3.platform.raspberry/trunk/model/raspberry.genmodel
@@ -38,5 +38,19 @@
       <genClasses ecoreClass="raspberry.ecore#//gamepad/Right_StickX_Position"/>
       <genClasses ecoreClass="raspberry.ecore#//gamepad/Right_StickY_Position"/>
     </nestedGenPackages>
+    <nestedGenPackages prefix="Brick" basePackage="org.fortiss.af3.platform.raspberry.model"
+        disposableProviderFactory="true" ecorePackage="raspberry.ecore#//brick">
+      <genClasses image="false" ecoreClass="raspberry.ecore#//brick/UIDUnit">
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute raspberry.ecore#//brick/UIDUnit/uniqueBrickletID"/>
+      </genClasses>
+      <genClasses ecoreClass="raspberry.ecore#//brick/UltraSonicSensor"/>
+      <genClasses ecoreClass="raspberry.ecore#//brick/LaserRangeSensor"/>
+      <genClasses ecoreClass="raspberry.ecore#//brick/AccelerationXSensor"/>
+      <genClasses ecoreClass="raspberry.ecore#//brick/AccelerationYSensor"/>
+      <genClasses ecoreClass="raspberry.ecore#//brick/AccelerationZSensor"/>
+      <genClasses ecoreClass="raspberry.ecore#//brick/AngularVelocityXSensor"/>
+      <genClasses ecoreClass="raspberry.ecore#//brick/AngularVelocityYSensor"/>
+      <genClasses ecoreClass="raspberry.ecore#//brick/AngularVelocityZSensor"/>
+    </nestedGenPackages>
   </genPackages>
 </genmodel:GenModel>
diff --git a/org.fortiss.af3.platform.raspberry/trunk/plugin.xml b/org.fortiss.af3.platform.raspberry/trunk/plugin.xml
index 8ac1231b..bc4e1ce2 100644
--- a/org.fortiss.af3.platform.raspberry/trunk/plugin.xml
+++ b/org.fortiss.af3.platform.raspberry/trunk/plugin.xml
@@ -26,6 +26,14 @@
             genModel="model/raspberry.genmodel"/>
    </extension>
 
+   <extension point="org.eclipse.emf.ecore.generated_package">
+      <!-- @generated raspberry -->
+      <package
+            uri="http://www.fortiss.org/af3/platform/raspberry/brick"
+            class="org.fortiss.af3.platform.raspberry.model.brick.BrickPackage"
+            genModel="model/raspberry.genmodel"/>
+   </extension>
+
    <extension
          point="org.fortiss.tooling.kernel.modelElementCompositor">
       <modelElementCompositor
diff --git a/org.fortiss.af3.platform.raspberry/trunk/src/org/fortiss/af3/platform/raspberry/compose/RaspberryPiCompositor.java b/org.fortiss.af3.platform.raspberry/trunk/src/org/fortiss/af3/platform/raspberry/compose/RaspberryPiCompositor.java
index 3fd109ea..a29cc1c5 100644
--- a/org.fortiss.af3.platform.raspberry/trunk/src/org/fortiss/af3/platform/raspberry/compose/RaspberryPiCompositor.java
+++ b/org.fortiss.af3.platform.raspberry/trunk/src/org/fortiss/af3/platform/raspberry/compose/RaspberryPiCompositor.java
@@ -25,6 +25,14 @@ import org.fortiss.af3.platform.model.IPlatformArchitectureElement;
 import org.fortiss.af3.platform.raspberry.model.ActuatorPWM;
 import org.fortiss.af3.platform.raspberry.model.CanConnector;
 import org.fortiss.af3.platform.raspberry.model.RaspberryPi;
+import org.fortiss.af3.platform.raspberry.model.brick.AccelerationXSensor;
+import org.fortiss.af3.platform.raspberry.model.brick.AccelerationYSensor;
+import org.fortiss.af3.platform.raspberry.model.brick.AccelerationZSensor;
+import org.fortiss.af3.platform.raspberry.model.brick.AngularVelocityXSensor;
+import org.fortiss.af3.platform.raspberry.model.brick.AngularVelocityYSensor;
+import org.fortiss.af3.platform.raspberry.model.brick.AngularVelocityZSensor;
+import org.fortiss.af3.platform.raspberry.model.brick.LaserRangeSensor;
+import org.fortiss.af3.platform.raspberry.model.brick.UltraSonicSensor;
 import org.fortiss.af3.platform.raspberry.model.gamepad.Button1;
 import org.fortiss.af3.platform.raspberry.model.gamepad.Button2;
 import org.fortiss.af3.platform.raspberry.model.gamepad.Button3;
@@ -72,7 +80,11 @@ public class RaspberryPiCompositor extends
 						Button2.class, Button3.class, Button4.class, ButtonL1.class,
 						ButtonL2.class, ButtonR1.class, ButtonR2.class, Left_StickX_Position.class,
 						Left_StickY_Position.class, Right_StickX_Position.class,
-						Right_StickY_Position.class);
+						Right_StickY_Position.class, UltraSonicSensor.class,
+						LaserRangeSensor.class, AccelerationXSensor.class,
+						AccelerationYSensor.class, AccelerationZSensor.class,
+						AngularVelocityXSensor.class, AngularVelocityYSensor.class,
+						AngularVelocityZSensor.class);
 		if(container != null) {
 			final boolean instanceOfAny = isInstanceOfAny(container, RaspberryPi.class);
 			return instanceOfAny && instanceOfAny2;
diff --git a/org.fortiss.af3.platform.raspberry/trunk/src/org/fortiss/af3/platform/raspberry/util/RaspberryModelElementFactory.java b/org.fortiss.af3.platform.raspberry/trunk/src/org/fortiss/af3/platform/raspberry/util/RaspberryModelElementFactory.java
index f2364e53..0371ab9a 100644
--- a/org.fortiss.af3.platform.raspberry/trunk/src/org/fortiss/af3/platform/raspberry/util/RaspberryModelElementFactory.java
+++ b/org.fortiss.af3.platform.raspberry/trunk/src/org/fortiss/af3/platform/raspberry/util/RaspberryModelElementFactory.java
@@ -24,6 +24,15 @@ import org.fortiss.af3.platform.raspberry.model.CanBus;
 import org.fortiss.af3.platform.raspberry.model.CanConnector;
 import org.fortiss.af3.platform.raspberry.model.RaspberryPi;
 import org.fortiss.af3.platform.raspberry.model.RaspberryPiModelFactory;
+import org.fortiss.af3.platform.raspberry.model.brick.AccelerationXSensor;
+import org.fortiss.af3.platform.raspberry.model.brick.AccelerationYSensor;
+import org.fortiss.af3.platform.raspberry.model.brick.AccelerationZSensor;
+import org.fortiss.af3.platform.raspberry.model.brick.AngularVelocityXSensor;
+import org.fortiss.af3.platform.raspberry.model.brick.AngularVelocityYSensor;
+import org.fortiss.af3.platform.raspberry.model.brick.AngularVelocityZSensor;
+import org.fortiss.af3.platform.raspberry.model.brick.BrickFactory;
+import org.fortiss.af3.platform.raspberry.model.brick.LaserRangeSensor;
+import org.fortiss.af3.platform.raspberry.model.brick.UltraSonicSensor;
 import org.fortiss.af3.platform.raspberry.model.gamepad.Button1;
 import org.fortiss.af3.platform.raspberry.model.gamepad.Button2;
 import org.fortiss.af3.platform.raspberry.model.gamepad.Button3;
@@ -180,4 +189,68 @@ public class RaspberryModelElementFactory {
 		createConnectorLayout(button);
 		return button;
 	}
+
+	/** Creates a {@link UltraSonicSensor}. */
+	public static UltraSonicSensor createUltraSonicSensor() {
+		UltraSonicSensor sensor = BrickFactory.eINSTANCE.createUltraSonicSensor();
+		sensor.setName("UltraSonicSensor");
+		createConnectorLayout(sensor);
+		return sensor;
+	}
+
+	/** Creates a {@link LaserRangeSensor}. */
+	public static LaserRangeSensor createLaserRangeSensor() {
+		LaserRangeSensor sensor = BrickFactory.eINSTANCE.createLaserRangeSensor();
+		sensor.setName("LaserRangeSensor");
+		createConnectorLayout(sensor);
+		return sensor;
+	}
+
+	/** Creates a {@link AccelerationXSensor}. */
+	public static AccelerationXSensor createAccelerationXSensor() {
+		AccelerationXSensor sensor = BrickFactory.eINSTANCE.createAccelerationXSensor();
+		sensor.setName("AccelerationSensorX");
+		createConnectorLayout(sensor);
+		return sensor;
+	}
+
+	/** Creates a {@link AccelerationYSensor}. */
+	public static AccelerationYSensor createAccelerationYSensor() {
+		AccelerationYSensor sensor = BrickFactory.eINSTANCE.createAccelerationYSensor();
+		sensor.setName("AccelerationSensorY");
+		createConnectorLayout(sensor);
+		return sensor;
+	}
+
+	/** Creates a {@link AccelerationZSensor}. */
+	public static AccelerationZSensor createAccelerationZSensor() {
+		AccelerationZSensor sensor = BrickFactory.eINSTANCE.createAccelerationZSensor();
+		sensor.setName("AccelerationSensorZ");
+		createConnectorLayout(sensor);
+		return sensor;
+	}
+
+	/** Creates a {@link AngularVelocityXSensor}. */
+	public static AngularVelocityXSensor createAngularVelocityXSensor() {
+		AngularVelocityXSensor sensor = BrickFactory.eINSTANCE.createAngularVelocityXSensor();
+		sensor.setName("AngularVelocitySensorX");
+		createConnectorLayout(sensor);
+		return sensor;
+	}
+
+	/** Creates a {@link AngularVelocityYSensor}. */
+	public static AngularVelocityYSensor createAngularVelocityYSensor() {
+		AngularVelocityYSensor sensor = BrickFactory.eINSTANCE.createAngularVelocityYSensor();
+		sensor.setName("AngularVelocitySensorY");
+		createConnectorLayout(sensor);
+		return sensor;
+	}
+
+	/** Creates a {@link AngularVelocityZSensor}. */
+	public static AngularVelocityZSensor createAngularVelocityZSensor() {
+		AngularVelocityZSensor sensor = BrickFactory.eINSTANCE.createAngularVelocityZSensor();
+		sensor.setName("AngularVelocitySensorZ");
+		createConnectorLayout(sensor);
+		return sensor;
+	}
 }
-- 
GitLab