mirror of
https://github.com/glfw/glfw.git
synced 2024-11-29 07:34:35 +00:00
parent
d1a2ec4d20
commit
206f9ca4bc
@ -38,7 +38,6 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
#define NUM_BITS(size) ((size) / 8)
|
|
||||||
#define TEST_BIT(bit, arr) (arr[(bit) / 8] & (1 << ((bit) % 8)))
|
#define TEST_BIT(bit, arr) (arr[(bit) / 8] & (1 << ((bit) % 8)))
|
||||||
|
|
||||||
static void handleKeyEvent(_GLFWjoystick* js, int code, int value)
|
static void handleKeyEvent(_GLFWjoystick* js, int code, int value)
|
||||||
@ -100,8 +99,11 @@ static void pollJoystick(_GLFWjoystick* js)
|
|||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i = ABS_X; i < ABS_MAX; i++)
|
for (i = 0; i < ABS_CNT; i++)
|
||||||
{
|
{
|
||||||
|
if (js->linjs.absMap[i] < 0)
|
||||||
|
continue;
|
||||||
|
|
||||||
struct input_absinfo *info = &js->linjs.absInfo[i];
|
struct input_absinfo *info = &js->linjs.absInfo[i];
|
||||||
|
|
||||||
if (ioctl(js->linjs.fd, EVIOCGABS(i), info) < 0)
|
if (ioctl(js->linjs.fd, EVIOCGABS(i), info) < 0)
|
||||||
@ -117,9 +119,9 @@ static GLFWbool openJoystickDevice(const char* path)
|
|||||||
{
|
{
|
||||||
int jid, fd, i;
|
int jid, fd, i;
|
||||||
char name[256] = "";
|
char name[256] = "";
|
||||||
char evBits[NUM_BITS(EV_MAX)] = {0};
|
char evBits[(EV_CNT + 7) / 8] = {0};
|
||||||
char keyBits[NUM_BITS(KEY_MAX)] = {0};
|
char keyBits[(KEY_CNT + 7) / 8] = {0};
|
||||||
char absBits[NUM_BITS(ABS_MAX)] = {0};
|
char absBits[(ABS_CNT + 7) / 8] = {0};
|
||||||
int axisCount = 0;
|
int axisCount = 0;
|
||||||
int buttonCount = 0;
|
int buttonCount = 0;
|
||||||
int hatCount = 0;
|
int hatCount = 0;
|
||||||
@ -151,7 +153,7 @@ static GLFWbool openJoystickDevice(const char* path)
|
|||||||
if (ioctl(fd, EVIOCGNAME(sizeof(name)), name) < 0)
|
if (ioctl(fd, EVIOCGNAME(sizeof(name)), name) < 0)
|
||||||
strncpy(name, "Unknown", sizeof(name));
|
strncpy(name, "Unknown", sizeof(name));
|
||||||
|
|
||||||
for (i = BTN_MISC; i < KEY_MAX; i++)
|
for (i = BTN_MISC; i < KEY_CNT; i++)
|
||||||
{
|
{
|
||||||
if (!TEST_BIT(i, keyBits))
|
if (!TEST_BIT(i, keyBits))
|
||||||
continue;
|
continue;
|
||||||
@ -159,8 +161,9 @@ static GLFWbool openJoystickDevice(const char* path)
|
|||||||
linjs.keyMap[i] = buttonCount++;
|
linjs.keyMap[i] = buttonCount++;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = ABS_X; i < ABS_MAX; i++)
|
for (i = 0; i < ABS_CNT; i++)
|
||||||
{
|
{
|
||||||
|
linjs.absMap[i] = -1;
|
||||||
if (!TEST_BIT(i, absBits))
|
if (!TEST_BIT(i, absBits))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
@ -31,18 +31,16 @@
|
|||||||
#define _GLFW_PLATFORM_JOYSTICK_STATE _GLFWjoystickLinux linjs
|
#define _GLFW_PLATFORM_JOYSTICK_STATE _GLFWjoystickLinux linjs
|
||||||
#define _GLFW_PLATFORM_LIBRARY_JOYSTICK_STATE _GLFWlibraryLinux linjs
|
#define _GLFW_PLATFORM_LIBRARY_JOYSTICK_STATE _GLFWlibraryLinux linjs
|
||||||
|
|
||||||
#define HATS_MAX ((ABS_HAT3Y - ABS_HAT0X) / 2)
|
|
||||||
|
|
||||||
// Linux-specific joystick data
|
// Linux-specific joystick data
|
||||||
//
|
//
|
||||||
typedef struct _GLFWjoystickLinux
|
typedef struct _GLFWjoystickLinux
|
||||||
{
|
{
|
||||||
int fd;
|
int fd;
|
||||||
char path[PATH_MAX];
|
char path[PATH_MAX];
|
||||||
int keyMap[KEY_MAX];
|
int keyMap[KEY_CNT];
|
||||||
int absMap[ABS_MAX];
|
int absMap[ABS_CNT];
|
||||||
struct input_absinfo absInfo[ABS_MAX];
|
struct input_absinfo absInfo[ABS_CNT];
|
||||||
int hats[HATS_MAX][2];
|
int hats[4][2];
|
||||||
} _GLFWjoystickLinux;
|
} _GLFWjoystickLinux;
|
||||||
|
|
||||||
// Linux-specific joystick API data
|
// Linux-specific joystick API data
|
||||||
|
Loading…
Reference in New Issue
Block a user