1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
|
/* jstest: a joystick button test program
Copyright (C) Sander Pronk, 1998
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <asm/io.h>
#include <time.h>
#define SLEEPVAL 10000
/* wait 10 microseconds */
#define PORT 0x201
/* The joystick IO port */
#define MASKBUT1 0x10
#define MASKBUT2 0x20
#define MASKBUT3 0x40
#define MASKBUT4 0x80
#define MASKALL 0xf0
int ioperm(unsigned long, unsigned long, int);
/* I've supplied the prototype manually, because different
distributions seem to have this at different places */
int main(void)
{
int last=-1;
int new;
int i;
int none;
if (ioperm(PORT,1,1)) /* get permission for joystick port */
{
perror("jstest: ioperm");
fprintf(stderr,"This program needs to be run by root or to be set\n");
fprintf(stderr,"suid ('chmod u+s jstest' as root)\n");
exit(1);
}
if ( setuid(getuid()) || setgid(getgid()) )
{
perror("jstest: removing root permissions");
exit(1);
}
printf("This program displays the pressed joystick buttons for jslaunch.\n\n");
printf("If it doesn't react to the pressing of the joystick buttons\n");
printf("check whether your joystick interface resides on a Plug & Play\n");
printf("card, and if it does, see the README file on how to enable it\n\n");
printf("Joystick Buttons pressed (use this in jslaunch -r):\n\n");
while(1)
{
new=inb(PORT) & MASKALL;
if (new != last )
{
last=new;
none=1;
for(i=0;i<4;i++) /* construct the string */
{
if (! (last & (1 << (4+i))))
{
printf("%d",i+1);
none=0;
}
}
if (none)
printf("(none)");
printf("\n");
}
usleep(SLEEPVAL);
}
}
|