aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRay <raysan5@gmail.com>2016-02-19 00:16:16 +0100
committerRay <raysan5@gmail.com>2016-02-19 00:16:16 +0100
commit09f28d0f57d54c86f5eed8d2e7917360d8657f36 (patch)
tree1153aaad8d4d167d5846782ab57d4cfdafc4a01e /src
parent8aab52aeda47ce283d1446be27a7e2e20f027434 (diff)
downloadraylib-09f28d0f57d54c86f5eed8d2e7917360d8657f36.tar.gz
raylib-09f28d0f57d54c86f5eed8d2e7917360d8657f36.zip
Working on RPI gamepad support
Diffstat (limited to 'src')
-rw-r--r--src/core.c58
1 files changed, 34 insertions, 24 deletions
diff --git a/src/core.c b/src/core.c
index c7d93355..3bd36d08 100644
--- a/src/core.c
+++ b/src/core.c
@@ -102,16 +102,6 @@
#include "EGL/egl.h" // Khronos EGL library - Native platform display device control functions
#include "EGL/eglext.h" // Khronos EGL library - Extensions
#include "GLES2/gl2.h" // Khronos OpenGL ES 2.0 library
-
- // Old device inputs system
- #define DEFAULT_KEYBOARD_DEV STDIN_FILENO // Standard input
- #define DEFAULT_MOUSE_DEV "/dev/input/mouse0"
- #define DEFAULT_GAMEPAD_DEV "/dev/input/js0"
-
- // New device input events (evdev) (must be detected)
- //#define DEFAULT_KEYBOARD_DEV "/dev/input/eventN"
- //#define DEFAULT_MOUSE_DEV "/dev/input/eventN"
- //#define DEFAULT_GAMEPAD_DEV "/dev/input/eventN"
#endif
#if defined(PLATFORM_WEB)
@@ -124,6 +114,21 @@
//----------------------------------------------------------------------------------
#define STORAGE_FILENAME "storage.data"
+#if defined(PLATFORM_RPI)
+ // Old device inputs system
+ #define DEFAULT_KEYBOARD_DEV STDIN_FILENO // Standard input
+ #define DEFAULT_MOUSE_DEV "/dev/input/mouse0"
+ #define DEFAULT_GAMEPAD_DEV "/dev/input/js0"
+
+ // New device input events (evdev) (must be detected)
+ //#define DEFAULT_KEYBOARD_DEV "/dev/input/eventN"
+ //#define DEFAULT_MOUSE_DEV "/dev/input/eventN"
+ //#define DEFAULT_GAMEPAD_DEV "/dev/input/eventN"
+
+ #define MOUSE_SENSITIVITY 1.0f
+ #define MAX_GAMEPAD_BUTTONS 11
+#endif
+
//----------------------------------------------------------------------------------
// Types and Structures Definition
//----------------------------------------------------------------------------------
@@ -168,6 +173,10 @@ pthread_t mouseThreadId; // Mouse reading thread id
static int gamepadStream = -1; // Gamepad device file descriptor
static bool gamepadReady = false; // Flag to know if gamepad is ready
pthread_t gamepadThreadId; // Gamepad reading thread id
+
+int gamepadButtons[MAX_GAMEPAD_BUTTONS];
+int gamepadAxisX = 0;
+int gamepadAxisY = 0;
#endif
#if defined(PLATFORM_ANDROID) || defined(PLATFORM_RPI)
@@ -1165,6 +1174,7 @@ Vector2 GetGamepadMovement(int gamepad)
#if defined(PLATFORM_RPI)
// TODO: Get gamepad axis information
+ // Use gamepadAxisX, gamepadAxisY
#else
axes = glfwGetJoystickAxes(gamepad, &axisCount);
#endif
@@ -1206,7 +1216,9 @@ bool IsGamepadButtonDown(int gamepad, int button)
int buttonsCount;
#if defined(PLATFORM_RPI)
- // TODO: Get gamepad buttons information
+ // Get gamepad buttons information
+ if ((gamepad == 0) && (gamepadButtons[button] == 1)) result = true;
+ else result = false;
#else
buttons = glfwGetJoystickButtons(gamepad, &buttonsCount);
@@ -1242,7 +1254,9 @@ bool IsGamepadButtonUp(int gamepad, int button)
int buttonsCount;
#if defined(PLATFORM_RPI)
- // TODO: Get gamepad buttons information
+ // Get gamepad buttons information
+ if ((gamepad == 0) && (gamepadButtons[button] == 0)) result = true;
+ else result = false;
#else
buttons = glfwGetJoystickButtons(gamepad, &buttonsCount);
@@ -2400,8 +2414,10 @@ static void *MouseThread(void *arg)
if ((mouse.buttons & XSIGN) > 0) mouseRelX = -1*(255 - mouseRelX);
if ((mouse.buttons & YSIGN) > 0) mouseRelY = -1*(255 - mouseRelY);
- mousePosition.x += (float)mouseRelX;
- mousePosition.y -= (float)mouseRelY;
+ // TODO: Mouse movement should not depend on screenWidth and screenHeight, normalize!
+
+ mousePosition.x += (float)mouseRelX/MOUSE_SENSITIVITY;
+ mousePosition.y -= (float)mouseRelY/MOUSE_SENSITIVITY;
if (mousePosition.x < 0) mousePosition.x = 0;
if (mousePosition.y < 0) mousePosition.y = 0;
@@ -2453,11 +2469,6 @@ static void *GamepadThread(void *arg)
// Read gamepad event
struct js_event gamepadEvent;
- int bytes;
-
- int buttons[11];
- int stickX;
- int stickY;
while (1)
{
@@ -2468,12 +2479,12 @@ static void *GamepadThread(void *arg)
// Process gamepad events by type
if (gamepadEvent.type == JS_EVENT_BUTTON)
{
- if (gamepadEvent.number < 11)
+ if (gamepadEvent.number < MAX_GAMEPAD_BUTTONS)
{
switch (gamepadEvent.value)
{
case 0:
- case 1: buttons[gamepadEvent.number] = gamepadEvent.value; break;
+ case 1: gamepadButtons[gamepadEvent.number] = (int)gamepadEvent.value; break;
default: break;
}
}
@@ -2498,8 +2509,8 @@ static void *GamepadThread(void *arg)
}
else if (gamepadEvent.type == JS_EVENT_AXIS)
{
- if (gamepadEvent.number == joystickAxisX) stickX = gamepadEvent.value;
- if (gamepadEvent.number == joystickAxisY) stickY = gamepadEvent.value;
+ if (gamepadEvent.number == joystickAxisX) gamepadAxisX = (int)gamepadEvent.value;
+ if (gamepadEvent.number == joystickAxisY) gamepadAxisY = (int)gamepadEvent.value;
/*
switch (gamepadEvent.number)
{
@@ -2512,7 +2523,6 @@ static void *GamepadThread(void *arg)
*/
}
}
- else read(gamepadStream, &gamepadEvent, 1); // Try to sync up again
}
}
#endif