Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: FastAnalogIn FastIO FastPWM SimpleDMA USBDevice mbed
Fork of Pinscape_Controller by
Diff: main.cpp
- Revision:
- 25:e22b88bd783a
- Parent:
- 23:14f8c5004cd0
- Child:
- 26:cb71c4af2912
--- a/main.cpp Wed Jun 03 18:52:22 2015 +0000
+++ b/main.cpp Tue Sep 01 04:27:15 2015 +0000
@@ -258,6 +258,36 @@
// Joystick axis report range - we report from -JOYMAX to +JOYMAX
#define JOYMAX 4096
+// --------------------------------------------------------------------------
+//
+// Set up mappings for the joystick X and Y reports based on the mounting
+// orientation of the KL25Z in the cabinet. Visual Pinball and other
+// pinball software effectively use video coordinates to define the axes:
+// positive X is to the right of the table, negative Y to the left, positive
+// Y toward the front of the table, negative Y toward the back. The KL25Z
+// accelerometer is mounted on the board with positive Y toward the USB
+// ports and positive X toward the right side of the board with the USB
+// ports pointing up. It's a simple matter to remap the KL25Z coordinate
+// system to match VP's coordinate system for mounting orientations at
+// 90-degree increments...
+//
+#if defined(ORIENTATION_PORTS_AT_FRONT)
+# define JOY_X(x, y) (y)
+# define JOY_Y(x, y) (x)
+#elif defined(ORIENTATION_PORTS_AT_LEFT)
+# define JOY_X(x, y) (-(x))
+# define JOY_Y(x, y) (y)
+#elif defined(ORIENTATION_PORTS_AT_RIGHT)
+# define JOY_X(x, y) (x)
+# define JOY_Y(x, y) (-(y))
+#elif defined(ORIENTATION_PORTS_AT_REAR)
+# define JOY_X(x, y) (-(y))
+# define JOY_Y(x, y) (-(x))
+#else
+# error Please define one of the ORIENTATION_PORTS_AT_xxx macros to establish the accelerometer orientation in your cabinet
+#endif
+
+
// --------------------------------------------------------------------------
//
@@ -1813,14 +1843,11 @@
// a traditional plunger.
int zrep = (ZBLaunchBallPort != 0 && wizOn[ZBLaunchBallPort-1] ? 0 : z);
- // Send the status report. Note that the nominal x and y axes
- // are reversed - this makes it more intuitive to set up in VP.
- // If we mount the Freesale card flat on the floor of the cabinet
- // with the USB connectors facing the front of the cabinet, this
- // arrangement of our nominal axes aligns with VP's standard
- // setting, so that we can configure VP with X Axis = X on the
- // joystick and Y Axis = Y on the joystick.
- js.update(y, x, zrep, buttons | simButtons, statusFlags);
+ // Send the status report. Note that we have to map the X and Y
+ // axes from the accelerometer to match the Windows joystick axes.
+ // The mapping is determined according to the mounting direction
+ // set in config.h via the ORIENTATION_xxx macros.
+ js.update(JOY_X(x,y), JOY_Y(x,y), zrep, buttons | simButtons, statusFlags);
// we've just started a new report interval, so reset the timer
reportTimer.reset();
