From 068314b73ecebac36eba148598439d81ad1b802f Mon Sep 17 00:00:00 2001 From: "Richard R. Goodwin" Date: Tue, 3 Jan 2017 21:20:13 +0000 Subject: [PATCH] added RPi touchscreen event processing thread --- release/rpi/libraylib.a | Bin 465300 -> 466136 bytes src/core.c | 62 +++++++++++++++++++++++++++++++++++++++- 2 files changed, 61 insertions(+), 1 deletion(-) diff --git a/release/rpi/libraylib.a b/release/rpi/libraylib.a index f3d41d5063dd58fb7c063bfc5e035b5902caa983..15adb5a757371f910119707118de538151a95280 100644 GIT binary patch delta 17739 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 delta 17054 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 Y%#Ee7O9K8t`r-_${E|n;mHqVp0zX~>WB>pF diff --git a/src/core.c b/src/core.c index 241772ecf..657136c74 100644 --- a/src/core.c +++ b/src/core.c @@ -120,7 +120,8 @@ // Old device inputs system #define DEFAULT_KEYBOARD_DEV STDIN_FILENO // Standard input #define DEFAULT_MOUSE_DEV "/dev/input/mouse0" // Mouse input - #define DEFAULT_GAMEPAD_DEV "/dev/input/js" // Gamepad input (base dev for all gamepads: js0, js1, ...) + #define DEFAULT_TOUCH_DEV "/dev/input/event4" // Touch Input virtual device created by ts_uinput + #define DEFAULT_GAMEPAD_DEV "/dev/input/js" // Gamepad input (base dev for all gamepads: js0, js1, ...) // New device input events (evdev) (must be detected) //#define DEFAULT_KEYBOARD_DEV "/dev/input/eventN" @@ -173,6 +174,11 @@ static int mouseStream = -1; // Mouse device file descriptor static bool mouseReady = false; // Flag to know if mouse is ready static pthread_t mouseThreadId; // Mouse reading thread id +// Touch input variables +static int touchStream = -1; // Touch device file descriptor +static bool touchReady = false; // Flag to know if touch interface is ready +static pthread_t touchThreadId; // Touch reading thread id + // Gamepad input variables static int gamepadStream[MAX_GAMEPADS] = { -1 };// Gamepad device file descriptor static pthread_t gamepadThreadId; // Gamepad reading thread id @@ -298,6 +304,8 @@ static void ProcessKeyboard(void); // Process keyboard even static void RestoreKeyboard(void); // Restore keyboard system static void InitMouse(void); // Mouse initialization (including mouse thread) static void *MouseThread(void *arg); // Mouse reading thread +static void InitTouch(void); // Touch initialization (including touch thread) +static void *TouchThread(void *arg); // RRG Touch interface reading thread static void InitGamepad(void); // Init raw gamepad input static void *GamepadThread(void *arg); // Mouse reading thread #endif @@ -330,6 +338,7 @@ void InitWindow(int width, int height, const char *title) // Init raw input system InitMouse(); // Mouse init InitKeyboard(); // Keyboard init + InitTouch(); // Touch init InitGamepad(); // Gamepad init #endif @@ -470,6 +479,7 @@ void CloseWindow(void) windowShouldClose = true; // Added to force threads to exit when the close window is called pthread_join(mouseThreadId, NULL); + pthread_join(touchThreadId,NULL); pthread_join(gamepadThreadId, NULL); #endif @@ -2803,6 +2813,56 @@ static void *MouseThread(void *arg) return NULL; } +// Touch initialization (including touch thread) +static void InitTouch(void) +{ + if ((touchStream = open(DEFAULT_TOUCH_DEV, O_RDONLY|O_NONBLOCK)) < 0) + { + TraceLog(WARNING, "Touch device could not be opened, no touchscreen available"); + } + else + { + touchReady = true; + + int error = pthread_create(&touchThreadId, NULL, &TouchThread, NULL); + + if (error != 0) TraceLog(WARNING, "Error creating touch input event thread"); + else TraceLog(INFO, "Touch device initialized successfully"); + } +} + +// Touch reading thread. +// This reads from a Virtual Input Event /dev/input/event4 which is +// created by the ts_uinput daemon. This takes, filters and scales +// raw input from the Touchscreen (which appears in /dev/input/event3) +// based on the Calibration date referenced by tslib. +static void *TouchThread(void *arg) +{ + struct input_event ev; + + while (!windowShouldClose) + { + if (read(touchStream, &ev, sizeof(ev)) == (int)sizeof(ev)) + { + + // if pressure > 0 then simulate left mouse button click + if (ev.type == EV_ABS && ev.code == 24 && ev.value == 0) currentMouseState[0] = 0; + if (ev.type == EV_ABS && ev.code == 24 && ev.value > 0) currentMouseState[0] = 1; + // x & y values supplied by event4 have been scaled & de-jittered using tslib calibration data + if (ev.type == EV_ABS && ev.code == 0) mousePosition.x = ev.value; + if (ev.type == EV_ABS && ev.code == 1) mousePosition.y = ev.value; + + if (mousePosition.x < 0) mousePosition.x = 0; + if (mousePosition.y < 0) mousePosition.y = 0; + + if (mousePosition.x > screenWidth) mousePosition.x = screenWidth; + if (mousePosition.y > screenHeight) mousePosition.y = screenHeight; + } + } + return NULL; +} + + // Init gamepad system static void InitGamepad(void) {