created mirror
This commit is contained in:
91
Modules/joystick/LinuxJoystick.java
Normal file
91
Modules/joystick/LinuxJoystick.java
Normal file
@@ -0,0 +1,91 @@
|
||||
/*
|
||||
ZZMbox.java
|
||||
*
|
||||
* Copyright (c) 2000, Tuomas Lukka
|
||||
*
|
||||
* You may use and distribute under the terms of either the GNU Lesser
|
||||
* General Public License, either version 2 of the license or,
|
||||
* at your choice, any later version. Alternatively, you may use and
|
||||
* distribute under the terms of the XPL.
|
||||
*
|
||||
* See the LICENSE.lgpl and LICENSE.xpl files for the specific terms of
|
||||
* the licenses.
|
||||
*
|
||||
* This software 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 README
|
||||
* file for more details.
|
||||
*
|
||||
*/
|
||||
/*
|
||||
* Written by Tuomas Lukka
|
||||
*/
|
||||
package org.gzigzag;
|
||||
import java.util.*;
|
||||
import java.io.*;
|
||||
|
||||
/** A simple class to use the Linux joystick API.
|
||||
* A separate thread is used to read in the blocking mode from the
|
||||
* joystick and the appropriate callbacks are made.
|
||||
*/
|
||||
|
||||
public class LinuxJoystick implements Runnable {
|
||||
public static final String rcsid = "$Id: LinuxJoystick.java,v 1.3 2000/09/19 10:32:03 ajk Exp $";
|
||||
public static final boolean dbg = true;
|
||||
static final void p(String s) { if(dbg) System.out.println(s); }
|
||||
static final void pa(String s) { System.out.println(s); }
|
||||
|
||||
FileInputStream in;
|
||||
Thread t = new Thread(this);
|
||||
|
||||
public LinuxJoystick(File f) {
|
||||
try {
|
||||
in = new FileInputStream(f);
|
||||
t.start();
|
||||
} catch(Exception e) {
|
||||
throw new Error("Couldn't open joystick");
|
||||
}
|
||||
}
|
||||
|
||||
public synchronized void run() {
|
||||
try {
|
||||
byte[] bpacket = new byte[8];
|
||||
int[] packet = new int[8];
|
||||
while(true) {
|
||||
int n = in.read(bpacket);
|
||||
p("Read "+n);
|
||||
for(int i=0; i<8; i++) {
|
||||
packet[i] = bpacket[i];
|
||||
if(packet[i] < 0) packet[i] += 256;
|
||||
}
|
||||
p("R: "+
|
||||
packet[0]+" "+
|
||||
packet[1]+" "+
|
||||
packet[2]+" "+
|
||||
packet[3]+" "+
|
||||
packet[4]+" "+
|
||||
packet[5]+" "+
|
||||
packet[6]+" "+
|
||||
packet[7]);
|
||||
|
||||
long ms = packet[0] + (packet[1]<<8) + (packet[2]<<16)
|
||||
+ (packet[3]<<24);
|
||||
int value = packet[4]+((packet[5]&0x7F)<<8);
|
||||
if((packet[5]&0x80)!=0)
|
||||
value -= 32768;
|
||||
int type = packet[6];
|
||||
int num = packet[7];
|
||||
|
||||
p("EV: "+ms+" "+value+" "+type+" "+num);
|
||||
}
|
||||
} catch(Exception e) {
|
||||
throw new Error("Couldn't open joystick");
|
||||
}
|
||||
}
|
||||
|
||||
/** For testing. */
|
||||
static public void main(String argv[]) {
|
||||
LinuxJoystick j = new LinuxJoystick(new File("/dev/js0"));
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user