wiiuseJ 0.12 work in progress. Added method to force stack type and fixed IR.z value and nunchuk thresholds.

git-svn-id: http://wiiusej.googlecode.com/svn/trunk@144 ae48ae66-6a45-0410-b38e-211266189506
This commit is contained in:
guilhem.duche
2008-05-24 09:43:49 +00:00
parent de3e5d1bbf
commit 0b143596dd
7 changed files with 180 additions and 52 deletions

View File

@@ -309,7 +309,8 @@ public class WiiUseApi {
synchronized native void setIrSensitivity(int id, int level);
/**
* Set how many degrees an angle must change to generate an event for the nunchuk.
* Set how many degrees an angle must change to generate an event for the
* nunchuk.
*
* @param id
* id of the wiimote concerned.
@@ -317,9 +318,10 @@ public class WiiUseApi {
* minimum angle detected by an event.
*/
synchronized native void setNunchukOrientationThreshold(int id, float angle);
/**
* Set how much acceleration must change to generate an event for the nunchuk.
* Set how much acceleration must change to generate an event for the
* nunchuk.
*
* @param id
* id of the wiimote concerned.
@@ -327,8 +329,16 @@ public class WiiUseApi {
* minimum value detected by an event.
*/
synchronized native void setNunchukAccelerationThreshold(int id, int value);
/**
* Force the bluetooth stack type.(useful only for windows)
*
* @param bluetoothStackType
* must be WiiUseApi.WIIUSE_STACK_UNKNOWN or WiiUseApi.WIIUSE_STACK_MS or
* WiiUseApi.WIIUSE_STACK_BLUESOLEIL.
*/
native void windowsSetBluetoothStack(int bluetoothStackType);
/**
* Check for new Events and Get it.
*

View File

@@ -44,9 +44,49 @@ public class WiiUseApiManager extends Thread {
private AtomicBoolean running = new AtomicBoolean(false);
public static int WIIUSE_STACK_UNKNOWN = 0;
public static int WIIUSE_STACK_MS = 1;
public static int WIIUSE_STACK_BLUESOLEIL = 2;
public static WiiUseApiManager getInstance() {
return instance;
}
/**
* Get wiimotes. Load library if necessary. Connect to wiimotes if
* necessary. Start polling if necessary. Return an array with the connected
* wiimotes.
*
* @param nb
* try to connect nb wiimotes.
* @param rumble
* make the connected wiimotes rumble.
*
* @return an array with connected wiimotes or NULL.
*/
public static Wiimote[] getWiimotes(int nb, boolean rumble){
return getWiimotesPrivate(nb, rumble, false, WIIUSE_STACK_UNKNOWN);
}
/**
* Get wiimotes. Load library if necessary. Connect to wiimotes if
* necessary. Start polling if necessary. Return an array with the connected
* wiimotes.
*
* @param nb
* try to connect nb wiimotes.
* @param rumble
* make the connected wiimotes rumble.*
* @param stackType
* the stack type : WiiUseApiManager.WIIUSE_STACK_UNKNOWN or
* WiiUseApiManager.WIIUSE_STACK_MS or
* WiiUseApiManager.WIIUSE_STACK_BLUESOLEIL
*
* @return an array with connected wiimotes or NULL.
*/
public static Wiimote[] getWiimotes(int nb, boolean rumble, int stackType){
return getWiimotesPrivate(nb, rumble, true, stackType);
}
/**
* Get wiimotes. Load library if necessary. Connect to wiimotes if
@@ -56,42 +96,50 @@ public class WiiUseApiManager extends Thread {
* @param nb
* try to connect nb wiimotes.
* @param rumble
* make the connected wiimotes rumble.
* make the connected wiimotes rumble.*
* @param forceStackType
* true if we want to force the stack type.
* @param stackType
* the stack type : WiiUseApiManager.WIIUSE_STACK_UNKNOWN or
* WiiUseApiManager.WIIUSE_STACK_MS or
* WiiUseApiManager.WIIUSE_STACK_BLUESOLEIL
*
* @return an array with connected wiimotes or NULL.
*/
public synchronized static Wiimote[] getWiimotes(int nb, boolean rumble) {
private synchronized static Wiimote[] getWiimotesPrivate(int nb, boolean rumble,
boolean forceStackType, int stackType) {
WiiUseApiManager manager = getInstance();
if (manager.connected <= 0 && !manager.running.get()) {
int nbWiimotes = manager.connectWiimotes(nb, rumble);
int nbWiimotes = manager.connectWiimotes(nb, rumble, forceStackType, stackType);
manager.wiimotes = new Wiimote[nbWiimotes];
for (int i = 0; i < nbWiimotes; i++) {
Wiimote wim = new Wiimote(WiiUseApi.getInstance().getUnId(i),
manager);
manager.wiimotes[i] = wim;
manager.addWiiUseApiListener(wim);
manager.addWiiUseApiListener(wim);
}
//Set leds on wiimote
// Set leds on wiimote
for (Wiimote wiimote : manager.wiimotes) {
int id = wiimote.getId();
short leds = 0;
if (id%4==0){
if (id % 4 == 0) {
wiimote.setLeds(true, true, true, true);
}else if (id%4==1){
} else if (id % 4 == 1) {
wiimote.setLeds(true, false, false, false);
}else if (id%4==2){
} else if (id % 4 == 2) {
wiimote.setLeds(true, true, false, false);
}else if (id%4==3){
} else if (id % 4 == 3) {
wiimote.setLeds(true, true, true, false);
}
}
}
//make the connected wiimotes rumble
// make the connected wiimotes rumble
if (rumble) {
for (Wiimote wiimote : manager.wiimotes) {
for (Wiimote wiimote : manager.wiimotes) {
wiimote.activateRumble();
}
try {
sleep(500);
} catch (InterruptedException e) {
} catch (InterruptedException e) {
}
for (Wiimote wiimote : manager.wiimotes) {
wiimote.deactivateRumble();
@@ -117,12 +165,20 @@ public class WiiUseApiManager extends Thread {
* try to connect nb wiimotes
* @param rumble
* make the connected wiimotes rumble
* @param forceStackType
* true if we want to force the stack type.
* @param stackType
* the stack type : WiiUseApiManager.WIIUSE_STACK_UNKNOWN or
* WiiUseApiManager.WIIUSE_STACK_MS or
* WiiUseApiManager.WIIUSE_STACK_BLUESOLEIL
* @return 0 if nothing connected or the number of wiimotes connected.
*/
private int connectWiimotes(int nb, boolean rumble) {
private int connectWiimotes(int nb, boolean rumble, boolean forceStackType, int stackType) {
if (connected <= 0) {
int nbWiimotesFound;
wiiuse.init(nb);
//force bluetooth stack type ?
if (forceStackType) setBlueToothstackType(stackType);
nbWiimotesFound = wiiuse.find(nb, 3);
connected = wiiuse.connect(nbWiimotesFound);
return connected;
@@ -302,8 +358,8 @@ public class WiiUseApiManager extends Thread {
}
/**
* Set the orientation threshold for the given id.
* (minimum angle between two events)
* Set the orientation threshold for the given id. (minimum angle between
* two events)
*
* @param id
* id of the wiimote.
@@ -315,8 +371,8 @@ public class WiiUseApiManager extends Thread {
}
/**
* Set the acceleration threshold for the given id.
* (minimum angle between two events)
* Set the acceleration threshold for the given id. (minimum angle between
* two events)
*
* @param id
* id of the wiimote.
@@ -443,33 +499,44 @@ public class WiiUseApiManager extends Thread {
public void setIrSensitivity(int id, int level) {
wiiuse.setIrSensitivity(id, level);
}
/**
* Set the nunchuk orientation threshold for the given id.
* (minimum angle between two events)
* Set the nunchuk orientation threshold for the given id. (minimum angle
* between two events)
*
* @param id
* id of the wiimote.
* @param th
* threshold in degrees.
*/
public void setNunchukOrientationThreshold(int id, float th){
public void setNunchukOrientationThreshold(int id, float th) {
wiiuse.setNunchukOrientationThreshold(id, th);
}
/**
* Set the nunchuk acceleration threshold for the given id.
* (minimum angle between two events)
* Set the nunchuk acceleration threshold for the given id. (minimum angle
* between two events)
*
* @param id
* id of the wiimote.
* @param th
* threshold.
*/
public void setNunchukAccelerationThreshold(int id, int th){
public void setNunchukAccelerationThreshold(int id, int th) {
wiiuse.setNunchukAccelerationThreshold(id, th);
}
/**
* Force the bluetooth stack type.(useful only for windows)
*
* @param type
* must be WIIUSE_STACK_UNKNOWN or WIIUSE_STACK_MS or
* WIIUSE_STACK_BLUESOLEIL.
*/
private void setBlueToothstackType(int type) {
}
@Override
public void run() {

View File

@@ -231,26 +231,26 @@ public class Wiimote implements WiiUseApiListener {
public void setVirtualResolution(int x, int y) {
manager.setVirtualResolution(id, x, y);
}
/**
* Set the nunchuk orientation threshold for the given id.
* (minimum angle between two events)
* Set the nunchuk orientation threshold for the given id. (minimum angle
* between two events)
*
* @param th
* threshold in degrees.
*/
public void setNunchukOrientationThreshold(float th){
public void setNunchukOrientationThreshold(float th) {
manager.setNunchukOrientationThreshold(id, th);
}
/**
* Set the nunchuk acceleration threshold for the given id.
* (minimum angle between two events)
* Set the nunchuk acceleration threshold for the given id. (minimum angle
* between two events)
*
* @param th
* threshold.
*/
public void setNunchukAccelerationThreshold(int th){
public void setNunchukAccelerationThreshold(int th) {
manager.setNunchukAccelerationThreshold(id, th);
}
@@ -270,6 +270,21 @@ public class Wiimote implements WiiUseApiListener {
manager.getStatus(id);
}
/**
* Set the normal and expansion handshake timeouts for this wiimote. Normal
* time out is for classic polling. The expansion timeout is used when an
* expansion is detected until the expansion successfully handshakes.
*
* @param normalTimeout
* The timeout in milliseconds for a normal read.
* @param expansionTimeout
* The timeout in millisecondsd to wait for an expansion
* handshake.
*/
public void setTimeout(short normalTimeout, short expansionTimeout) {
manager.setTimeout(id, normalTimeout, expansionTimeout);
}
/**
* Set the IR sensitivity.
*
@@ -297,13 +312,12 @@ public class Wiimote implements WiiUseApiListener {
} else if (e.getEventType() == WiiUseApiEvent.DISCONNECTION_EVENT) {
notifyDisconnectionEventListeners((DisconnectionEvent) e);
} else if (e.getEventType() == WiiUseApiEvent.WIIUSE_NUNCHUK_INSERTED) {
notifyNunchukInsertedEventListeners((NunchukInsertedEvent)e);
notifyNunchukInsertedEventListeners((NunchukInsertedEvent) e);
} else if (e.getEventType() == WiiUseApiEvent.WIIUSE_NUNCHUK_REMOVED) {
notifyNunchukRemovedEventListeners((NunchukRemovedEvent)e);
notifyNunchukRemovedEventListeners((NunchukRemovedEvent) e);
}
/*
* events not managed yet
* || e.getEventType() == WIIUSE_READ_DATA
* events not managed yet || e.getEventType() == WIIUSE_READ_DATA
* WiiUseApiEvent.WIIUSE_CLASSIC_CTRL_INSERTED || e.getEventType() ==
* WiiUseApiEvent.WIIUSE_CLASSIC_CTRL_REMOVED || e.getEventType() ==
* WiiUseApiEvent.WIIUSE_GUITAR_HERO_3_CTRL_INSERTED ||
@@ -359,7 +373,7 @@ public class Wiimote implements WiiUseApiListener {
if (evt.isThereMotionSensingEvent()) {
listener.onMotionSensingEvent(evt.getMotionSensingEvent());
}
if (evt.isThereExpansionEvent()){
if (evt.isThereExpansionEvent()) {
listener.onExpansionEvent(evt.getExpansionEvent());
}
}

View File

@@ -31,7 +31,7 @@ public class IREvent extends GenericEvent {
private short indexPoints = 0;
private int x;
private int y;
private int z;// distance from the sensor bar
private float z;// distance from the sensor bar
private int ax;
private int ay;
private int xVRes;
@@ -82,7 +82,7 @@ public class IREvent extends GenericEvent {
* @param distance
* Pixel Distance between first two dots
*/
public IREvent(int id, int x, int y, int z, int ax, int ay, int xVRes,
public IREvent(int id, int x, int y, float z, int ax, int ay, int xVRes,
int yVRes, int xOffset, int yOffset, short sensorBarPostion,
short screenAsPectRatio, short irSensitivity, float distance) {
super(id);
@@ -154,7 +154,7 @@ public class IREvent extends GenericEvent {
*
* @return the z
*/
public int getZ() {
public float getZ() {
return z;
}

View File

@@ -103,7 +103,7 @@ public class EventsGatherer {
* @param distance
* Pixel Distance between first two dots.
*/
public void prepareIRevent(int x, int y, int z, int ax, int ay, int xVRes,
public void prepareIRevent(int x, int y, float z, int ax, int ay, int xVRes,
int yVRes, int xOffset, int yOffset, short sensorBarPostion,
short screenAsPectRatio, short irSensitivity, float distance) {
genericEvent.prepareIRevent(x, y, z, ax, ay, xVRes, yVRes, xOffset,

View File

@@ -16,7 +16,6 @@
*/
package wiiusej.wiiusejevents.wiiuseapievents;
/**
* Class used to represent a status event. This class is used to know what are
* the settings of the wiimote.
@@ -131,10 +130,12 @@ public class StatusEvent extends WiiUseApiEvent {
public short getLeds() {
return leds;
}
/**
* Tells if the given led is turned on according to the leds status int.
* @param led the int encoding a led.
*
* @param led
* the int encoding a led.
* @return true if the led is turned on false otherwise.
*/
private boolean ledStatusCheck(short led) {
@@ -235,6 +236,42 @@ public class StatusEvent extends WiiUseApiEvent {
return isMotionSensingActive;
}
/**
* Tells if an attachment is connected.
*
* @return true if anything is connected to the wiimote false otherwise.
*/
public boolean isAttachmentConnected() {
return attachment != EXP_NONE;
}
/**
* Tells if a nunchuk is connected.
*
* @return true if a nunchuk is connected to the wiimote false otherwise.
*/
public boolean isNunchukConnected() {
return attachment != EXP_NUNCHUK;
}
/**
* Tells if a classic controller is connected.
*
* @return true if a classic controller is connected to the wiimote false otherwise.
*/
public boolean isClassicControllerConnected() {
return attachment != EXP_CLASSIC;
}
/**
* Tells if a guitar hero controller is connected.
*
* @return true if a guitar hero controllerr is connected to the wiimote false otherwise.
*/
public boolean isGuitarHeroConnected() {
return attachment != EXP_GUITAR_HERO_3;
}
@Override
public String toString() {
String out = "";

View File

@@ -157,7 +157,7 @@ public class WiimoteEvent extends WiiUseApiEvent {
* @param distance
* Pixel Distance between first two dots
*/
public void prepareIRevent(int x, int y, int z, int ax, int ay, int xVRes,
public void prepareIRevent(int x, int y, float z, int ax, int ay, int xVRes,
int yVRes, int xOffset, int yOffset, short sensorBarPostion,
short screenAsPectRatio, short irSensitivity, float distance) {
if (infraredEvent == null) {