diff --git a/WiiUseJ/src/wiiusej/wiiusejevents/ButtonsEvent.java b/WiiUseJ/src/wiiusej/wiiusejevents/ButtonsEvent.java
new file mode 100644
index 0000000..2a3066c
--- /dev/null
+++ b/WiiUseJ/src/wiiusej/wiiusejevents/ButtonsEvent.java
@@ -0,0 +1,119 @@
+/**
+ * This file is part of WiiuseJ.
+ *
+ * WiiuseJ 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 3 of the License, or
+ * (at your option) any later version.
+ *
+ * WiiuseJ 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 WiiuseJ. If not, see .
+ */
+package wiiusej.wiiusejevents;
+
+/**
+ * Class which represents a buttons event.
+ * @author guiguito
+ */
+public abstract class ButtonsEvent extends GenericEvent{
+
+ /* Buttons */
+ private short buttonsJustPressed = 0;
+ private short buttonsJustReleased = 0;
+ private short buttonsHeld = 0;
+
+ /**
+ * Constructor of the button Event.
+ * @param id id of the wiimote concerned.
+ * @param buttonsJustPressed buttons just pressed.
+ * @param buttonsJustReleased buttons just released.
+ * @param buttonsHeld buttons just held.
+ */
+ public ButtonsEvent(int id, short buttonsJustPressed,
+ short buttonsJustReleased, short buttonsHeld){
+ super(id);
+ setAllButtons(buttonsJustPressed, buttonsJustReleased, buttonsHeld);
+ }
+
+ /**
+ * Set all buttons in one method.
+ *
+ * @param buttonsJustPressed
+ * @param buttonsJustReleased
+ * @param buttonsHeld
+ */
+ private void setAllButtons(short buttonsJustPressed,
+ short buttonsJustReleased, short buttonsHeld) {
+ this.buttonsJustPressed = buttonsJustPressed;
+ this.buttonsJustReleased = buttonsJustReleased;
+ this.buttonsHeld = buttonsHeld;
+ }
+
+ /**
+ * Get the short storing the buttons just pressed
+ *
+ * @return the short storing the buttons just pressed
+ */
+ public short getButtonsJustPressed() {
+ return buttonsJustPressed;
+ }
+
+ /**
+ * Get the short storing the buttons just released
+ *
+ * @return the short storing the buttons just released
+ */
+ public short getButtonsJustReleased() {
+ return buttonsJustReleased;
+ }
+
+ /**
+ * get the short storing the buttons held
+ *
+ * @return the short storing the buttons held
+ */
+ public short getButtonsHeld() {
+ return buttonsHeld;
+ }
+
+ /** **************** BUTTONS Methods ***************** */
+ /* generic button functions */
+
+ protected boolean buttonTest(short buttonBitsDefinition, short buttons) {
+ return (buttons & buttonBitsDefinition) == buttonBitsDefinition;
+ }
+
+ protected boolean isButtonJustPressed(short buttonBitsDefinition) {
+ return buttonTest(buttonBitsDefinition, buttonsJustPressed)
+ && !isButtonHeld(buttonBitsDefinition);
+ }
+
+ protected boolean isButtonJustReleased(short buttonBitsDefinition) {
+ return buttonTest(buttonBitsDefinition, buttonsJustReleased);
+ }
+
+ protected boolean isButtonHeld(short buttonBitsDefinition) {
+ return buttonTest(buttonBitsDefinition, buttonsHeld);
+ }
+
+ protected boolean isButtonPressed(short buttonBitsDefinition) {
+ return isButtonHeld(buttonBitsDefinition)||isButtonJustPressed(buttonBitsDefinition);
+ }
+
+ @Override
+ public String toString() {
+ String out = "";
+ /* Display buttons */
+ out += "/******** Buttons ********/\n";
+ out += "--- Buttons just pressed : " + buttonsJustPressed + "\n";
+ out += "--- Buttons just released : " + buttonsJustReleased + "\n";
+ out += "--- Buttons held : " + buttonsHeld + "\n";
+ return out;
+ }
+
+}
diff --git a/WiiUseJ/src/wiiusej/wiiusejevents/DisconnectionEvent.java b/WiiUseJ/src/wiiusej/wiiusejevents/DisconnectionEvent.java
new file mode 100644
index 0000000..1868cb3
--- /dev/null
+++ b/WiiUseJ/src/wiiusej/wiiusejevents/DisconnectionEvent.java
@@ -0,0 +1,43 @@
+/**
+ * This file is part of WiiuseJ.
+ *
+ * WiiuseJ 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 3 of the License, or
+ * (at your option) any later version.
+ *
+ * WiiuseJ 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 WiiuseJ. If not, see .
+ */
+package wiiusej.wiiusejevents;
+
+/**
+ * Class representing a disconnection event.
+ * @author guiguito
+ */
+public class DisconnectionEvent extends WiiUseApiEvent {
+
+ /**
+ * Construct the DisconnectionEvent setting up the id.
+ *
+ * @param id
+ * the Wiimote id
+ */
+ public DisconnectionEvent(int id) {
+ super(id,WiiUseApiEvent.DISCONNECTION_EVENT);
+ }
+
+ @Override
+ public String toString() {
+ String out = "";
+ /* Status */
+ out += "/*********** DISCONNECTION EVENT : WIIMOTE ID :" + super.getWiimoteId() + " ********/\n";
+ return out;
+ }
+
+}
diff --git a/WiiUseJ/src/wiiusej/wiiusejevents/EventsGatherer.java b/WiiUseJ/src/wiiusej/wiiusejevents/EventsGatherer.java
new file mode 100644
index 0000000..d1f4d7a
--- /dev/null
+++ b/WiiUseJ/src/wiiusej/wiiusejevents/EventsGatherer.java
@@ -0,0 +1,279 @@
+/**
+ * This file is part of WiiuseJ.
+ *
+ * WiiuseJ 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 3 of the License, or
+ * (at your option) any later version.
+ *
+ * WiiuseJ 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 WiiuseJ. If not, see .
+ */
+package wiiusej.wiiusejevents;
+
+import wiiusej.wiiusejevents.DisconnectionEvent;
+import wiiusej.wiiusejevents.NunchukInsertedEvent;
+import wiiusej.wiiusejevents.NunchukRemovedEvent;
+import wiiusej.wiiusejevents.StatusEvent;
+import wiiusej.wiiusejevents.WiiUseApiEvent;
+import wiiusej.wiiusejevents.WiimoteEvent;
+
+/**
+ * This class is used to gather events during a call to the Wiiuse API.
+ *
+ * @author guiguito
+ */
+public class EventsGatherer {
+
+ private WiiUseApiEvent[] events;
+ private int index = 0;
+ private WiimoteEvent genericEvent = null;
+
+ /**
+ * Create EventsGatherer.
+ *
+ * @param nbWiimotes
+ * nb wiimotes (nb a of events possible in a call to Wiiuse API)
+ */
+ public EventsGatherer(int nbWiimotes) {
+ events = new WiiUseApiEvent[nbWiimotes];
+ }
+
+ /**
+ * Add an event to the array.
+ *
+ * @param e
+ * the event to add.
+ */
+ private void addEvent(WiiUseApiEvent e) {
+ events[index] = e;
+ index++;
+ }
+
+ /**
+ * Prepare a wiimote event to add.
+ *
+ * @param id
+ * id of the wiimote.
+ * @param buttonsJustPressed
+ * buttons just pressed
+ * @param buttonsJustReleased
+ * buttons just released
+ * @param buttonsHeld
+ * buttons held
+ */
+ public void prepareWiiMoteEvent(int id, short buttonsJustPressed,
+ short buttonsJustReleased, short buttonsHeld) {
+ genericEvent = new WiimoteEvent(id, buttonsJustPressed,
+ buttonsJustReleased, buttonsHeld);
+ }
+
+ /**
+ * Prepare an IR event to populate.
+ *
+ * @param x
+ * calculated X coordinate.
+ * @param y
+ * calculated Y coordinate.
+ * @param z
+ * calculated distance.
+ * @param ax
+ * absolute X coordinate.
+ * @param ay
+ * absolute Y coordinate
+ * @param xVRes
+ * IR virtual screen x resolution.
+ * @param yVRes
+ * IR virtual screen y resolution.
+ * @param xOffset
+ * IR X correction offset.
+ * @param yOffset
+ * IR Y correction offset.
+ * @param sensorBarPostion
+ * aspect ratio of the screen.
+ * @param screenAsPectRatio
+ * IR sensor bar position.
+ * @param irSensitivity
+ * Sensitivity of the infrared camera.
+ * @param distance
+ * Pixel Distance between first two dots
+ */
+ public void prepareIRevent(int x, int y, int 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,
+ yOffset, sensorBarPostion, screenAsPectRatio, irSensitivity,
+ distance);
+
+ }
+
+ /**
+ * Add an IR point to the WiiMoteEvent prepared
+ *
+ * @param x
+ * x coordinates
+ * @param y
+ * y coordinates
+ * @param rx
+ * raw X coordinate (0-1023).
+ * @param ry
+ * raw Y coordinate (0-1023).
+ * @param size
+ * size of the IR dot (0-15).
+ */
+ public void addIRPointToPreparedWiiMoteEvent(int x, int y, short rx,
+ short ry, short size) {
+ if (genericEvent != null) {
+ genericEvent.addIRpoint(x, y, rx, ry, size);
+ }
+ }
+
+ /**
+ * Set orientation and gravity force of the prepared event.
+ *
+ * @param orientationThreshold
+ * value of the minimum angle between two events with the
+ * accelerometer
+ * @param accelerationThreshold
+ * value of the value variation between two events with the
+ * accelerometer
+ * @param smoothingState
+ * true if smoothing flag is activated
+ * @param alphaSmooth
+ * value of the alpha smoothing parameter
+ * @param r
+ * roll
+ * @param p
+ * pitch
+ * @param ya
+ * yaw
+ * @param ar
+ * absolute roll
+ * @param ap
+ * absolute pitch
+ * @param x
+ * gravity force on x axis
+ * @param y
+ * gravity force on y axis
+ * @param z
+ * gravity force on z axis
+ * @param xx
+ * raw acceleration on x axis
+ * @param yy
+ * raw acceleration on y axis
+ * @param zz
+ * raw acceleration on z axis
+ */
+ public void addMotionSensingValues(float orientationThreshold,
+ int accelerationThreshold, boolean smoothingState,
+ float alphaSmooth, float r, float p, float ya, float ar, float ap,
+ float x, float y, float z, short xx, short yy, short zz) {
+ if (genericEvent != null) {
+ genericEvent.setMotionSensingEvent(orientationThreshold,
+ accelerationThreshold, smoothingState, alphaSmooth, r, p,
+ ya, ar, ap, x, y, z, xx, yy, zz);
+ }
+ }
+
+ /**
+ * Add the prepared WiimoteEvent to the gatherer.
+ */
+ public void addWiimoteEvent() {
+ if (genericEvent != null) {
+ addEvent(genericEvent);
+ genericEvent = null;
+ }
+ }
+
+ /**
+ * Add a StatusEvent to the gatherer.
+ *
+ * @param id
+ * id of the wiimote
+ * @param connect
+ * true if the wiimote is connected
+ * @param batt
+ * battery level
+ * @param led
+ * status of leds
+ * @param speak
+ * speakers status
+ * @param attach
+ * attachment status
+ * @param rumbleState
+ * true if rumble is active
+ * @param continuousState
+ * true if continuous flag is activated
+ * @param irState
+ * true if ir is active
+ * @param motionSensingState
+ * true if accelerometer is active
+ */
+ public void addStatusEvent(int id, boolean connect, float batt, short led,
+ boolean speak, int attach, boolean rumbleState,
+ boolean continuousState, boolean irState, boolean motionSensingState) {
+ StatusEvent evt = new StatusEvent(id, connect, batt, led, speak,
+ attach, rumbleState, continuousState, irState,
+ motionSensingState);
+ addEvent(evt);
+ }
+
+ /**
+ * Add a DisconnectionEvent to the gatherer.
+ *
+ * @param id
+ * id of the wiimote
+ */
+ public void addDisconnectionEvent(int id) {
+ DisconnectionEvent evt = new DisconnectionEvent(id);
+ addEvent(evt);
+ }
+
+ /**
+ * Add a NunchukInsertedEvent to the gatherer.
+ *
+ * @param id
+ * id of the wiimote
+ */
+ public void addNunchukInsertedEvent(int id) {
+ NunchukInsertedEvent evt = new NunchukInsertedEvent(id);
+ addEvent(evt);
+ }
+
+ /**
+ * Add a NunchukRemovedEvent to the gatherer.
+ *
+ * @param id
+ * id of the wiimote
+ */
+ public void addNunchukRemovedEvent(int id) {
+ NunchukRemovedEvent evt = new NunchukRemovedEvent(id);
+ addEvent(evt);
+ }
+
+ /**
+ * Return an array containing the events.
+ *
+ * @return events received
+ */
+ public WiiUseApiEvent[] getEvents() {
+ return java.util.Arrays.copyOfRange(events, 0, index);
+ }
+
+ /**
+ * Clear the gatherer and remove objects.
+ */
+ public void clearEvents() {
+ for (int i = 0; i < events.length; i++) {
+ events[i] = null;
+ }
+ genericEvent = null;
+ index = 0;
+ }
+
+}
diff --git a/WiiUseJ/src/wiiusej/wiiusejevents/GenericEvent.java b/WiiUseJ/src/wiiusej/wiiusejevents/GenericEvent.java
new file mode 100644
index 0000000..18d8429
--- /dev/null
+++ b/WiiUseJ/src/wiiusej/wiiusejevents/GenericEvent.java
@@ -0,0 +1,59 @@
+/**
+ * This file is part of WiiuseJ.
+ *
+ * WiiuseJ 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 3 of the License, or
+ * (at your option) any later version.
+ *
+ * WiiuseJ 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 WiiuseJ. If not, see .
+ */
+package wiiusej.wiiusejevents;
+
+/**
+ * Abstract mother class representing an event with a wiimote id.
+ *
+ * @author guiguito
+ */
+public abstract class GenericEvent {
+
+ /* ID */
+ private int wiimoteId = -1;
+
+ /**
+ * Construct the WiiUseApiEvent setting up the id.
+ *
+ * @param id
+ * the Wiimote id
+ */
+ public GenericEvent(int id) {
+ wiimoteId = id;
+ }
+
+ /**
+ * Get Wiimote ID
+ *
+ * @return the wiimote id.
+ */
+ public int getWiimoteId() {
+ return wiimoteId;
+ }
+
+ /**
+ * Set Wiimote ID
+ *
+ * @param wiimoteId
+ * id of the wiimote
+ */
+ void setWiimoteId(int wiimoteId) {
+ this.wiimoteId = wiimoteId;
+ }
+
+ public abstract String toString();
+}
diff --git a/WiiUseJ/src/wiiusej/wiiusejevents/IREvent.java b/WiiUseJ/src/wiiusej/wiiusejevents/IREvent.java
new file mode 100644
index 0000000..cdf753e
--- /dev/null
+++ b/WiiUseJ/src/wiiusej/wiiusejevents/IREvent.java
@@ -0,0 +1,316 @@
+/**
+ * This file is part of WiiuseJ.
+ *
+ * WiiuseJ 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 3 of the License, or
+ * (at your option) any later version.
+ *
+ * WiiuseJ 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 WiiuseJ. If not, see .
+ */
+package wiiusej.wiiusejevents;
+
+import wiiusej.values.IRSource;
+
+/**
+ * Class which represents an IR event.
+ *
+ * @author guiguito
+ */
+public class IREvent extends GenericEvent {
+
+ /* IR Tracking */
+ private IRSource[] IRPoints;
+ private short indexPoints = 0;
+ private int x;
+ private int y;
+ private int z;// distance from the sensor bar
+ private int ax;
+ private int ay;
+ private int xVRes;
+ private int yVRes;
+ private int xOffset;
+ private int yOffset;
+ private short sensorBarPostion;
+ private short screenAsPectRatio;
+ private short irSensitivity;
+ private float distance;
+
+ static private short WIIUSE_IR_ABOVE = 0;
+ static private short WIIUSE_IR_BELOW = 1;
+ static private short WIIUSE_SCREEN_RATIO_4_3 = 0;
+ static private short WIIUSE_SCREEN_RATIO_16_9 = 1;
+
+ private static short NB_POINTS = 4;// number of points IR can track
+
+ /**
+ * Constructor of IREvent with full infos.
+ *
+ * @param id
+ * d of the wiimote concerned.
+ * @param x
+ * calculated X coordinate.
+ * @param y
+ * calculated Y coordinate.
+ * @param z
+ * calculated distance.
+ * @param ax
+ * absolute X coordinate.
+ * @param ay
+ * absolute Y coordinate
+ * @param xVRes
+ * IR virtual screen x resolution.
+ * @param yVRes
+ * IR virtual screen y resolution.
+ * @param xOffset
+ * IR X correction offset.
+ * @param yOffset
+ * IR Y correction offset.
+ * @param sensorBarPostion
+ * aspect ratio of the screen.
+ * @param screenAsPectRatio
+ * IR sensor bar position.
+ * @param irSensitivity
+ * Sensitivity of the infrared camera.
+ * @param distance
+ * Pixel Distance between first two dots
+ */
+ public IREvent(int id, int x, int y, int z, int ax, int ay, int xVRes,
+ int yVRes, int xOffset, int yOffset, short sensorBarPostion,
+ short screenAsPectRatio, short irSensitivity, float distance) {
+ super(id);
+ this.x = x;
+ this.y = y;
+ this.z = z;
+ this.ax = ax;
+ this.ay = ay;
+ this.xVRes = xVRes;
+ this.yVRes = yVRes;
+ this.xOffset = xOffset;
+ this.yOffset = yOffset;
+ this.sensorBarPostion = sensorBarPostion;
+ this.screenAsPectRatio = screenAsPectRatio;
+ this.irSensitivity = irSensitivity;
+ this.distance = distance;
+ IRPoints = new IRSource[NB_POINTS];
+ }
+
+ /**
+ * Get list of IR points.
+ *
+ * @return the list of 2D points
+ */
+ public IRSource[] getIRPoints() {
+ return java.util.Arrays.copyOfRange(IRPoints, 0, indexPoints);
+ }
+
+ /**
+ * Add IR Point in the list (Max 4 points)
+ *
+ * @param x
+ * x value
+ * @param y
+ * y value
+ * @param rx
+ * raw X coordinate (0-1023).
+ * @param ry
+ * raw Y coordinate (0-1023).
+ * @param size
+ * size of the IR dot (0-15).
+ */
+ public void addIRpoint(int x, int y, short rx, short ry, short size) {
+ IRPoints[indexPoints] = new IRSource(x, y, rx, ry, size);
+ indexPoints++;
+ return;
+ }
+
+ /**
+ * Return calculated X coordinate.
+ *
+ * @return the x
+ */
+ public int getX() {
+ return x;
+ }
+
+ /**
+ * Return calculated Y coordinate.
+ *
+ * @return the y
+ */
+ public int getY() {
+ return y;
+ }
+
+ /**
+ * Return calculated distance.
+ *
+ * @return the z
+ */
+ public int getZ() {
+ return z;
+ }
+
+ /**
+ * Return absolute X coordinate.
+ *
+ * @return the ax
+ */
+ public int getAx() {
+ return ax;
+ }
+
+ /**
+ * Return absolute Y coordinate.
+ *
+ * @return the ay
+ */
+ public int getAy() {
+ return ay;
+ }
+
+ /**
+ * Return IR virtual screen x resolution.
+ *
+ * @return the xVRes
+ */
+ public int getXVRes() {
+ return xVRes;
+ }
+
+ /**
+ * Return IR virtual screen y resolution.
+ *
+ * @return the yVRes
+ */
+ public int getYVRes() {
+ return yVRes;
+ }
+
+ /**
+ * Return IR X correction offset.
+ *
+ * @return the xOffset
+ */
+ public int getXOffset() {
+ return xOffset;
+ }
+
+ /**
+ * Return IR Y correction offset.
+ *
+ * @return the yOffset
+ */
+ public int getYOffset() {
+ return yOffset;
+ }
+
+ /**
+ * Return true if the sensor bar is above.
+ *
+ * @return true if the sensor bar is above.
+ */
+ public boolean isSensorBarAbove() {
+ return sensorBarPostion == WIIUSE_IR_ABOVE;
+ }
+
+ /**
+ * Return true if the sensor bar is below.
+ *
+ * @return true if the sensor bar is below.
+ */
+ public boolean isSensorBarBelow() {
+ return sensorBarPostion == WIIUSE_IR_BELOW;
+ }
+
+ /**
+ * Return true if screen aspect ratio set is 4/3.
+ *
+ * @return true if screen aspect ratio set is 4/3.
+ */
+ public boolean isScreenAspectRatio43() {
+ return screenAsPectRatio == WIIUSE_SCREEN_RATIO_4_3;
+ }
+
+ /**
+ * Return true if screen aspect ratio set is 16/9.
+ *
+ * @return true if screen aspect ratio set is 16/9.
+ */
+ public boolean isScreenAspectRatio169() {
+ return screenAsPectRatio == WIIUSE_SCREEN_RATIO_16_9;
+ }
+
+ /**
+ * Return aspect ratio of the screen.
+ *
+ * @return the screenAsPectRatio
+ */
+ public short getScreenAsPectRatio() {
+ return screenAsPectRatio;
+ }
+
+ /**
+ * The sensitivity of the IR camera can be turned up or down depending on
+ * your needs. Like the Wii, wiiusej and wiiuse can set the camera
+ * sensitivity to a degree between 1 (lowest) and 5 (highest). The default
+ * is 3.
+ *
+ * @return the irSensitivity
+ */
+ public short getIrSensitivity() {
+ return irSensitivity;
+ }
+
+ /**
+ * Pixel distance between first 2 dots.
+ *
+ * @return the distance between first 2 dots.
+ */
+ public float getDistance() {
+ return distance;
+ }
+
+ @Override
+ public String toString() {
+ String out = "";
+ /* Display IR Tracking */
+ out += "/******** IR Tracking ********/\n";
+ out += "--- Active : true\n";
+ out += "--- calculated X coordinate : " + x + "\n";
+ out += "--- calculated Y coordinate : " + y + "\n";
+ out += "--- calculated Z coordinate : " + z + "\n";
+ out += "--- calculated distance : " + distance + "\n";
+ out += "--- absolute X coordinate : " + ax + "\n";
+ out += "--- absolute Y coordinate : " + ay + "\n";
+ out += "--- IR virtual screen x resolution : " + xVRes + "\n";
+ out += "--- IR virtual screen y resolution : " + yVRes + "\n";
+ out += "--- IR X correction offset : " + xOffset + "\n";
+ out += "--- IR Y correction offset : " + yOffset + "\n";
+ out += "--- IR Sensitivity (between 1-5) : " + irSensitivity + "\n";
+ if (isScreenAspectRatio43()) {
+ out += "--- aspect ratio of the screen : 4/3\n";
+ } else if (isScreenAspectRatio169()) {
+ out += "--- aspect ratio of the screen : 16/9\n";
+ }
+ if (isSensorBarAbove()) {
+ out += "--- IR sensor bar position. : Above\n";
+ } else if (isSensorBarBelow()) {
+ out += "--- IR sensor bar position. : Below\n";
+ }
+ out += "--- Seen points\n";
+ for (int i = 0; i < IRPoints.length; i++) {
+ if (IRPoints[i] != null) {
+ out += IRPoints[i].toString();
+ }
+ }
+ out += "\n";
+ return out;
+ }
+}
diff --git a/WiiUseJ/src/wiiusej/wiiusejevents/MotionSensingEvent.java b/WiiUseJ/src/wiiusej/wiiusejevents/MotionSensingEvent.java
new file mode 100644
index 0000000..b3b5fa8
--- /dev/null
+++ b/WiiUseJ/src/wiiusej/wiiusejevents/MotionSensingEvent.java
@@ -0,0 +1,202 @@
+/**
+ * This file is part of WiiuseJ.
+ *
+ * WiiuseJ 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 3 of the License, or
+ * (at your option) any later version.
+ *
+ * WiiuseJ 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 WiiuseJ. If not, see .
+ */
+package wiiusej.wiiusejevents;
+
+import wiiusej.values.GForce;
+import wiiusej.values.Orientation;
+import wiiusej.values.RawAcceleration;
+
+/**
+ * Class which represents a motion sensing event.
+ *
+ * @author guiguito
+ */
+public class MotionSensingEvent extends GenericEvent {
+
+ /* Motion Sensing */
+ private Orientation orientation;
+ private GForce gforce;
+ private RawAcceleration acceleration;
+
+ private float orientationThreshold = 0;
+ private int accelerationThreshold = 0;
+ private float alphaSmoothing = 0;
+ private boolean isSmoothingActive = false;
+
+ /**
+ * Constructor for a Motion Sensing Event.
+ *
+ * @param id
+ * id of the wiimote concerned.
+ * @param orientationThreshold
+ * value of the minimum angle between two events with the
+ * accelerometer
+ * @param accelerationThreshold
+ * value of the value variation between two events with the
+ * accelerometer
+ * @param smoothingState
+ * true if smoothing flag is activated
+ * @param alphaSmooth
+ * value of the alpha smoothing parameter
+ * @param r
+ * roll
+ * @param p
+ * pitch
+ * @param ya
+ * yaw
+ * @param ar
+ * absolute roll
+ * @param ap
+ * absolute pitch
+ * @param x
+ * gravity force on x axis
+ * @param y
+ * gravity force on y axis
+ * @param z
+ * gravity force on z axis
+ * @param xx
+ * raw acceleration on x axis
+ * @param yy
+ * raw acceleration on y axis
+ * @param zz
+ * raw acceleration on z axis
+ */
+ public MotionSensingEvent(int id, float orientationThreshold,
+ int accelerationThreshold, boolean smoothingState,
+ float alphaSmooth, float r, float p, float ya, float ar, float ap,
+ float x, float y, float z, short xx, short yy, short zz) {
+ super(id);
+ this.orientationThreshold = orientationThreshold;
+ this.accelerationThreshold = accelerationThreshold;
+ this.isSmoothingActive = smoothingState;
+ this.alphaSmoothing = alphaSmooth;
+ setOrientationAndGforce(r, p, ya, ar, ap, x, y, z, xx, yy, zz);
+ }
+
+ /**
+ * Set orientation, gravity force and raw acceleration.
+ *
+ * @param r
+ * roll
+ * @param p
+ * pitch
+ * @param ya
+ * yaw
+ * @param ar
+ * absolute roll
+ * @param ap
+ * absolute pitch
+ * @param x
+ * gravity force on x axis
+ * @param y
+ * gravity force on y axis
+ * @param z
+ * gravity force on z axis
+ * @param xx
+ * raw acceleration on x axis
+ * @param yy
+ * raw acceleration on y axis
+ * @param zz
+ * raw acceleration on z axis
+ */
+ private void setOrientationAndGforce(float r, float p, float ya, float ar,
+ float ap, float x, float y, float z, short xx, short yy, short zz) {
+ this.orientation = new Orientation(r, p, ya, ar, ap);
+ this.gforce = new GForce(x, y, z);
+ this.acceleration = new RawAcceleration(xx, yy, zz);
+ }
+
+ /**
+ * @return the orientation
+ */
+ public Orientation getOrientation() {
+ return orientation;
+ }
+
+ /**
+ * Get the gravity force.
+ *
+ * @return the gforce
+ */
+ public GForce getGforce() {
+ return gforce;
+ }
+
+ /**
+ * Get the raw acceleration.
+ *
+ * @return the raw acceleration
+ */
+ public RawAcceleration getRawAcceleration() {
+ return acceleration;
+ }
+
+ /**
+ * Get orientation threshold.
+ *
+ * @return the orientationThreshold
+ */
+ public float getOrientationThreshold() {
+ return orientationThreshold;
+ }
+
+ /**
+ * Get acceleration threshold.
+ *
+ * @return the accelerationThreshold
+ */
+ public int getAccelerationThreshold() {
+ return accelerationThreshold;
+ }
+
+ /**
+ * Get alpha smoothing.
+ *
+ * @return the alphaSmoothing
+ */
+ public float getAlphaSmoothing() {
+ return alphaSmoothing;
+ }
+
+ /**
+ * Tell if the option SMOOTHING is activated.
+ *
+ * @return the isSmoothingActive
+ */
+ public boolean isSmoothingActive() {
+ return isSmoothingActive;
+ }
+
+ @Override
+ public String toString() {
+ String out = "";
+ /* Motion sensing */
+ out += "/******** Motion sensing ********/\n";
+ out += "--- Motion sensing : true \n";
+ out += "--- Orientation threshold value ? : " + orientationThreshold
+ + "\n";
+ out += "--- Acceleration threshold value ? : " + accelerationThreshold
+ + "\n";
+ out += "--- Alpha smoothing threshold value ? : " + alphaSmoothing
+ + "\n";
+ out += "--- Smoothing ? : " + isSmoothingActive + "\n";
+ out += "--- " + orientation + "\n";
+ out += "--- " + gforce + "\n";
+ out += "--- " + acceleration + "\n";
+ return out;
+ }
+}
diff --git a/WiiUseJ/src/wiiusej/wiiusejevents/NunchukButtonsEvent.java b/WiiUseJ/src/wiiusej/wiiusejevents/NunchukButtonsEvent.java
new file mode 100644
index 0000000..a9d65e4
--- /dev/null
+++ b/WiiUseJ/src/wiiusej/wiiusejevents/NunchukButtonsEvent.java
@@ -0,0 +1,86 @@
+/**
+ * This file is part of WiiuseJ.
+ *
+ * WiiuseJ 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 3 of the License, or
+ * (at your option) any later version.
+ *
+ * WiiuseJ 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 WiiuseJ. If not, see .
+ */
+package wiiusej.wiiusejevents;
+
+/**
+ * Class which represents a buttons event for a generic event. It means buttons
+ * from a wiimote.
+ *
+ * @author guiguito
+ */
+public class NunchukButtonsEvent extends ButtonsEvent {
+
+ private static short NUNCHUK_BUTTON_Z = 0x01;
+ private static short NUNCHUK_BUTTON_C = 0x02;
+ private static short NUNCHUK_BUTTON_ALL = 0x03;
+
+ /**
+ * Constructor of the nunchuk button Event.
+ * @param id id of the wiimote.
+ * @param buttonsJustPressed buttons just pressed.
+ * @param buttonsJustReleased buttons just released.
+ * @param buttonsHeld buttons just pressed.
+ */
+ public NunchukButtonsEvent(int id, short buttonsJustPressed,
+ short buttonsJustReleased, short buttonsHeld) {
+ super(id, buttonsJustPressed, buttonsJustReleased, buttonsHeld);
+ }
+
+ /* Button Z */
+
+ public boolean isButtonZJustPressed() {
+ return isButtonJustPressed(NUNCHUK_BUTTON_Z);
+ }
+
+ public boolean isButtonZJustReleased() {
+ return isButtonJustReleased(NUNCHUK_BUTTON_Z);
+ }
+
+ public boolean isButtonZeHeld() {
+ return isButtonHeld(NUNCHUK_BUTTON_Z);
+ }
+
+ public boolean isButtonZPressed() {
+ return isButtonPressed(NUNCHUK_BUTTON_Z);
+ }
+
+ /* Button Z */
+
+ public boolean isButtonCJustPressed() {
+ return isButtonJustPressed(NUNCHUK_BUTTON_C);
+ }
+
+ public boolean isButtonCJustReleased() {
+ return isButtonJustReleased(NUNCHUK_BUTTON_C);
+ }
+
+ public boolean isButtonCHeld() {
+ return isButtonHeld(NUNCHUK_BUTTON_C);
+ }
+
+ public boolean isButtonCPressed() {
+ return isButtonPressed(NUNCHUK_BUTTON_C);
+ }
+
+ @Override
+ public String toString() {
+ return "/******** Buttons for Nunchhuk Event ********/\n"
+ + super.toString();
+ }
+
+
+}
diff --git a/WiiUseJ/src/wiiusej/wiiusejevents/NunchukInsertedEvent.java b/WiiUseJ/src/wiiusej/wiiusejevents/NunchukInsertedEvent.java
new file mode 100644
index 0000000..566f1aa
--- /dev/null
+++ b/WiiUseJ/src/wiiusej/wiiusejevents/NunchukInsertedEvent.java
@@ -0,0 +1,45 @@
+/**
+ * This file is part of WiiuseJ.
+ *
+ * WiiuseJ 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 3 of the License, or
+ * (at your option) any later version.
+ *
+ * WiiuseJ 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 WiiuseJ. If not, see .
+ */
+package wiiusej.wiiusejevents;
+
+/**
+ * Event that represents the connection of a nunchuk to a wiimote.
+ * @author guiguito
+ *
+ */
+public class NunchukInsertedEvent extends WiiUseApiEvent {
+
+ /**
+ * Construct the NunchukInsertedEvent setting up the id.
+ * @param id id of the wiimote.
+ */
+ public NunchukInsertedEvent(int id) {
+ super(id, WIIUSE_NUNCHUK_INSERTED);
+ }
+
+ /* (non-Javadoc)
+ * @see wiiusej.wiiusejevents.WiiUseApiEvent#toString()
+ */
+ @Override
+ public String toString() {
+ String out = "";
+ /* Status */
+ out += "/*********** NUNCHUK INSERTED EVENT : WIIMOTE ID :" + super.getWiimoteId() + " ********/\n";
+ return out;
+ }
+
+}
diff --git a/WiiUseJ/src/wiiusej/wiiusejevents/NunchukRemovedEvent.java b/WiiUseJ/src/wiiusej/wiiusejevents/NunchukRemovedEvent.java
new file mode 100644
index 0000000..8922155
--- /dev/null
+++ b/WiiUseJ/src/wiiusej/wiiusejevents/NunchukRemovedEvent.java
@@ -0,0 +1,44 @@
+/**
+ * This file is part of WiiuseJ.
+ *
+ * WiiuseJ 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 3 of the License, or
+ * (at your option) any later version.
+ *
+ * WiiuseJ 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 WiiuseJ. If not, see .
+ */
+package wiiusej.wiiusejevents;
+
+/**
+ * Event that represents the connection of a nunchuk to a wiimote.
+ * @author guiguito
+ */
+public class NunchukRemovedEvent extends WiiUseApiEvent {
+
+ /**
+ * Construct the NunchukInsertedEvent setting up the id.
+ * @param id id of the wiimote.
+ */
+ public NunchukRemovedEvent(int id) {
+ super(id, WIIUSE_NUNCHUK_REMOVED);
+ }
+
+ /* (non-Javadoc)
+ * @see wiiusej.wiiusejevents.WiiUseApiEvent#toString()
+ */
+ @Override
+ public String toString() {
+ String out = "";
+ /* Status */
+ out += "/*********** NUNCHUK REMOVED EVENT : WIIMOTE ID :" + super.getWiimoteId() + " ********/\n";
+ return out;
+ }
+
+}
diff --git a/WiiUseJ/src/wiiusej/wiiusejevents/StatusEvent.java b/WiiUseJ/src/wiiusej/wiiusejevents/StatusEvent.java
new file mode 100644
index 0000000..c572937
--- /dev/null
+++ b/WiiUseJ/src/wiiusej/wiiusejevents/StatusEvent.java
@@ -0,0 +1,255 @@
+/**
+ * This file is part of WiiuseJ.
+ *
+ * WiiuseJ 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 3 of the License, or
+ * (at your option) any later version.
+ *
+ * WiiuseJ 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 WiiuseJ. If not, see .
+ */
+package wiiusej.wiiusejevents;
+
+/**
+ * Class used to represent a status event. This class is used to know what are
+ * the settings of the wiimote.
+ *
+ * @author guiguito
+ */
+public class StatusEvent extends WiiUseApiEvent {
+
+ protected static short WIIMOTE_LED_1 = 1;
+ protected static short WIIMOTE_LED_2 = 2;
+ protected static short WIIMOTE_LED_3 = 4;
+ protected static short WIIMOTE_LED_4 = 8;
+
+ /* ATTACHMENT CONSTANTS */
+
+ private static short EXP_NONE = 0;
+ private static short EXP_NUNCHUK = 1;
+ private static short EXP_CLASSIC = 2;
+ private static short EXP_GUITAR_HERO_3 = 3;
+
+ /* Status variables */
+ private boolean connected = false;
+
+ private float batteryLevel = -1;
+
+ private short leds = 0;
+
+ private boolean isSpeakerEnabled = false;
+
+ private int attachment = 0;
+
+ private boolean isRumbleActive = false;
+
+ private boolean isContinuousActive = false;
+
+ private boolean isIrActive = false;
+
+ private boolean isMotionSensingActive = false;
+
+ /**
+ * Construct the StatusEvent setting up the id.
+ *
+ * @param id
+ * the Wiimote id
+ */
+ public StatusEvent(int id) {
+ super(id, WiiUseApiEvent.STATUS_EVENT);
+ }
+
+ /**
+ * Build a StatusEvent with all fields set.
+ *
+ * @param id
+ * id of the wiimote
+ * @param connect
+ * true if the wiimote is connected
+ * @param batt
+ * battery level
+ * @param led
+ * status of leds
+ * @param speak
+ * speakers status
+ * @param attach
+ * attachment status
+ * @param rumbleState
+ * true if rumble is active
+ * @param continuousState
+ * true if continuous flag is activated
+ * @param irState
+ * true if ir is active
+ * @param motionSensingState
+ * true if accelerometer is active
+ */
+ public StatusEvent(int id, boolean connect, float batt, short led,
+ boolean speak, int attach, boolean rumbleState,
+ boolean continuousState, boolean irState, boolean motionSensingState) {
+ super(id, WiiUseApiEvent.STATUS_EVENT);
+ connected = connect;
+ this.batteryLevel = batt;
+ this.leds = led;
+ this.isSpeakerEnabled = speak;
+ this.attachment = attach;
+ isRumbleActive = rumbleState;
+ isContinuousActive = continuousState;
+ isIrActive = irState;
+ isMotionSensingActive = motionSensingState;
+ }
+
+ /**
+ * True if the wiimote is connected false otherwise.
+ *
+ * @return return the connected status.
+ */
+ public boolean isConnected() {
+ return connected;
+ }
+
+ /**
+ * Get battery level.
+ *
+ * @return battery level. 1 = 100%
+ */
+ public float getBatteryLevel() {
+ return batteryLevel;
+ }
+
+ /**
+ * Get status of the leds .
+ *
+ * @return a short representing LEDS turned on.
+ */
+ 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.
+ * @return true if the led is turned on false otherwise.
+ */
+ private boolean ledStatusCheck(short led) {
+ if ((leds & led) > 0) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ /**
+ * Get led1 status.
+ *
+ * @return true if the led is set.
+ */
+ public boolean isLed1Set() {
+ return ledStatusCheck(WIIMOTE_LED_1);
+ }
+
+ /**
+ * Get led2 status.
+ *
+ * @return true if the led is set.
+ */
+ public boolean isLed2Set() {
+ return ledStatusCheck(WIIMOTE_LED_2);
+ }
+
+ /**
+ * Get led3 status.
+ *
+ * @return true if the led is set.
+ */
+ public boolean isLed3Set() {
+ return ledStatusCheck(WIIMOTE_LED_3);
+ }
+
+ /**
+ * Get led4 status.
+ *
+ * @return true if the led is set.
+ */
+ public boolean isLed4Set() {
+ return ledStatusCheck(WIIMOTE_LED_4);
+ }
+
+ /**
+ * Tell if the speaker is enable for this wiimote
+ *
+ * @return TRUE if it enabled false otherwise
+ */
+ public boolean isSpeakerEnabled() {
+ return isSpeakerEnabled;
+ }
+
+ /**
+ * Get the int representing the attachment type.
+ *
+ * @return value of the Attachment Type
+ */
+ public int getAttachment() {
+ return attachment;
+ }
+
+ /**
+ * Get the status of rumble.
+ *
+ * @return true if the rumble is active false otherwise
+ */
+ public boolean isRumbleActive() {
+ return isRumbleActive;
+ }
+
+ /**
+ * Tell if the CONTINUOUS option is activated.
+ *
+ * @return the isContinuousActive
+ */
+ public boolean isContinuousActive() {
+ return isContinuousActive;
+ }
+
+ /**
+ * Tell if the IR Tracking is active.
+ *
+ * @return TRUE if it is active or false otherwise.
+ */
+ public boolean isIrActive() {
+ return isIrActive;
+ }
+
+ /**
+ * Get the flag indicating if the motion sensing is active.
+ *
+ * @return true if the motion sensing is active false otherwise
+ */
+ public boolean isMotionSensingActive() {
+ return isMotionSensingActive;
+ }
+
+ @Override
+ public String toString() {
+ String out = "";
+ /* Status */
+ out += "/*********** STATUS EVENT : WIIMOTE ID :"
+ + super.getWiimoteId() + " ********/\n";
+ out += "--- connected : " + connected + "\n";
+ out += "--- Battery level : " + batteryLevel + "\n";
+ out += "--- Leds : " + leds + "\n";
+ out += "--- Speaker enabled : " + isSpeakerEnabled + "\n";
+ out += "--- Attachment ? : " + attachment + "\n";
+ out += "--- Rumble ? : " + isRumbleActive + "\n";
+ out += "--- Continuous ? : " + isContinuousActive + "\n";
+ out += "--- IR active ? : " + isIrActive + "\n";
+ out += "--- Motion sensing active ? : " + isMotionSensingActive + "\n";
+ return out;
+ }
+
+}
diff --git a/WiiUseJ/src/wiiusej/wiiusejevents/WiiUseApiEvent.java b/WiiUseJ/src/wiiusej/wiiusejevents/WiiUseApiEvent.java
new file mode 100644
index 0000000..f1a129f
--- /dev/null
+++ b/WiiUseJ/src/wiiusej/wiiusejevents/WiiUseApiEvent.java
@@ -0,0 +1,62 @@
+/**
+ * This file is part of WiiuseJ.
+ *
+ * WiiuseJ 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 3 of the License, or
+ * (at your option) any later version.
+ *
+ * WiiuseJ 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 WiiuseJ. If not, see .
+ */
+package wiiusej.wiiusejevents;
+
+/**
+ * This class describes the structure of an event from the WiiUse API event.
+ *
+ * @author guiguito
+ */
+public abstract class WiiUseApiEvent extends GenericEvent{
+
+ public static int GENERIC_EVENT = 1;
+ public static int STATUS_EVENT = 2;
+ public static int DISCONNECTION_EVENT = 3;
+ public static int WIIUSE_NUNCHUK_INSERTED = 4;
+ public static int WIIUSE_NUNCHUK_REMOVED = 5;
+ public static int WIIUSE_CLASSIC_CTRL_INSERTED = 6;
+ public static int WIIUSE_CLASSIC_CTRL_REMOVED = 7;
+ public static int WIIUSE_GUITAR_HERO_3_CTRL_INSERTED = 8;
+ public static int WIIUSE_GUITAR_HERO_3_CTRL_REMOVED = 9;
+
+ /* Event Type */
+ private int eventType;
+
+ /**
+ * Construct the WiiUseApiEvent setting up the id.
+ *
+ * @param id
+ * the Wiimote id
+ * @param type
+ * type of the event
+ */
+ public WiiUseApiEvent(int id, int type) {
+ super(id);
+ eventType = type;
+ }
+
+ /**
+ * Get the event type.
+ * @return the eventType
+ */
+ public int getEventType() {
+ return eventType;
+ }
+
+ public abstract String toString();
+
+}
diff --git a/WiiUseJ/src/wiiusej/wiiusejevents/WiiUseApiListener.java b/WiiUseJ/src/wiiusej/wiiusejevents/WiiUseApiListener.java
new file mode 100644
index 0000000..4f68837
--- /dev/null
+++ b/WiiUseJ/src/wiiusej/wiiusejevents/WiiUseApiListener.java
@@ -0,0 +1,39 @@
+/**
+ * This file is part of WiiuseJ.
+ *
+ * WiiuseJ 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 3 of the License, or
+ * (at your option) any later version.
+ *
+ * WiiuseJ 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 WiiuseJ. If not, see .
+ */
+package wiiusej.wiiusejevents;
+
+
+
+/**
+ * This is the interface to implement to listen to events from the wiiuse API.
+ *
+ * @author guiguito
+ */
+public interface WiiUseApiListener extends java.util.EventListener {
+
+ /**
+ * Method called when a WiiUseApiEvent occurs.
+ * A WiiUseApiEvent can be :
+ * - WiimoteEvent (Storing ButtonsEvent and
+ * eventually IREvent and MotionSensingEvent)
+ * - StatusEvent
+ * - DisconnectionEvent
+ * @param e
+ */
+ void onWiiUseApiEvent(WiiUseApiEvent e);
+
+}
diff --git a/WiiUseJ/src/wiiusej/wiiusejevents/WiimoteButtonsEvent.java b/WiiUseJ/src/wiiusej/wiiusejevents/WiimoteButtonsEvent.java
new file mode 100644
index 0000000..874499d
--- /dev/null
+++ b/WiiUseJ/src/wiiusej/wiiusejevents/WiimoteButtonsEvent.java
@@ -0,0 +1,262 @@
+/**
+ * This file is part of WiiuseJ.
+ *
+ * WiiuseJ 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 3 of the License, or
+ * (at your option) any later version.
+ *
+ * WiiuseJ 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 WiiuseJ. If not, see .
+ */
+package wiiusej.wiiusejevents;
+
+/**
+ * Class which represents a buttons event for a generic event. It means buttons
+ * from a wiimote.
+ *
+ * @author guiguito
+ */
+public class WiimoteButtonsEvent extends ButtonsEvent {
+
+ /* Buttons MACRO */
+ private static short WIIMOTE_BUTTON_TWO = 0x0001;
+ private static short WIIMOTE_BUTTON_ONE = 0x0002;
+ private static short WIIMOTE_BUTTON_B = 0x0004;
+ private static short WIIMOTE_BUTTON_A = 0x0008;
+ private static short WIIMOTE_BUTTON_MINUS = 0x0010;
+ private static short WIIMOTE_BUTTON_ZACCEL_BIT6 = 0x0020;
+ private static short WIIMOTE_BUTTON_ZACCEL_BIT7 = 0x0040;
+ private static short WIIMOTE_BUTTON_HOME = 0x0080;
+ private static short WIIMOTE_BUTTON_LEFT = 0x0100;
+ private static short WIIMOTE_BUTTON_RIGHT = 0x0200;
+ private static short WIIMOTE_BUTTON_DOWN = 0x0400;
+ private static short WIIMOTE_BUTTON_UP = 0x0800;
+ private static short WIIMOTE_BUTTON_PLUS = 0x1000;
+ private static short WIIMOTE_BUTTON_ZACCEL_BIT4 = 0x2000;
+ private static short WIIMOTE_BUTTON_ZACCEL_BIT5 = 0x4000;
+ private static int WIIMOTE_BUTTON_UNKNOWN = 0x8000;
+ private static short WIIMOTE_BUTTON_ALL = 0x1F9F;
+
+ /**
+ * Constructor of the wiimote button Event.
+ * @param id id of the wiimote.
+ * @param buttonsJustPressed buttons just pressed.
+ * @param buttonsJustReleased buttons just released.
+ * @param buttonsHeld buttons held.
+ */
+ public WiimoteButtonsEvent(int id, short buttonsJustPressed,
+ short buttonsJustReleased, short buttonsHeld) {
+ super(id, buttonsJustPressed, buttonsJustReleased, buttonsHeld);
+ }
+
+ /* Button ONE */
+
+ public boolean isButtonOneJustPressed() {
+ return isButtonJustPressed(WIIMOTE_BUTTON_ONE);
+ }
+
+ public boolean isButtonOneJustReleased() {
+ return isButtonJustReleased(WIIMOTE_BUTTON_ONE);
+ }
+
+ public boolean isButtonOneHeld() {
+ return isButtonHeld(WIIMOTE_BUTTON_ONE);
+ }
+
+ public boolean isButtonOnePressed() {
+ return isButtonPressed(WIIMOTE_BUTTON_ONE);
+ }
+
+ /* Button TWO */
+
+ public boolean isButtonTwoJustPressed() {
+ return isButtonJustPressed(WIIMOTE_BUTTON_TWO);
+ }
+
+ public boolean isButtonTwoJustReleased() {
+ return isButtonJustReleased(WIIMOTE_BUTTON_TWO);
+ }
+
+ public boolean isButtonTwoHeld() {
+ return isButtonHeld(WIIMOTE_BUTTON_TWO);
+ }
+
+ public boolean isButtonTwoPressed() {
+ return isButtonPressed(WIIMOTE_BUTTON_TWO);
+ }
+
+ /* Button A */
+
+ public boolean isButtonAJustPressed() {
+ return isButtonJustPressed(WIIMOTE_BUTTON_A);
+ }
+
+ public boolean isButtonAJustReleased() {
+ return isButtonJustReleased(WIIMOTE_BUTTON_A);
+ }
+
+ public boolean isButtonAHeld() {
+ return isButtonHeld(WIIMOTE_BUTTON_A);
+ }
+
+ public boolean isButtonAPressed() {
+ return isButtonPressed(WIIMOTE_BUTTON_A);
+ }
+
+ /* Button B */
+
+ public boolean isButtonBJustPressed() {
+ return isButtonJustPressed(WIIMOTE_BUTTON_B);
+ }
+
+ public boolean isButtonBJustReleased() {
+ return isButtonJustReleased(WIIMOTE_BUTTON_B);
+ }
+
+ public boolean isButtonBHeld() {
+ return isButtonHeld(WIIMOTE_BUTTON_B);
+ }
+
+ public boolean isButtonBPressed() {
+ return isButtonPressed(WIIMOTE_BUTTON_B);
+ }
+
+ /* Button LEFT */
+
+ public boolean isButtonLeftJustPressed() {
+ return isButtonJustPressed(WIIMOTE_BUTTON_LEFT);
+ }
+
+ public boolean isButtonLeftJustReleased() {
+ return isButtonJustReleased(WIIMOTE_BUTTON_LEFT);
+ }
+
+ public boolean isButtonLeftHeld() {
+ return isButtonHeld(WIIMOTE_BUTTON_LEFT);
+ }
+
+ public boolean isButtonLeftPressed() {
+ return isButtonPressed(WIIMOTE_BUTTON_LEFT);
+ }
+
+ /* Button RIGHT */
+
+ public boolean isButtonRightJustPressed() {
+ return isButtonJustPressed(WIIMOTE_BUTTON_RIGHT);
+ }
+
+ public boolean isButtonRightJustReleased() {
+ return isButtonJustReleased(WIIMOTE_BUTTON_RIGHT);
+ }
+
+ public boolean isButtonRightHeld() {
+ return isButtonHeld(WIIMOTE_BUTTON_RIGHT);
+ }
+
+ public boolean isButtonRightPressed() {
+ return isButtonPressed(WIIMOTE_BUTTON_RIGHT);
+ }
+
+ /* Button UP */
+
+ public boolean isButtonUpJustPressed() {
+ return isButtonJustPressed(WIIMOTE_BUTTON_UP);
+ }
+
+ public boolean isButtonUpJustReleased() {
+ return isButtonJustReleased(WIIMOTE_BUTTON_UP);
+ }
+
+ public boolean isButtonUpHeld() {
+ return isButtonHeld(WIIMOTE_BUTTON_UP);
+ }
+
+ public boolean isButtonUpPressed() {
+ return isButtonPressed(WIIMOTE_BUTTON_UP);
+ }
+
+ /* Button DOWN */
+
+ public boolean isButtonDownJustPressed() {
+ return isButtonJustPressed(WIIMOTE_BUTTON_DOWN);
+ }
+
+ public boolean isButtonDownJustReleased() {
+ return isButtonJustReleased(WIIMOTE_BUTTON_DOWN);
+ }
+
+ public boolean isButtonDownHeld() {
+ return isButtonHeld(WIIMOTE_BUTTON_DOWN);
+ }
+
+ public boolean isButtonDownPressed() {
+ return isButtonPressed(WIIMOTE_BUTTON_DOWN);
+ }
+
+ /* Button - */
+
+ public boolean isButtonMinusJustPressed() {
+ return isButtonJustPressed(WIIMOTE_BUTTON_MINUS);
+ }
+
+ public boolean isButtonMinusJustReleased() {
+ return isButtonJustReleased(WIIMOTE_BUTTON_MINUS);
+ }
+
+ public boolean isButtonMinusHeld() {
+ return isButtonHeld(WIIMOTE_BUTTON_MINUS);
+ }
+
+ public boolean isButtonMinusPressed() {
+ return isButtonPressed(WIIMOTE_BUTTON_MINUS);
+ }
+
+ /* Button + */
+
+ public boolean isButtonPlusJustPressed() {
+ return isButtonJustPressed(WIIMOTE_BUTTON_PLUS);
+ }
+
+ public boolean isButtonPlusJustReleased() {
+ return isButtonJustReleased(WIIMOTE_BUTTON_PLUS);
+ }
+
+ public boolean isButtonPlusHeld() {
+ return isButtonHeld(WIIMOTE_BUTTON_PLUS);
+ }
+
+ public boolean isButtonPlusPressed() {
+ return isButtonPressed(WIIMOTE_BUTTON_PLUS);
+ }
+
+ /* Button HOME */
+
+ public boolean isButtonHomeJustPressed() {
+ return isButtonJustPressed(WIIMOTE_BUTTON_HOME);
+ }
+
+ public boolean isButtonHomeJustReleased() {
+ return isButtonJustReleased(WIIMOTE_BUTTON_HOME);
+ }
+
+ public boolean isButtonHomeHeld() {
+ return isButtonHeld(WIIMOTE_BUTTON_HOME);
+ }
+
+ public boolean isButtonHomePressed() {
+ return isButtonPressed(WIIMOTE_BUTTON_HOME);
+ }
+
+ @Override
+ public String toString() {
+ return "/******** Buttons for Wiimote generic Event ********/\n"
+ + super.toString();
+ }
+
+}
diff --git a/WiiUseJ/src/wiiusej/wiiusejevents/WiimoteEvent.java b/WiiUseJ/src/wiiusej/wiiusejevents/WiimoteEvent.java
new file mode 100644
index 0000000..2bec47e
--- /dev/null
+++ b/WiiUseJ/src/wiiusej/wiiusejevents/WiimoteEvent.java
@@ -0,0 +1,239 @@
+/**
+ * This file is part of WiiuseJ.
+ *
+ * WiiuseJ 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 3 of the License, or
+ * (at your option) any later version.
+ *
+ * WiiuseJ 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 WiiuseJ. If not, see .
+ */
+package wiiusej.wiiusejevents;
+
+import wiiusej.values.Expansion;
+
+/**
+ * Class that is a bean to be filled by the wiiuse API on an event that occurs
+ * on a wiimote.
+ *
+ * @author guiguito
+ */
+public class WiimoteEvent extends WiiUseApiEvent {
+
+ WiimoteButtonsEvent buttonsEvent = null;
+ IREvent infraredEvent = null;
+ MotionSensingEvent motionSensingEvent = null;
+ Expansion expansion = null;
+
+ /**
+ * Construct the Wiimote setting up the id.
+ *
+ * @param id
+ * the Wiimote id
+ */
+ public WiimoteEvent(int id) {
+ super(id, WiiUseApiEvent.GENERIC_EVENT);
+ }
+
+ /**
+ * Construct the Wiimote setting up the id and the buttons.
+ *
+ * @param id
+ * the Wiimote id
+ * @param buttonsJustPressed
+ * buttons just pressed
+ * @param buttonsJustReleased
+ * buttons just released
+ * @param buttonsHeld
+ * buttons held
+ */
+ public WiimoteEvent(int id, short buttonsJustPressed,
+ short buttonsJustReleased, short buttonsHeld) {
+ super(id, WiiUseApiEvent.GENERIC_EVENT);
+ buttonsEvent = new WiimoteButtonsEvent(id, buttonsJustPressed,
+ buttonsJustReleased, buttonsHeld);
+ }
+
+ /**
+ * Tell if there is an IR Event.
+ *
+ * @return TRUE if there is an IR event.
+ */
+ public boolean isThereIrEvent() {
+ return infraredEvent != null;
+ }
+
+ /**
+ * Tell if there is a motion sensing Event.
+ *
+ * @return TRUE if there is a motion sensing event.
+ */
+ public boolean isThereMotionSensingEvent() {
+ return motionSensingEvent != null;
+ }
+
+ /**
+ * Get buttons event.
+ *
+ * @return the buttons event.
+ */
+ public WiimoteButtonsEvent getButtonsEvent() {
+ return buttonsEvent;
+ }
+
+ /**
+ * Get IR event.
+ *
+ * @return the IR event if there is one or null.
+ */
+ public IREvent getIREvent() {
+ return infraredEvent;
+ }
+
+ /**
+ * Get motion sensing event.
+ *
+ * @return the motion sensing event if there is one or null.
+ */
+ public MotionSensingEvent getMotionSensingEvent() {
+ return motionSensingEvent;
+ }
+
+ /**
+ * Prepare an IR event to populate.
+ *
+ * @param x
+ * calculated X coordinate.
+ * @param y
+ * calculated Y coordinate.
+ * @param z
+ * calculated distance.
+ * @param ax
+ * absolute X coordinate.
+ * @param ay
+ * absolute Y coordinate
+ * @param xVRes
+ * IR virtual screen x resolution.
+ * @param yVRes
+ * IR virtual screen y resolution.
+ * @param xOffset
+ * IR X correction offset.
+ * @param yOffset
+ * IR Y correction offset.
+ * @param sensorBarPostion
+ * aspect ratio of the screen.
+ * @param screenAsPectRatio
+ * IR sensor bar position.
+ * @param irSensitivity
+ * Sensitivity of the infrared camera.
+ * @param distance
+ * Pixel Distance between first two dots
+ */
+ public void prepareIRevent(int x, int y, int z, int ax, int ay, int xVRes,
+ int yVRes, int xOffset, int yOffset, short sensorBarPostion,
+ short screenAsPectRatio, short irSensitivity, float distance) {
+ if (infraredEvent == null) {
+ infraredEvent = new IREvent(getWiimoteId(), x, y, z, ax, ay, xVRes,
+ yVRes, xOffset, yOffset, sensorBarPostion,
+ screenAsPectRatio, irSensitivity, distance);
+ }
+ }
+
+ /**
+ * Add an IR point to the generic event. Create an IR Event if it's not
+ * created yet.
+ *
+ * @param x
+ * x coordinates.
+ * @param y
+ * y coordinates
+ * @param rx
+ * raw X coordinate (0-1023).
+ * @param ry
+ * raw Y coordinate (0-1023).
+ * @param size
+ * size of the IR dot (0-15).
+ */
+ public void addIRpoint(int x, int y, short rx, short ry, short size) {
+ if (infraredEvent != null)
+ infraredEvent.addIRpoint(x, y, rx, ry, size);
+ }
+
+ /**
+ * Set the Motion Sensing Event.
+ *
+ * @param orientationThreshold
+ * value of the minimum angle between two events with the
+ * accelerometer
+ * @param accelerationThreshold
+ * value of the value variation between two events with the
+ * accelerometer
+ * @param smoothingState
+ * true if smoothing flag is activated
+ * @param alphaSmooth
+ * value of the alpha smoothing parameter
+ * @param r
+ * roll
+ * @param p
+ * pitch
+ * @param ya
+ * yaw
+ * @param ar
+ * absolute roll
+ * @param ap
+ * absolute pitch
+ * @param x
+ * gravity force on x axis
+ * @param y
+ * gravity force on y axis
+ * @param z
+ * gravity force on z axis
+ * @param xx
+ * raw acceleration on x axis
+ * @param yy
+ * raw acceleration on y axis
+ * @param zz
+ * raw acceleration on z axis
+ */
+ public void setMotionSensingEvent(float orientationThreshold,
+ int accelerationThreshold, boolean smoothingState,
+ float alphaSmooth, float r, float p, float ya, float ar, float ap,
+ float x, float y, float z, short xx, short yy, short zz) {
+ motionSensingEvent = new MotionSensingEvent(getWiimoteId(),
+ orientationThreshold, accelerationThreshold, smoothingState,
+ alphaSmooth, r, p, ya, ar, ap, x, y, z, xx, yy, zz);
+ }
+
+ @Override
+ public String toString() {
+ String out = "";
+ /* Status */
+ out += "/*********** GENERIC EVENT : WIIMOTE ID :"
+ + super.getWiimoteId() + " ********/\n";
+
+ out += buttonsEvent;
+
+ if (infraredEvent != null) {
+ out += infraredEvent;
+ } else {
+ out += "/******** IR Tracking ********/\n";
+ out += "--- Active : false\n";
+ }
+
+ if (motionSensingEvent != null) {
+ out += motionSensingEvent;
+ } else {
+ out += "/******** Motion sensing ********/\n";
+ out += "--- Motion sensing : false \n";
+ }
+
+ return out;
+ }
+
+}
diff --git a/WiiUseJ/src/wiiusej/wiiusejevents/WiimoteListener.java b/WiiUseJ/src/wiiusej/wiiusejevents/WiimoteListener.java
new file mode 100644
index 0000000..32b754f
--- /dev/null
+++ b/WiiUseJ/src/wiiusej/wiiusejevents/WiimoteListener.java
@@ -0,0 +1,69 @@
+/**
+ * This file is part of WiiuseJ.
+ *
+ * WiiuseJ 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 3 of the License, or
+ * (at your option) any later version.
+ *
+ * WiiuseJ 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 WiiuseJ. If not, see .
+ */
+package wiiusej.wiiusejevents;
+
+/**
+ * This is the interface to implement to listen to events from wiimotes.
+ * The differents methods are called in this order :
+ * onButtonsEvent, onIrEvent, onMotionSensingEvent, onStatusEvent, onDisconnectionEvent.
+ *
+ * @author guiguito
+ */
+public interface WiimoteListener extends java.util.EventListener {
+
+ /**
+ * Method called on a button Event.
+ * @param e the buttonEvent with the last informations
+ * about the buttons of the wiimote.
+ */
+ void onButtonsEvent(WiimoteButtonsEvent e);
+
+ /**
+ * Method called when an IR event occurs.
+ * @param e the IREvent with the IR points seen.
+ */
+ void onIrEvent(IREvent e);
+
+ /**
+ * Method called when a motion sensing event occurs.
+ * @param e the motion sensing event with orientation and acceleration.
+ */
+ void onMotionSensingEvent(MotionSensingEvent e);
+
+ /**
+ * Method called on a status event.
+ * A status event occurs when :
+ * - we ask it
+ * - an expansion controller has been plugged
+ * - an expansion controller has been unplugged
+ * This is where you can get the different values of
+ * the parameters setup on your wiimote.
+ * @param e the status event.
+ */
+ void onStatusEvent(StatusEvent e);
+
+ /**
+ * This is the method called when a disconnection event occurs.
+ * A disconnection event happens when :
+ * - there are no battery left
+ * - the wiimote has just been turned off
+ * - the connection is dropped
+ * @param e the disconnection event.
+ */
+ void onDisconnectionEvent(DisconnectionEvent e);
+
+}