From 7690c67000fd62a1c60516aa9b255c154d0befa7 Mon Sep 17 00:00:00 2001
From: Konstantin Tschernik <noreply@fortiss.org>
Date: Mon, 15 Jan 2018 13:20:45 +0000
Subject: [PATCH] Updated Rumblepad

---
 .../code-gen-hal/inc/af3pihal/rumblepad.h     |  45 +++++++-------
 .../trunk/code-gen-hal/lib/libaf3pihal.a      | Bin 1496830 -> 1498400 bytes
 .../trunk/model/raspberry.ecore               |   2 +-
 .../generator/executable/MainGenerator.java   |  58 ++++--------------
 4 files changed, 36 insertions(+), 69 deletions(-)

diff --git a/org.fortiss.af3.platform.raspberry/trunk/code-gen-hal/inc/af3pihal/rumblepad.h b/org.fortiss.af3.platform.raspberry/trunk/code-gen-hal/inc/af3pihal/rumblepad.h
index 5c421125..225624ff 100644
--- a/org.fortiss.af3.platform.raspberry/trunk/code-gen-hal/inc/af3pihal/rumblepad.h
+++ b/org.fortiss.af3.platform.raspberry/trunk/code-gen-hal/inc/af3pihal/rumblepad.h
@@ -19,26 +19,25 @@
 #define RUMBLEPAD_AXIS_RIGHT_STICK_HORIZONTAL	 3
 #define RUMBLEPAD_AXIS_RIGHT_STICK_VERTICAL	 4
 #define RUMBLEPAD_AXIS_R2	 5
-//#define RUMBLEPAD_AXIS_CROSS_PAD_HORIZONTAL	 4
-//#define RUMBLEPAD_AXIS_CROSS_PAD_VERTICAL		 5
+#define RUMBLEPAD_AXIS_CROSS_PAD_HORIZONTAL	 16
+#define RUMBLEPAD_AXIS_CROSS_PAD_VERTICAL		 17
 
-#define RUMBLEPAD_BUTTON_A					 6
-#define RUMBLEPAD_BUTTON_B					 7
-#define RUMBLEPAD_BUTTON_Y					 8
-#define RUMBLEPAD_BUTTON_X					 9
-#define RUMBLEPAD_BUTTON_L1					10
-#define RUMBLEPAD_BUTTON_R1					11
-#define RUMBLEPAD_BUTTON_SELECT				12
-#define RUMBLEPAD_BUTTON_START				13
-#define RUMBLEPAD_BUTTON_L3					14
-#define RUMBLEPAD_BUTTON_R3					15
-#define RUMBLEPAD_BUTTON_HOME				16
-#define RUMBLEPAD_DPAD_UP					17
-#define RUMBLEPAD_DPAD_DOWN					18
-#define RUMBLEPAD_DPAD_LEFT					19
-#define RUMBLEPAD_DPAD_RIGHT				20
-//#define RUMBLEPAD_BUTTON_LEFT_STICK			16
-//#define RUMBLEPAD_BUTTON_RIGHT_STICK			17
+#define RUMBLEPAD_BUTTON_A					 304
+#define RUMBLEPAD_BUTTON_B					 305
+#define RUMBLEPAD_BUTTON_Y					 307
+#define RUMBLEPAD_BUTTON_X					 308
+#define RUMBLEPAD_BUTTON_L1					310
+#define RUMBLEPAD_BUTTON_R1					311
+#define RUMBLEPAD_BUTTON_SELECT				314
+#define RUMBLEPAD_BUTTON_START				315
+#define RUMBLEPAD_BUTTON_MODE				316
+#define RUMBLEPAD_BUTTON_L3					317
+#define RUMBLEPAD_BUTTON_R3					318
+
+#define RUMBLEPAD_DPAD_UP					340
+#define RUMBLEPAD_DPAD_DOWN					341
+#define RUMBLEPAD_DPAD_LEFT					342
+#define RUMBLEPAD_DPAD_RIGHT				343
 
 #define RUMBLEPAD_BUTTON_STATE_PRESSED		1
 #define RUMBLEPAD_BUTTON_STATE_NPRESSED		0
