mirror of https://github.com/stella-emu/stella.git
Various fixes to 'evdev-joystick'
- Added extra udev rules from Tom Hafner (2600-daptor) - Make code compile without any warnings under maximum clang settings
This commit is contained in:
parent
25eb9cd4ab
commit
0c8478d842
|
@ -6,3 +6,21 @@ KERNEL=="event*", NAME="input/%k", ATTRS{idVendor}=="04d8", ATTRS{idProduct}=="f
|
||||||
|
|
||||||
# 2600-daptor II (Microchip Technology Inc. / 2600-daptor II)
|
# 2600-daptor II (Microchip Technology Inc. / 2600-daptor II)
|
||||||
KERNEL=="event*", NAME="input/%k", ATTRS{idVendor}=="04d8", ATTRS{idProduct}=="f947", ACTION=="add", RUN+="/usr/local/bin/evdev-joystick --e /dev/input/%k --d 0"
|
KERNEL=="event*", NAME="input/%k", ATTRS{idVendor}=="04d8", ATTRS{idProduct}=="f947", ACTION=="add", RUN+="/usr/local/bin/evdev-joystick --e /dev/input/%k --d 0"
|
||||||
|
|
||||||
|
# Astro-daptor (Microchip Technology Inc. / Astro-daptor)
|
||||||
|
KERNEL=="event*", NAME="input/%k", ATTRS{idVendor}=="04d8", ATTRS{idProduct}=="f809", ACTION=="add", RUN+="/usr/local/bin/evdev-joystick --e /dev/input/%k --d 0"
|
||||||
|
|
||||||
|
# 5200-daptor (Microchip Technology Inc. / 5200-daptor)
|
||||||
|
KERNEL=="event*", NAME="input/%k", ATTRS{idVendor}=="04d8", ATTRS{idProduct}=="f6ec", ACTION=="add", RUN+="/usr/local/bin/evdev-joystick --e /dev/input/%k --d 0"
|
||||||
|
|
||||||
|
# 2600-daptor D9 (Microchip Technology Inc. / 2600-daptor D9)
|
||||||
|
KERNEL=="event*", NAME="input/%k", ATTRS{idVendor}=="04d8", ATTRS{idProduct}=="f6eb", ACTION=="add", RUN+="/usr/local/bin/evdev-joystick --e /dev/input/%k --d 0"
|
||||||
|
|
||||||
|
# Ultimate 2600-daptor (Microchip Technology Inc. / Ultimate 2600-daptor)
|
||||||
|
KERNEL=="event*", NAME="input/%k", ATTRS{idVendor}=="04d8", ATTRS{idProduct}=="d4e2", ACTION=="add", RUN+="/usr/local/bin/evdev-joystick --e /dev/input/%k --d 0"
|
||||||
|
|
||||||
|
# Ultimate Flashback (Microchip Technology Inc. / Ultimate Flashback)
|
||||||
|
KERNEL=="event*", NAME="input/%k", ATTRS{idVendor}=="04d8", ATTRS{idProduct}=="edec", ACTION=="add", RUN+="/usr/local/bin/evdev-joystick --e /dev/input/%k --d 0"
|
||||||
|
|
||||||
|
# 2600=daptor D9 (Microchip Technology Inc. / 2600=daptor D9)
|
||||||
|
KERNEL=="event*", NAME="input/%k", ATTRS{idVendor}=="04d8", ATTRS{idProduct}=="edd9", ACTION=="add", RUN+="/usr/local/bin/evdev-joystick --e /dev/input/%k --d 0"
|
||||||
|
|
|
@ -9,9 +9,9 @@ It is developed by Stephen Anthony, and released under the GPL/v2.
|
||||||
evdev-joystick is used to set the deadzone for Linux 'evdev' joystick devices.
|
evdev-joystick is used to set the deadzone for Linux 'evdev' joystick devices.
|
||||||
Currently, other than G25manage there is no other standalone program available
|
Currently, other than G25manage there is no other standalone program available
|
||||||
to perform such calibration. This program was originally developed for Stella
|
to perform such calibration. This program was originally developed for Stella
|
||||||
(https://stella-emu.github.io), an Atari 2600 emulator, and as such much of this document
|
(https://stella-emu.github.io), an Atari 2600 emulator, and as such much of
|
||||||
refers to Stella. The program itself can be used to calibrate any joystick
|
this document refers to Stella. The program itself can be used to calibrate
|
||||||
for any application, though, and is not specific to Stella.
|
any joystick for any application, though, and is not specific to Stella.
|
||||||
|
|
||||||
|
|
||||||
Short Explanation (Stella users with Stelladaptor, 2600-daptor, etc.)
|
Short Explanation (Stella users with Stelladaptor, 2600-daptor, etc.)
|
||||||
|
|
|
@ -32,11 +32,19 @@
|
||||||
*/
|
*/
|
||||||
#define test_bit(bit, array) (array[bit/8] & (1<<(bit%8)))
|
#define test_bit(bit, array) (array[bit/8] & (1<<(bit%8)))
|
||||||
|
|
||||||
// The default location for evdev devices in Linux
|
/* The default location for evdev devices in Linux */
|
||||||
#define EVDEV_DIR "/dev/input/by-id/"
|
#define EVDEV_DIR "/dev/input/by-id/"
|
||||||
|
|
||||||
|
/* Function signatures; see actual functions for documentation */
|
||||||
|
void help(void);
|
||||||
|
void listDevices(void);
|
||||||
|
void printAxisType(int i);
|
||||||
|
int showCalibration(const char* const evdev);
|
||||||
|
int setDeadzoneAndFuzz(const char* const evdev, int axisindex,
|
||||||
|
__s32 deadzonevalue, __s32 fuzzvalue);
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
void help()
|
void help(void)
|
||||||
{
|
{
|
||||||
printf("%s","Usage:\n\n"
|
printf("%s","Usage:\n\n"
|
||||||
" --help, --h The message you're now reading\n"
|
" --help, --h The message you're now reading\n"
|
||||||
|
@ -72,7 +80,7 @@ void help()
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
void listDevices()
|
void listDevices(void)
|
||||||
{
|
{
|
||||||
DIR* dirp = opendir(EVDEV_DIR);
|
DIR* dirp = opendir(EVDEV_DIR);
|
||||||
struct dirent* dp;
|
struct dirent* dp;
|
||||||
|
@ -81,11 +89,11 @@ void listDevices()
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// Loop over dir entries using readdir
|
// Loop over dir entries using readdir
|
||||||
int len = strlen("event-joystick");
|
size_t len = strlen("event-joystick");
|
||||||
while((dp = readdir(dirp)) != NULL)
|
while((dp = readdir(dirp)) != NULL)
|
||||||
{
|
{
|
||||||
// Only select names that end in 'event-joystick'
|
// Only select names that end in 'event-joystick'
|
||||||
int devlen = strlen(dp->d_name);
|
size_t devlen = strlen(dp->d_name);
|
||||||
if(devlen >= len)
|
if(devlen >= len)
|
||||||
{
|
{
|
||||||
const char* const start = dp->d_name + devlen - len;
|
const char* const start = dp->d_name + devlen - len;
|
||||||
|
@ -129,11 +137,11 @@ void printAxisType(int i)
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
int showCalibration(const char* evdev)
|
int showCalibration(const char* const evdev)
|
||||||
{
|
{
|
||||||
int fd = -1, axisindex;
|
int fd = -1, axisindex;
|
||||||
uint8_t abs_bitmask[ABS_MAX/8 + 1];
|
uint8_t abs_bitmask[ABS_MAX/8 + 1];
|
||||||
float percent_deadzone;
|
double percent_deadzone;
|
||||||
struct input_absinfo abs_features;
|
struct input_absinfo abs_features;
|
||||||
|
|
||||||
if((fd = open(evdev, O_RDONLY)) < 0)
|
if((fd = open(evdev, O_RDONLY)) < 0)
|
||||||
|
@ -159,7 +167,7 @@ int showCalibration(const char* evdev)
|
||||||
if(ioctl(fd, EVIOCGABS(axisindex), &abs_features))
|
if(ioctl(fd, EVIOCGABS(axisindex), &abs_features))
|
||||||
perror("evdev EVIOCGABS ioctl");
|
perror("evdev EVIOCGABS ioctl");
|
||||||
|
|
||||||
percent_deadzone = (float)abs_features.flat * 100 / (float)abs_features.maximum;
|
percent_deadzone = (double)(abs_features.flat * 100.0 / abs_features.maximum);
|
||||||
printf("(min: %d, max: %d, flatness: %d (=%.2f%%), fuzz: %d)\n",
|
printf("(min: %d, max: %d, flatness: %d (=%.2f%%), fuzz: %d)\n",
|
||||||
abs_features.minimum, abs_features.maximum, abs_features.flat,
|
abs_features.minimum, abs_features.maximum, abs_features.flat,
|
||||||
percent_deadzone, abs_features.fuzz);
|
percent_deadzone, abs_features.fuzz);
|
||||||
|
@ -171,12 +179,12 @@ int showCalibration(const char* evdev)
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
int setDeadzoneAndFuzz(const char* evdev, int axisindex,
|
int setDeadzoneAndFuzz(const char* const evdev, int axisindex,
|
||||||
__s32 deadzonevalue, __s32 fuzzvalue)
|
__s32 deadzonevalue, __s32 fuzzvalue)
|
||||||
{
|
{
|
||||||
int fd = -1;
|
int fd = -1;
|
||||||
uint8_t abs_bitmask[ABS_MAX/8 + 1];
|
uint8_t abs_bitmask[ABS_MAX/8 + 1];
|
||||||
float percent_deadzone;
|
double percent_deadzone;
|
||||||
struct input_absinfo abs_features;
|
struct input_absinfo abs_features;
|
||||||
|
|
||||||
if ((fd = open(evdev, O_RDONLY)) < 0)
|
if ((fd = open(evdev, O_RDONLY)) < 0)
|
||||||
|
@ -248,7 +256,7 @@ int setDeadzoneAndFuzz(const char* evdev, int axisindex,
|
||||||
perror("evdev EVIOCGABS ioctl");
|
perror("evdev EVIOCGABS ioctl");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
percent_deadzone = (float)abs_features.flat * 100 / (float)abs_features.maximum;
|
percent_deadzone = (double)(abs_features.flat * 100.0 / abs_features.maximum);
|
||||||
printf(" (min: %d, max: %d, flatness: %d (=%.2f%%), fuzz: %d)\n",
|
printf(" (min: %d, max: %d, flatness: %d (=%.2f%%), fuzz: %d)\n",
|
||||||
abs_features.minimum, abs_features.maximum, abs_features.flat,
|
abs_features.minimum, abs_features.maximum, abs_features.flat,
|
||||||
percent_deadzone, abs_features.fuzz);
|
percent_deadzone, abs_features.fuzz);
|
||||||
|
|
Loading…
Reference in New Issue