|
|
@ -221,33 +221,33 @@ |
|
|
|
#include <android/window.h> // Defines AWINDOW_FLAG_FULLSCREEN and others |
|
|
|
#include <android_native_app_glue.h> // Defines basic app state struct and manages activity |
|
|
|
|
|
|
|
#include <EGL/egl.h> // Khronos EGL library - Native platform display device control functions |
|
|
|
#include <GLES2/gl2.h> // Khronos OpenGL ES 2.0 library |
|
|
|
#include <EGL/egl.h> // Khronos EGL library - Native platform display device control functions |
|
|
|
#include <GLES2/gl2.h> // Khronos OpenGL ES 2.0 library |
|
|
|
#endif |
|
|
|
|
|
|
|
#if defined(PLATFORM_RPI) |
|
|
|
#include <fcntl.h> // POSIX file control definitions - open(), creat(), fcntl() |
|
|
|
#include <unistd.h> // POSIX standard function definitions - read(), close(), STDIN_FILENO |
|
|
|
#include <termios.h> // POSIX terminal control definitions - tcgetattr(), tcsetattr() |
|
|
|
#include <pthread.h> // POSIX threads management (inputs reading) |
|
|
|
#include <dirent.h> // POSIX directory browsing |
|
|
|
#include <fcntl.h> // POSIX file control definitions - open(), creat(), fcntl() |
|
|
|
#include <unistd.h> // POSIX standard function definitions - read(), close(), STDIN_FILENO |
|
|
|
#include <termios.h> // POSIX terminal control definitions - tcgetattr(), tcsetattr() |
|
|
|
#include <pthread.h> // POSIX threads management (inputs reading) |
|
|
|
#include <dirent.h> // POSIX directory browsing |
|
|
|
|
|
|
|
#include <sys/ioctl.h> // UNIX System call for device-specific input/output operations - ioctl() |
|
|
|
#include <linux/kd.h> // Linux: KDSKBMODE, K_MEDIUMRAM constants definition |
|
|
|
#include <linux/input.h> // Linux: Keycodes constants definition (KEY_A, ...) |
|
|
|
#include <linux/joystick.h> // Linux: Joystick support library |
|
|
|
#include <sys/ioctl.h> // UNIX System call for device-specific input/output operations - ioctl() |
|
|
|
#include <linux/kd.h> // Linux: KDSKBMODE, K_MEDIUMRAM constants definition |
|
|
|
#include <linux/input.h> // Linux: Keycodes constants definition (KEY_A, ...) |
|
|
|
#include <linux/joystick.h> // Linux: Joystick support library |
|
|
|
|
|
|
|
#include "bcm_host.h" // Raspberry Pi VideoCore IV access functions |
|
|
|
#include "bcm_host.h" // Raspberry Pi VideoCore IV access functions |
|
|
|
|
|
|
|
#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 |
|
|
|
#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 |
|
|
|
#endif |
|
|
|
|
|
|
|
#if defined(PLATFORM_UWP) |
|
|
|
#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 |
|
|
|
#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 |
|
|
|
#endif |
|
|
|
|
|
|
|
#if defined(PLATFORM_WEB) |
|
|
@ -299,22 +299,22 @@ |
|
|
|
//---------------------------------------------------------------------------------- |
|
|
|
#if defined(PLATFORM_RPI) |
|
|
|
typedef struct { |
|
|
|
pthread_t threadId; // Event reading thread id |
|
|
|
int fd; // File descriptor to the device it is assigned to |
|
|
|
int eventNum; // Number of 'event<N>' device |
|
|
|
Rectangle absRange; // Range of values for absolute pointing devices (touchscreens) |
|
|
|
int touchSlot; // Hold the touch slot number of the currently being sent multitouch block |
|
|
|
bool isMouse; // True if device supports relative X Y movements |
|
|
|
bool isTouch; // True if device supports absolute X Y movements and has BTN_TOUCH |
|
|
|
bool isMultitouch; // True if device supports multiple absolute movevents and has BTN_TOUCH |
|
|
|
bool isKeyboard; // True if device has letter keycodes |
|
|
|
bool isGamepad; // True if device has gamepad buttons |
|
|
|
pthread_t threadId; // Event reading thread id |
|
|
|
int fd; // File descriptor to the device it is assigned to |
|
|
|
int eventNum; // Number of 'event<N>' device |
|
|
|
Rectangle absRange; // Range of values for absolute pointing devices (touchscreens) |
|
|
|
int touchSlot; // Hold the touch slot number of the currently being sent multitouch block |
|
|
|
bool isMouse; // True if device supports relative X Y movements |
|
|
|
bool isTouch; // True if device supports absolute X Y movements and has BTN_TOUCH |
|
|
|
bool isMultitouch; // True if device supports multiple absolute movevents and has BTN_TOUCH |
|
|
|
bool isKeyboard; // True if device has letter keycodes |
|
|
|
bool isGamepad; // True if device has gamepad buttons |
|
|
|
} InputEventWorker; |
|
|
|
|
|
|
|
typedef struct{ |
|
|
|
int Contents[8]; |
|
|
|
char Head; |
|
|
|
char Tail; |
|
|
|
typedef struct { |
|
|
|
int contents[8]; // Key events FIFO contents (8 positions) |
|
|
|
char head; // Key events FIFO head position |
|
|
|
char tail; // Key events FIFO tail position |
|
|
|
} KeyEventFifo; |
|
|
|
#endif |
|
|
|
|
|
|
@ -2198,7 +2198,7 @@ void SaveStorageValue(int position, int value) |
|
|
|
|
|
|
|
int dataSize = 0; |
|
|
|
unsigned char *fileData = LoadFileData(path, &dataSize); |
|
|
|
|
|
|
|
|
|
|
|
if (fileData != NULL) |
|
|
|
{ |
|
|
|
if (dataSize <= (position*sizeof(int))) |
|
|
@ -2215,7 +2215,7 @@ void SaveStorageValue(int position, int value) |
|
|
|
int *dataPtr = (int *)fileData; |
|
|
|
dataPtr[position] = value; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
SaveFileData(path, fileData, dataSize); |
|
|
|
RL_FREE(fileData); |
|
|
|
} |
|
|
@ -2225,7 +2225,7 @@ void SaveStorageValue(int position, int value) |
|
|
|
fileData = (unsigned char *)RL_MALLOC(dataSize); |
|
|
|
int *dataPtr = (int *)fileData; |
|
|
|
dataPtr[position] = value; |
|
|
|
|
|
|
|
|
|
|
|
SaveFileData(path, fileData, dataSize); |
|
|
|
RL_FREE(fileData); |
|
|
|
} |
|
|
@ -2249,7 +2249,7 @@ int LoadStorageValue(int position) |
|
|
|
|
|
|
|
int dataSize = 0; |
|
|
|
unsigned char *fileData = LoadFileData(path, &dataSize); |
|
|
|
|
|
|
|
|
|
|
|
if (fileData != NULL) |
|
|
|
{ |
|
|
|
if (dataSize < (position*4)) TRACELOG(LOG_WARNING, "Storage position could not be found"); |
|
|
@ -2258,7 +2258,7 @@ int LoadStorageValue(int position) |
|
|
|
int *dataPtr = (int *)fileData; |
|
|
|
value = dataPtr[position]; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
RL_FREE(fileData); |
|
|
|
} |
|
|
|
#endif |
|
|
@ -3598,12 +3598,12 @@ static void PollInputEvents(void) |
|
|
|
for (int i = 0; i < 512; i++)CORE.Input.Keyboard.previousKeyState[i] = CORE.Input.Keyboard.currentKeyState[i]; |
|
|
|
|
|
|
|
// Grab a keypress from the evdev fifo if avalable |
|
|
|
if (CORE.Input.Keyboard.lastKeyPressed.Head != CORE.Input.Keyboard.lastKeyPressed.Tail) |
|
|
|
if (CORE.Input.Keyboard.lastKeyPressed.head != CORE.Input.Keyboard.lastKeyPressed.tail) |
|
|
|
{ |
|
|
|
CORE.Input.Keyboard.keyPressedQueue[CORE.Input.Keyboard.keyPressedQueueCount] = CORE.Input.Keyboard.lastKeyPressed.Contents[CORE.Input.Keyboard.lastKeyPressed.Tail]; // Read the key from the buffer |
|
|
|
CORE.Input.Keyboard.keyPressedQueue[CORE.Input.Keyboard.keyPressedQueueCount] = CORE.Input.Keyboard.lastKeyPressed.contents[CORE.Input.Keyboard.lastKeyPressed.tail]; // Read the key from the buffer |
|
|
|
CORE.Input.Keyboard.keyPressedQueueCount++; |
|
|
|
|
|
|
|
CORE.Input.Keyboard.lastKeyPressed.Tail = (CORE.Input.Keyboard.lastKeyPressed.Tail + 1) & 0x07; // Increment the tail pointer forwards and binary wraparound after 7 (fifo is 8 elements long) |
|
|
|
CORE.Input.Keyboard.lastKeyPressed.tail = (CORE.Input.Keyboard.lastKeyPressed.tail + 1) & 0x07; // Increment the tail pointer forwards and binary wraparound after 7 (fifo is 8 elements long) |
|
|
|
} |
|
|
|
|
|
|
|
// Register previous mouse states |
|
|
@ -4767,8 +4767,8 @@ static void InitEvdevInput(void) |
|
|
|
} |
|
|
|
|
|
|
|
// Reset keypress buffer |
|
|
|
CORE.Input.Keyboard.lastKeyPressed.Head = 0; |
|
|
|
CORE.Input.Keyboard.lastKeyPressed.Tail = 0; |
|
|
|
CORE.Input.Keyboard.lastKeyPressed.head = 0; |
|
|
|
CORE.Input.Keyboard.lastKeyPressed.tail = 0; |
|
|
|
|
|
|
|
// Reset keyboard key state |
|
|
|
for (int i = 0; i < 512; i++) CORE.Input.Keyboard.currentKeyState[i] = 0; |
|
|
@ -5131,8 +5131,8 @@ static void *EventThread(void *arg) |
|
|
|
if (event.value > 0) |
|
|
|
{ |
|
|
|
// Add the key int the fifo |
|
|
|
CORE.Input.Keyboard.lastKeyPressed.Contents[CORE.Input.Keyboard.lastKeyPressed.Head] = keycode; // Put the data at the front of the fifo snake |
|
|
|
CORE.Input.Keyboard.lastKeyPressed.Head = (CORE.Input.Keyboard.lastKeyPressed.Head + 1) & 0x07; // Increment the head pointer forwards and binary wraparound after 7 (fifo is 8 elements long) |
|
|
|
CORE.Input.Keyboard.lastKeyPressed.contents[CORE.Input.Keyboard.lastKeyPressed.head] = keycode; // Put the data at the front of the fifo snake |
|
|
|
CORE.Input.Keyboard.lastKeyPressed.head = (CORE.Input.Keyboard.lastKeyPressed.head + 1) & 0x07; // Increment the head pointer forwards and binary wraparound after 7 (fifo is 8 elements long) |
|
|
|
// TODO: This fifo is not fully threadsafe with multiple writers, so multiple keyboards hitting a key at the exact same time could miss a key (double write to head before it was incremented) |
|
|
|
} |
|
|
|
*/ |
|
|
|