@@ -46,8 +45,8 @@
 struct rumblepad_configuration {
 	const char* device_id;
 	uint64_t waiting_sleep_in_micros;
-	void (*axis_callback)(uint8_t axis, int16_t value);
-	void (*button_callback)(uint8_t button, uint16_t old_value, uint16_t new_value);
+	void (*axis_callback)(uint16_t axis, int16_t value);
+	void (*button_callback)(uint16_t button, uint16_t old_value, uint16_t new_value);
 };
 typedef struct rumblepad_configuration rumblepad_configuration_t;
 
@@ -55,10 +54,10 @@ typedef struct rumblepad_configuration rumblepad_configuration_t;
 void rumblepad_initialize(rumblepad_configuration_t* configuration);
 
 /** Get the axis position for the given axis. */
-int16_t rumblepad_get_axis_position(uint8_t axisID);
+int16_t rumblepad_get_axis_position(uint16_t axisID);
 
 /** Get the button state for the given button. */
-int16_t rumblepad_get_button_state(uint8_t buttonID);
+int16_t rumblepad_get_button_state(uint16_t buttonID);
 
 /** Terminates the rumblepad thread and frees its resources. */
 void rumblepad_terminate();
diff --git a/org.fortiss.af3.platform.raspberry/trunk/code-gen-hal/lib/libaf3pihal.a b/org.fortiss.af3.platform.raspberry/trunk/code-gen-hal/lib/libaf3pihal.a
index 112f85998f84585d9493877dc0d1cf1c740760f1..25fb2cde3c9624de13722a0fa5f49459e62633a1 100644
GIT binary patch
delta 29764
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
B{>%UX

delta 17446
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

diff --git a/org.fortiss.af3.platform.raspberry/trunk/model/raspberry.ecore b/org.fortiss.af3.platform.raspberry/trunk/model/raspberry.ecore
index 1fe18459..6afa6512 100644
--- a/org.fortiss.af3.platform.raspberry/trunk/model/raspberry.ecore
+++ b/org.fortiss.af3.platform.raspberry/trunk/model/raspberry.ecore
@@ -72,6 +72,6 @@
     <eClassifiers xsi:type="ecore:EClass" name="ButtonStart" eSuperTypes="#//rumblepad/RumblepadReceiverBase"/>
     <eClassifiers xsi:type="ecore:EClass" name="ButtonSelect" eSuperTypes="#//rumblepad/RumblepadReceiverBase"/>
     <eClassifiers xsi:type="ecore:EClass" name="ButtonHome" eSuperTypes="#//rumblepad/RumblepadReceiverBase"/>
-    <eClassifiers xsi:type="ecore:EClass" name="SimpleRumbleFeature" eSuperTypes="../../org.fortiss.af3.platform/model/platform.ecore#//Transmitter"/>
+    <eClassifiers xsi:type="ecore:EClass" name="SimpleRumbleFeature" eSuperTypes="platform:/resource/org.fortiss.af3.platform/model/platform.ecore#//Transmitter"/>
   </eSubpackages>
 </ecore:EPackage>
diff --git a/org.fortiss.af3.platform.raspberry/trunk/src/org/fortiss/af3/platform/raspberry/generator/executable/MainGenerator.java b/org.fortiss.af3.platform.raspberry/trunk/src/org/fortiss/af3/platform/raspberry/generator/executable/MainGenerator.java
index 10336121..6f6d2299 100644
--- a/org.fortiss.af3.platform.raspberry/trunk/src/org/fortiss/af3/platform/raspberry/generator/executable/MainGenerator.java
+++ b/org.fortiss.af3.platform.raspberry/trunk/src/org/fortiss/af3/platform/raspberry/generator/executable/MainGenerator.java
@@ -32,38 +32,6 @@ import org.fortiss.af3.platform.model.ExecutionUnit;
 import org.fortiss.af3.platform.model.PlatformConnectorUnit;
 import org.fortiss.af3.platform.model.Receiver;
 import org.fortiss.af3.platform.model.Transmitter;
-import org.fortiss.af3.platform.raspberry.model.ActuatorPWM;
-import org.fortiss.af3.platform.raspberry.model.RaspberryPi;
-import org.fortiss.af3.platform.raspberry.model.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.ActuatorDigits;
-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;
-import org.fortiss.af3.platform.raspberry.model.gamepad.Button4;
-import org.fortiss.af3.platform.raspberry.model.gamepad.ButtonL2;
-import org.fortiss.af3.platform.raspberry.model.gamepad.ButtonR2;
-import org.fortiss.af3.platform.raspberry.model.gamepad.GamepadReceiverBase;
-import org.fortiss.af3.platform.raspberry.model.rumblepad.ButtonA;
-import org.fortiss.af3.platform.raspberry.model.rumblepad.ButtonB;
-import org.fortiss.af3.platform.raspberry.model.rumblepad.ButtonHome;
-import org.fortiss.af3.platform.raspberry.model.rumblepad.ButtonSelect;
-import org.fortiss.af3.platform.raspberry.model.rumblepad.ButtonStart;
-import org.fortiss.af3.platform.raspberry.model.rumblepad.ButtonX;
-import org.fortiss.af3.platform.raspberry.model.rumblepad.ButtonY;
-import org.fortiss.af3.platform.raspberry.model.rumblepad.DPadDown;
-import org.fortiss.af3.platform.raspberry.model.rumblepad.DPadLeft;
-import org.fortiss.af3.platform.raspberry.model.rumblepad.DPadRight;
-import org.fortiss.af3.platform.raspberry.model.rumblepad.DPadUp;
-import org.fortiss.af3.platform.raspberry.model.rumblepad.L2_Position;
-import org.fortiss.af3.platform.raspberry.model.rumblepad.R2_Position;
-import org.fortiss.af3.platform.raspberry.model.rumblepad.RumblepadReceiverBase;
 import org.fortiss.tooling.kernel.extension.data.ITransformationContext;
 
 /**
@@ -484,19 +452,7 @@ class MainGenerator {
 			return gamepadReadCode("rumblepad_get_button_state", "RUMBLEPAD_BUTTON_SELECT", inport);
 		}
 		if(receiver instanceof ButtonHome) {
-			return gamepadReadCode("rumblepad_get_button_state", "RUMBLEPAD_BUTTON_HOME", inport);
-		}
-		if(receiver instanceof DPadDown) {
-			return gamepadReadCode("rumblepad_get_button_state", "RUMBLEPAD_DPAD_DOWN", inport);
-		}
-		if(receiver instanceof DPadUp) {
-			return gamepadReadCode("rumblepad_get_button_state", "RUMBLEPAD_DPAD_UP", inport);
-		}
-		if(receiver instanceof DPadLeft) {
-			return gamepadReadCode("rumblepad_get_button_state", "RUMBLEPAD_DPAD_LEFT", inport);
-		}
-		if(receiver instanceof DPadRight) {
-			return gamepadReadCode("rumblepad_get_button_state", "RUMBLEPAD_DPAD_RIGHT", inport);
+			return gamepadReadCode("rumblepad_get_button_state", "RUMBLEPAD_BUTTON_MODE", inport);
 		}
 		if(receiver instanceof org.fortiss.af3.platform.raspberry.model.rumblepad.ButtonL1) {
 			return gamepadReadCode("rumblepad_get_button_state", "RUMBLEPAD_BUTTON_L1", inport);
@@ -516,6 +472,18 @@ class MainGenerator {
 		if(receiver instanceof R2_Position) {
 			return gamepadReadCode("rumblepad_get_axis_position", "RUMBLEPAD_AXIS_R2", inport);
 		}
+		if(receiver instanceof DPadDown) {
+			return gamepadReadCode("rumblepad_get_button_state", "RUMBLEPAD_DPAD_DOWN", inport);
+		}
+		if(receiver instanceof DPadUp) {
+			return gamepadReadCode("rumblepad_get_button_state", "RUMBLEPAD_DPAD_UP", inport);
+		}
+		if(receiver instanceof DPadLeft) {
+			return gamepadReadCode("rumblepad_get_button_state", "RUMBLEPAD_DPAD_LEFT", inport);
+		}
+		if(receiver instanceof DPadRight) {
+			return gamepadReadCode("rumblepad_get_button_state", "RUMBLEPAD_DPAD_RIGHT", inport);
+		}
 		if(receiver instanceof org.fortiss.af3.platform.raspberry.model.rumblepad.Left_StickX_Position) {
 			return gamepadReadCode("rumblepad_get_axis_position",
 					"RUMBLEPAD_AXIS_LEFT_STICK_HORIZONTAL", inport);
-- 
GitLab