diff --git a/tag1/WiiUseJ/src/wiiusej/WiiUseApi.java b/tag1/WiiUseJ/src/wiiusej/WiiUseApi.java new file mode 100644 index 0000000..091f269 --- /dev/null +++ b/tag1/WiiUseJ/src/wiiusej/WiiUseApi.java @@ -0,0 +1,174 @@ +package wiiusej; + +/** + * Singleton used to manipulate WiiUse Api. + * @author gduche + * + */ +public class WiiUseApi { + + static { + System.loadLibrary("libWiiuseJ"); + } + + private static WiiUseApi instance = new WiiUseApi(); + + /** + * Get the only instance of WiiUseApi. + * @return + */ + static WiiUseApi getInstance(){ + return instance; + } + + /** + * Load the library. + * + * @return 0 if there is an error, 1 if everything is ok. + */ + native int loadLibrary(); + + /** + * Try to connect to 2 wiimotes. Make them rumble to show they are + * connected. + * + * @return 0 if there is an error otherwise it returns the number of + * wiimotes connected. + */ + native int doConnections(); + + /** + * Close connection to the wiimote with the given id. + * + */ + native void closeConnection(int id); + + /** + * Shutdown Wiiuse API. + * @return 0 if there is an error, 1 if everything is ok. + */ + native void shutdownApi(); + + /** + * Activate rumble on the wiimote with the given id. + * @param id the id of the wiimote. + */ + native void activateRumble(int id); + + /** + * Deactivate rumble on the wiimote with the given id. + * + * @param id the id of the wiimote. + */ + native void deactivateRumble(int id); + + /** + * Activate IR Tracking on the wiimote with the given id. + * @param id the id of the wiimote. + */ + native void activateIRTracking(int id); + + /** + * Deactivate IR Tracking on the wiimote with the given id. + * @param id the id of the wiimote. + */ + native void deactivateIRTracking(int id); + + /** + * Activate motion sensing on the wiimote with the given id. + * @param id the id of the wiimote. + */ + native void activateMotionSensing(int id); + + /** + * Deactivate motion sensing on the wiimote with the given id. + * @param id the id of the wiimote. + */ + native void deactivateMotionSensing(int id); + + /** + * Set wiimote leds status. + * @param id the id of the wiimote concerned + * @param led1 status of led1: True=ON, False=OFF + * @param led2 status of led2: True=ON, False=OFF + * @param led3 status of led3: True=ON, False=OFF + * @param led4 status of led4: True=ON, False=OFF + */ + native void setLeds(int id, boolean led1, boolean led2, boolean led3, boolean led4); + + /** + * Set how many degrees an angle must change to generate an event. + * @param id id of the wiimote concerned + * @param angle minimum angle detected by an event + */ + native void setOrientThreshold(int id, float angle); + + /** + * Make the the accelerometers give smoother results. + * This is set by default. + * @param id the id of the wiimote concerned + */ + native void activateSmoothing(int id); + + /** + * Make the the accelerometers give raw results. + * @param id the id of the wiimote concerned + */ + native void deactivateSmoothing(int id); + + /** + * Make the wiimote generate an event each time we poll. + * Not set by default. + * @param id the id of the wiimote concerned + */ + native void activateContinuous(int id); + + /** + * Make the wiimote generate an event only when there is one. + * @param id the id of the wiimote concerned + */ + native void deactivateContinuous(int id); + + /** + * Get status and values from the wiimotes and send it through callbacks. + * + * @param id the id of the wiimote of which we want the status. + */ + native void getStatus(int id); + + /** + * Get status and values from the wiimotes and send it through callbacks. + * + * @param mote The WiimoteEvent object to fill with the datas. + */ + native void specialPoll(WiiMoteEvent mote); + + + /* Tests */ + public static void main(String[] args) { + + /* Test JNI Side */ + WiiUseApi manager = new WiiUseApi(); + + int value = manager.loadLibrary(); + System.out.println("loadLibrary : " + value); + + value = manager.doConnections(); + System.out.println("doConnections : " + value); + + WiiMoteEvent mote = new WiiMoteEvent(); + + manager.getStatus(1); + System.out.println("Status : \n" + mote); + + System.out.println(""); + System.out.println("!!!!!!!!!!!!!! Polling !!!!!!!!!"); + while (true) { + manager.specialPoll(mote); + System.out.println(mote); + mote.EmptyIRPoints(); + } + // manager.closeConnectionsAndShutDown(); + } + +}