Basis voor Gesture herkenning toegevoegd / verbeterd. WiimoteDevice gebruikt nu ook een MotionDevice om MotionData op te slaan en opnieuw af te spelen.

This commit is contained in:
2012-03-09 09:55:40 +00:00
parent a12588c048
commit a50f873d39
24 changed files with 374 additions and 153 deletions

View File

@@ -1,5 +1,8 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project default="jar" name="Build file for Project Mimis"> <project default="jar" name="Build file for Project Mimis">
<!-- All -->
<target name="all" depends="javadoc, jar, launch4j"></target>
<!-- Javadoc --> <!-- Javadoc -->
<target name="javadoc"> <target name="javadoc">
<javadoc access="private" author="true" classpath="cfg;resource;lib/log4j-1.2.16.jar;lib/jxinput.jar;lib/commons-logging-1.1.1.jar;lib/jacob-1.15-M3.jar" destdir="doc" nodeprecated="false" nodeprecatedlist="false" noindex="false" nonavbar="false" notree="false" packagenames="mimis.exception.macro,mimis.device.network,wiiusej,mimis.application.itunes,mimis.exception.util,mimis.device.javainput,wiiusej.wiiusejevents,wiiusej.wiiusejevents.utils,mimis.util.swing,mimis.exception.worker,mimis.application.lirc,mimis.application.cmd.windows.winamp,wiiusej.values,mimis.exception.event,mimis.device.lirc.remote,mimis.device.panel,mimis.exception.device,mimis.exception.button,mimis.application.robot,mimis.application.lirc.ipod,mimis.exception.task.action,mimis.exception.application,wiiusej.wiiusejevents.wiiuseapievents,mimis.application.cmd.windows.gomplayer,mimis.application.mpc,org.wiigee.logic,mimis.device.lirc,mimis.sequence,mimis.manager,org.wiigee.util,mimis.event,mimis.application.cmd.windows.wmp,mimis.value,mimis.device.javainput.extreme3d,mimis.event.router,mimis.application.cmd,mimis.worker,org.wiigee.event,mimis.device.wiimote,mimis.device.wiimote.gesture.event,wiiusej.wiiusejevents.physicalevents,mimis.util.multiplexer,mimis,org.wiigee.control,mimis.exception.device.javainput,mimis.util,mimis.application.cmd.windows,com.dt.iTunesController,org.wiigee.device,mimis.application.vlc,mimis.device.wiimote.gesture,mimis.device.jintellitype,mimis.event.feedback,mimis.device,org.wiigee.filter,mimis.exception.application.windows,mimis.application,mimis.sequence.state,mimis.device.javainput.rumblepad,com.melloware.jintellitype,mimis.exception.event.router,mimis.exception.task,mimis.exception" source="1.6" sourcepath="src" splitindex="true" use="true" version="true" /> <javadoc access="private" author="true" classpath="cfg;resource;lib/log4j-1.2.16.jar;lib/jxinput.jar;lib/commons-logging-1.1.1.jar;lib/jacob-1.15-M3.jar" destdir="doc" nodeprecated="false" nodeprecatedlist="false" noindex="false" nonavbar="false" notree="false" packagenames="mimis.exception.macro,mimis.device.network,wiiusej,mimis.application.itunes,mimis.exception.util,mimis.device.javainput,wiiusej.wiiusejevents,wiiusej.wiiusejevents.utils,mimis.util.swing,mimis.exception.worker,mimis.application.lirc,mimis.application.cmd.windows.winamp,wiiusej.values,mimis.exception.event,mimis.device.lirc.remote,mimis.device.panel,mimis.exception.device,mimis.exception.button,mimis.application.robot,mimis.application.lirc.ipod,mimis.exception.task.action,mimis.exception.application,wiiusej.wiiusejevents.wiiuseapievents,mimis.application.cmd.windows.gomplayer,mimis.application.mpc,org.wiigee.logic,mimis.device.lirc,mimis.sequence,mimis.manager,org.wiigee.util,mimis.event,mimis.application.cmd.windows.wmp,mimis.value,mimis.device.javainput.extreme3d,mimis.event.router,mimis.application.cmd,mimis.worker,org.wiigee.event,mimis.device.wiimote,mimis.device.wiimote.gesture.event,wiiusej.wiiusejevents.physicalevents,mimis.util.multiplexer,mimis,org.wiigee.control,mimis.exception.device.javainput,mimis.util,mimis.application.cmd.windows,com.dt.iTunesController,org.wiigee.device,mimis.application.vlc,mimis.device.wiimote.gesture,mimis.device.jintellitype,mimis.event.feedback,mimis.device,org.wiigee.filter,mimis.exception.application.windows,mimis.application,mimis.sequence.state,mimis.device.javainput.rumblepad,com.melloware.jintellitype,mimis.exception.event.router,mimis.exception.task,mimis.exception" source="1.6" sourcepath="src" splitindex="true" use="true" version="true" />

View File

@@ -2,14 +2,14 @@ package mimis.device.lirc;
import mimis.application.cmd.CMDApplication; import mimis.application.cmd.CMDApplication;
import mimis.device.Device; import mimis.device.Device;
import mimis.device.lirc.button.ColorButton;
import mimis.device.lirc.button.NumberButton;
import mimis.device.lirc.remote.DenonRC176Button; import mimis.device.lirc.remote.DenonRC176Button;
import mimis.device.lirc.remote.PhiliphsRCLE011Button; import mimis.device.lirc.remote.PhiliphsRCLE011Button;
import mimis.device.lirc.remote.SamsungBN5901015AButton; import mimis.device.lirc.remote.SamsungBN5901015AButton;
import mimis.exception.worker.ActivateException; import mimis.exception.worker.ActivateException;
import mimis.exception.worker.DeactivateException; import mimis.exception.worker.DeactivateException;
import mimis.input.Button; import mimis.input.Button;
import mimis.input.button.ColorButton;
import mimis.input.button.NumberButton;
import mimis.input.state.Press; import mimis.input.state.Press;
import mimis.input.state.Release; import mimis.input.state.Release;
import mimis.util.Multiplexer; import mimis.util.Multiplexer;

View File

@@ -1,7 +0,0 @@
package mimis.device.lirc.remote;
import mimis.input.Button;
public enum ColorButton implements Button {
RED, GREEN, YELLOW, BLUE;
}

View File

@@ -2,6 +2,7 @@ package mimis.device.wiimote;
import mimis.device.Device; import mimis.device.Device;
import mimis.device.wiimote.gesture.GestureDevice; import mimis.device.wiimote.gesture.GestureDevice;
import mimis.device.wiimote.motion.MotionDevice;
import mimis.exception.button.UnknownButtonException; import mimis.exception.button.UnknownButtonException;
import mimis.exception.device.DeviceNotFoundException; import mimis.exception.device.DeviceNotFoundException;
import mimis.exception.worker.ActivateException; import mimis.exception.worker.ActivateException;
@@ -12,6 +13,7 @@ import mimis.input.state.Press;
import mimis.input.state.Release; import mimis.input.state.Release;
import mimis.util.ArrayCycle; import mimis.util.ArrayCycle;
import mimis.value.Action; import mimis.value.Action;
import mimis.value.Signal;
import mimis.worker.Component; import mimis.worker.Component;
import mimis.worker.Worker; import mimis.worker.Worker;
@@ -37,6 +39,7 @@ public class WiimoteDevice extends Component implements Device, GestureListener
protected Wiimote wiimote; protected Wiimote wiimote;
protected boolean connected; protected boolean connected;
protected GestureDevice gestureDevice; protected GestureDevice gestureDevice;
protected MotionDevice motionDevice;
protected int gestureId; protected int gestureId;
protected LedWorker ledWorker; protected LedWorker ledWorker;
protected boolean disconnect; protected boolean disconnect;
@@ -52,12 +55,15 @@ public class WiimoteDevice extends Component implements Device, GestureListener
wiimoteDiscovery = new WiimoteDiscovery(this); wiimoteDiscovery = new WiimoteDiscovery(this);
gestureDevice = new GestureDevice(); gestureDevice = new GestureDevice();
gestureDevice.add(this); gestureDevice.add(this);
motionDevice = new MotionDevice(this);
gestureId = 0; gestureId = 0;
ledWorker = new LedWorker(); ledWorker = new LedWorker();
} }
/* Worker */ /* Worker */
protected void activate() throws ActivateException { protected void activate() throws ActivateException {
motionDevice.setRouter(router);
motionDevice.start();
parser(Action.ADD, taskMapCycle.player); parser(Action.ADD, taskMapCycle.player);
wiimote = null; wiimote = null;
try { try {
@@ -93,6 +99,7 @@ public class WiimoteDevice extends Component implements Device, GestureListener
super.deactivate(); super.deactivate();
ledWorker.stop(); ledWorker.stop();
wiimoteDiscovery.stop(); wiimoteDiscovery.stop();
motionDevice.stop();
if (disconnect) { if (disconnect) {
if (wiimote != null) { if (wiimote != null) {
wiimote.disconnect(); wiimote.disconnect();
@@ -111,6 +118,7 @@ public class WiimoteDevice extends Component implements Device, GestureListener
} }
wiimoteService.exit(); wiimoteService.exit();
wiimoteDiscovery.exit(); wiimoteDiscovery.exit();
motionDevice.exit();
} }
/* Events */ /* Events */
@@ -128,35 +136,46 @@ public class WiimoteDevice extends Component implements Device, GestureListener
parser(Action.RESET, taskMapCycle.like); parser(Action.RESET, taskMapCycle.like);
parser(Action.ADD, taskMapCycle.player); parser(Action.ADD, taskMapCycle.player);
break; break;
case RECOGNIZE:
log.debug("Gesture recognize press");
gestureDevice.recognize(Signal.BEGIN);
break;
case TRAIN: case TRAIN:
log.debug("Gesture train"); log.debug("Gesture train press");
gestureDevice.train(); gestureDevice.train(Signal.BEGIN);
break;
case CLOSE:
log.debug("Gesture close press");
gestureDevice.close(Signal.BEGIN);
break; break;
case SAVE: case SAVE:
log.debug("Gesture save"); log.debug("Gesture save");
gestureDevice.close(); gestureDevice.close(Signal.END);
gestureDevice.saveGesture(gestureId, "C:\\gesture-" + gestureId); gestureDevice.saveGesture(gestureId, "tmp/gesture #" + gestureId);
++gestureId; ++gestureId;
break; break;
case LOAD: case LOAD:
log.debug("Gesture load"); log.debug("Gesture load");
for (int i = 0; i < gestureId; ++i) { for (int i = 0; i < gestureId; ++i) {
gestureDevice.loadGesture("C:\\gesture-" + i); gestureDevice.loadGesture("tmp/gesture #" + gestureId);
} }
break; break;
case RECOGNIZE:
log.debug("Gesture recognize");
gestureDevice.recognize();
break;
} }
} }
public void end(Action action) { public void end(Action action) {
switch (action) { switch (action) {
case TRAIN:
case RECOGNIZE: case RECOGNIZE:
log.debug("Gesture stop"); log.debug("Gesture recognize release");
gestureDevice.stop(); gestureDevice.recognize(Signal.END);
break;
case TRAIN:
log.debug("Gesture train release");
gestureDevice.train(Signal.END);
break;
case CLOSE:
log.debug("Gesture close release");
gestureDevice.close(Signal.END);
break; break;
} }
} }
@@ -172,9 +191,9 @@ public class WiimoteDevice extends Component implements Device, GestureListener
public synchronized void connect() throws DeviceNotFoundException { public synchronized void connect() throws DeviceNotFoundException {
wiimote = wiimoteService.getDevice(this); wiimote = wiimoteService.getDevice(this);
//wiimote.activateContinuous(); //wiimote.activateContinuous();
wiimote.activateMotionSensing();
wiimoteDiscovery.stop(); wiimoteDiscovery.stop();
ledWorker.start(); ledWorker.start();
//sleep(10000);
} }
/* Listeners */ /* Listeners */
@@ -196,6 +215,7 @@ public class WiimoteDevice extends Component implements Device, GestureListener
public void onMotionSensingEvent(MotionSensingEvent event) { public void onMotionSensingEvent(MotionSensingEvent event) {
gestureDevice.add(event.getGforce()); gestureDevice.add(event.getGforce());
motionDevice.add(event);
} }
public void onIrEvent(IREvent event) { public void onIrEvent(IREvent event) {
@@ -203,6 +223,7 @@ public class WiimoteDevice extends Component implements Device, GestureListener
} }
public void gestureReceived(GestureEvent event) { public void gestureReceived(GestureEvent event) {
log.debug(event.isValid());
if (event.isValid()) { if (event.isValid()) {
System.out.printf("id #%d, prob %.0f%%, valid %b\n", event.getId(), 100 * event.getProbability(), event.isValid()); System.out.printf("id #%d, prob %.0f%%, valid %b\n", event.getId(), 100 * event.getProbability(), event.isValid());
} }

View File

@@ -89,7 +89,6 @@ public class WiimoteService extends WiiUseApiManager implements WiimoteListener
} }
public void onStatusEvent(StatusEvent event) { public void onStatusEvent(StatusEvent event) {
//log.debug(event);
if (event.isConnected()) { if (event.isConnected()) {
WiimoteDevice wiimoteDevice = getWiimoteDevice(event); WiimoteDevice wiimoteDevice = getWiimoteDevice(event);
wiimoteDevice.connected = true; wiimoteDevice.connected = true;

View File

@@ -20,10 +20,10 @@ public class WiimoteTaskMapCycle extends TaskMapCycle {
/* Gesture */ /* Gesture */
gesture = new TaskMap(); gesture = new TaskMap();
gesture.add(WiimoteButton.A, new Task(Action.TRAIN)); gesture.add(WiimoteButton.A, new Task(Action.TRAIN, Target.SELF));
gesture.add(WiimoteButton.B, new Task(Action.SAVE)); gesture.add(WiimoteButton.B, new Task(Action.SAVE, Target.SELF));
gesture.add(WiimoteButton.DOWN, new Task(Action.LOAD)); gesture.add(WiimoteButton.DOWN, new Task(Action.LOAD, Target.SELF));
gesture.add(WiimoteButton.HOME, new Task(Action.RECOGNIZE)); gesture.add(WiimoteButton.HOME, new Task(Action.RECOGNIZE, Target.SELF));
add(gesture); add(gesture);
/* Player */ /* Player */

View File

@@ -1,29 +1,35 @@
package mimis.device.wiimote.gesture; package mimis.device.wiimote.gesture;
import mimis.device.wiimote.gesture.event.Close; import mimis.value.Signal;
import mimis.device.wiimote.gesture.event.Recognize;
import mimis.device.wiimote.gesture.event.Train;
import org.wiigee.device.Device; import org.wiigee.device.Device;
import org.wiigee.event.AccelerationEvent;
import org.wiigee.event.AccelerationListener;
import org.wiigee.event.ButtonListener; import org.wiigee.event.ButtonListener;
import org.wiigee.event.ButtonPressedEvent; import org.wiigee.event.ButtonPressedEvent;
import org.wiigee.event.ButtonReleasedEvent;
import org.wiigee.event.GestureListener; import org.wiigee.event.GestureListener;
import org.wiigee.event.MotionStartEvent;
import org.wiigee.event.MotionStopEvent;
import wiiusej.values.GForce; import wiiusej.values.GForce;
public class GestureDevice extends Device /*implements AccelerationListener */{ public class GestureDevice extends Device implements AccelerationListener {
public static final boolean AUTOFILTERING = true; public static final boolean AUTOFILTERING = true;
//public static final boolean AUTOMOTION = true; public static final boolean AUTOMOTION = false;
public GestureDevice(boolean autofiltering/*, boolean automotion*/) {
super(autofiltering);
/*if (automotion) {
addAccelerationListener(this);
}*/
}
public GestureDevice() { public GestureDevice() {
this(AUTOFILTERING/*, AUTOMOTION*/); this(AUTOFILTERING, AUTOMOTION);
}
public GestureDevice(boolean autofiltering, boolean automotion) {
super(autofiltering);
if (automotion) {
addAccelerationListener(this);
}
this.setRecognitionButton(ButtonPressedEvent.BUTTON_A);
this.setTrainButton(ButtonPressedEvent.BUTTON_B);
this.setCloseGestureButton(ButtonPressedEvent.BUTTON_HOME);
} }
public void add(GestureListener gestureListener) { public void add(GestureListener gestureListener) {
@@ -42,40 +48,65 @@ public class GestureDevice extends Device /*implements AccelerationListener */{
fireAccelerationEvent(vector); fireAccelerationEvent(vector);
} }
public void recognize() { public void recognize(Signal signal) {
fireButtonPressedEvent(new Recognize(this)); switch (signal) {
case BEGIN:
fireButtonPressedEvent(ButtonPressedEvent.BUTTON_A);
break;
case END:
fireButtonReleasedEvent(ButtonPressedEvent.BUTTON_A);
break;
}
} }
public void train() { public void train(Signal signal) {
fireButtonPressedEvent(new Train(this)); switch (signal) {
case BEGIN:
fireButtonPressedEvent(ButtonPressedEvent.BUTTON_B);
break;
case END:
fireButtonReleasedEvent(ButtonPressedEvent.BUTTON_B);
break;
}
} }
public void close() { public void close(Signal signal) {
fireButtonPressedEvent(new Close(this)); switch (signal) {
case BEGIN:
fireButtonPressedEvent(ButtonPressedEvent.BUTTON_HOME);
break;
case END:
fireButtonReleasedEvent(ButtonPressedEvent.BUTTON_HOME);
break;
}
} }
public void stop() { public void fireButtonPressedEvent(int button) {
fireButtonReleasedEvent(0); ButtonPressedEvent buttonPressedEvent = new ButtonPressedEvent(this, button);
} for (ButtonListener buttonListener : buttonlistener) {
buttonListener.buttonPressReceived(buttonPressedEvent);
public void fireButtonPressedEvent(ButtonPressedEvent buttonPressedEvent) {
for (ButtonListener bttnLstnr : buttonlistener) {
bttnLstnr.buttonPressReceived(buttonPressedEvent);
} }
if (buttonPressedEvent.isRecognitionInitEvent() || buttonPressedEvent.isTrainInitEvent()) { if (buttonPressedEvent.isRecognitionInitEvent() || buttonPressedEvent.isTrainInitEvent()) {
this.resetAccelerationFilters(); resetAccelerationFilters();
} }
} }
/*public void accelerationReceived(AccelerationEvent event) {} public void fireButtonReleasedEvent(int button) {
ButtonReleasedEvent buttonReleasedEvent = new ButtonReleasedEvent(this, button);
for (ButtonListener buttonListener : buttonlistener) {
buttonListener.buttonReleaseReceived(buttonReleasedEvent);
}
}
public void accelerationReceived(AccelerationEvent event) {}
public void motionStartReceived(MotionStartEvent event) { public void motionStartReceived(MotionStartEvent event) {
//System.out.println("Motion start!"); System.out.println("Motion start !" + System.currentTimeMillis());
recognize(); recognize(Signal.BEGIN);
} }
public void motionStopReceived(MotionStopEvent event) { public void motionStopReceived(MotionStopEvent event) {
//System.out.println("Motion stop!"); System.out.println("Motion stop! " + + System.currentTimeMillis());
stop(); recognize(Signal.END);
}*/ }
} }

View File

@@ -1,24 +0,0 @@
package mimis.device.wiimote.gesture.event;
import org.wiigee.device.Device;
import org.wiigee.event.ButtonPressedEvent;
public class Close extends ButtonPressedEvent {
protected static final long serialVersionUID = 1L;
public Close(Device device) {
super(device, 0);
}
public boolean isRecognitionInitEvent() {
return false;
}
public boolean isTrainInitEvent() {
return false;
}
public boolean isCloseGestureInitEvent() {
return true;
}
}

View File

@@ -1,24 +0,0 @@
package mimis.device.wiimote.gesture.event;
import org.wiigee.device.Device;
import org.wiigee.event.ButtonPressedEvent;
public class Recognize extends ButtonPressedEvent {
protected static final long serialVersionUID = 1L;
public Recognize(Device device) {
super(device, 0);
}
public boolean isRecognitionInitEvent() {
return true;
}
public boolean isTrainInitEvent() {
return false;
}
public boolean isCloseGestureInitEvent() {
return false;
}
}

View File

@@ -1,24 +0,0 @@
package mimis.device.wiimote.gesture.event;
import org.wiigee.device.Device;
import org.wiigee.event.ButtonPressedEvent;
public class Train extends ButtonPressedEvent {
protected static final long serialVersionUID = 1L;
public Train(Device device) {
super(device, 0);
}
public boolean isRecognitionInitEvent() {
return false;
}
public boolean isTrainInitEvent() {
return true;
}
public boolean isCloseGestureInitEvent() {
return false;
}
}

View File

@@ -0,0 +1,29 @@
package mimis.device.wiimote.motion;
import java.io.Serializable;
import wiiusej.wiiusejevents.physicalevents.MotionSensingEvent;
public class MotionData implements Serializable {
protected static final long serialVersionUID = 1L;
protected int time;
protected MotionSensingEvent event;
public MotionData(long time, MotionSensingEvent event) {
this((int) time, event);
}
public MotionData(int time, MotionSensingEvent event) {
this.time = time;
this.event = event;
}
public int getTime() {
return time;
}
public MotionSensingEvent getEvent() {
return event;
}
}

View File

@@ -0,0 +1,190 @@
package mimis.device.wiimote.motion;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import mimis.device.lirc.LircButton;
import mimis.device.lirc.remote.PhiliphsRCLE011Button;
import mimis.device.wiimote.WiimoteDevice;
import mimis.exception.worker.ActivateException;
import mimis.exception.worker.DeactivateException;
import mimis.input.Button;
import mimis.input.button.ColorButton;
import mimis.input.button.NumberButton;
import mimis.input.state.State;
import mimis.value.Action;
import mimis.worker.Component;
import mimis.worker.Worker;
import wiiusej.wiiusejevents.physicalevents.MotionSensingEvent;
public class MotionDevice extends Component {
protected WiimoteDevice wiimoteDevice;
protected int id;
protected long start;
protected boolean replay;
protected Action action;
public ReplayWorker replayWorker;
public ArrayList<MotionData> motionList;
public MotionDevice(WiimoteDevice wiimoteDevice) {
this.wiimoteDevice = wiimoteDevice;
id = 0;
start = -1;
replay = false;
action = Action.TRAIN;
replayWorker = new ReplayWorker();
motionList = new ArrayList<MotionData>();
}
public void activate() throws ActivateException {
super.activate();
listen(State.class);
}
public void deactivate() throws DeactivateException {
replayWorker.stop();
super.deactivate();
}
public void exit() {
super.exit();
replayWorker.exit();
}
public void release(Button button) {
if (button instanceof LircButton) {
PhiliphsRCLE011Button lircButton = (PhiliphsRCLE011Button) button;
log.debug(lircButton);
switch (lircButton) {
case CLOCK:
action = Action.TRAIN;
break;
case OUT:
action = Action.RECOGNIZE;
break;
case MUTE:
wiimoteDevice.begin(Action.CLOSE);
break;
case SCREEN_UP:
wiimoteDevice.begin(Action.SAVE);
break;
case SCREEN_DOWN:
wiimoteDevice.begin(Action.LOAD);
break;
}
} else if (button instanceof NumberButton) {
NumberButton numberButton = (NumberButton) button;
id = numberButton.ordinal();
if (replay == false) {
release(ColorButton.YELLOW);
} else {
log.debug("Set file to #" + id);
}
} else if (button instanceof ColorButton) {
ColorButton colorButton = (ColorButton) button;
log.debug(colorButton.name());
synchronized (motionList) {
switch (colorButton) {
case GREEN:
log.debug("Start capturing motion");
motionList.clear();
start = System.currentTimeMillis();
break;
case RED:
if (replayWorker.active()) {
log.debug("Stop replaying motion");
replayWorker.stop();
} else {
log.debug("Writing motion to file #" + id);
try {
FileOutputStream fileOutputStream = new FileOutputStream(String.format("tmp/motion #%d.bin", id));
ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream);
objectOutputStream.writeObject(motionList.size());
for (MotionData motionData : motionList) {
objectOutputStream.writeObject(motionData);
}
objectOutputStream.close();
} catch (IOException e) {
log.error(e);
}
motionList.clear();
start = -1;
}
break;
case YELLOW:
log.debug("Replaying motion from file #" + id);
replay = true;
replayWorker.start();
break;
}
}
}
}
public void add(MotionSensingEvent event) {
if (start > 0) {
synchronized (motionList) {
motionList.add(new MotionData(System.currentTimeMillis() - start, event));
}
}
}
class ReplayWorker extends Worker {
protected ObjectInputStream objectInputStream;
protected int count, i, time;
protected void activate() throws ActivateException {
try {
FileInputStream fileInputStream = new FileInputStream(String.format("tmp/motion #%d.bin", id));
objectInputStream = new ObjectInputStream(fileInputStream);
count = (Integer) objectInputStream.readObject();
i = time = 0;
wiimoteDevice.begin(action);
super.activate();
return;
} catch (FileNotFoundException e) {
log.error(e);
} catch (IOException e) {
log.error(e);
} catch (ClassNotFoundException e) {
log.error(e);
}
}
protected void deactivate() throws DeactivateException {
log.debug(String.format("Replay stopped (%d ms)", time));
wiimoteDevice.end(action);
replay = false;
try {
objectInputStream.close();
} catch (IOException e) {
log.debug(e);
}
super.deactivate();
}
protected void work() {
if (i++ < count) {
try {
Object object = objectInputStream.readObject();
MotionData motionData = (MotionData) object;
wiimoteDevice.onMotionSensingEvent(motionData.getEvent());
sleep(motionData.getTime() - time);
time = motionData.getTime();
return;
} catch (IOException e) {
log.error(e);
} catch (ClassNotFoundException e) {
log.error(e);
}
}
stop();
}
}
}

View File

@@ -1,4 +1,4 @@
package mimis.device.lirc.button; package mimis.input.button;
import mimis.input.Button; import mimis.input.Button;

View File

@@ -1,4 +1,4 @@
package mimis.device.lirc.button; package mimis.input.button;
import mimis.input.Button; import mimis.input.Button;

View File

@@ -1,5 +1,5 @@
package mimis.value; package mimis.value;
public enum Action { public enum Action {
EXIT, FORWARD, MUTE, NEXT, PAUSE, PLAY, PREVIOUS, REPEAT, RESUME, REWIND, START, TEST, VOLUME_DOWN, VOLUME_UP, FULLSCREEN, TRAIN, STOP, SAVE, RECOGNIZE, LOAD, SHUFFLE, FADEOUT, QUIT, VISUALISER, LIKE, DISLIKE, ACTIVATE, SHIFT, UNSHIFT, ADD, REMOVE, RESET, CURRENT; EXIT, FORWARD, MUTE, NEXT, PAUSE, PLAY, PREVIOUS, REPEAT, RESUME, REWIND, START, TEST, VOLUME_DOWN, VOLUME_UP, FULLSCREEN, TRAIN, STOP, SAVE, RECOGNIZE, LOAD, SHUFFLE, FADEOUT, QUIT, VISUALISER, LIKE, DISLIKE, ACTIVATE, SHIFT, UNSHIFT, ADD, REMOVE, RESET, CURRENT, CLOSE;
} }

View File

@@ -1,8 +1,11 @@
package mimis.worker; package mimis.worker;
import mimis.input.Button;
import mimis.input.Feedback; import mimis.input.Feedback;
import mimis.input.Input; import mimis.input.Input;
import mimis.input.Task; import mimis.input.Task;
import mimis.input.state.Press;
import mimis.input.state.Release;
import mimis.input.state.State; import mimis.input.state.State;
import mimis.parser.ParserInput; import mimis.parser.ParserInput;
import mimis.router.Router; import mimis.router.Router;
@@ -62,14 +65,24 @@ public abstract class Component extends Listener<Input> {
} }
public void input(Input input) { public void input(Input input) {
if (input instanceof Task) { if (input instanceof State) {
log.debug("task " + ((Task) input).getAction()); state((State) input);
} else if (input instanceof Task) {
task((Task) input); task((Task) input);
} else if (input instanceof Feedback) { } else if (input instanceof Feedback) {
feedback((Feedback) input); feedback((Feedback) input);
} }
} }
protected void state(State state) {
Button button = state.getButton();
if (state instanceof Press) {
press(button);
} else if (state instanceof Release) {
release(button);
}
}
protected void task(Task task) { protected void task(Task task) {
Action action = task.getAction(); Action action = task.getAction();
switch (task.getSignal()) { switch (task.getSignal()) {
@@ -98,6 +111,8 @@ public abstract class Component extends Listener<Input> {
} }
} }
protected void press(Button button) {}
protected void release(Button button) {}
protected void feedback(Feedback feedback) {} protected void feedback(Feedback feedback) {}
protected void action(Action action) {} protected void action(Action action) {}
protected void begin(Action action) {} protected void begin(Action action) {}

View File

@@ -173,7 +173,7 @@ public class Device {
this.processingunit.saveGesture(id, filename); this.processingunit.saveGesture(id, filename);
} }
// ###### Event-Methoden // ###### Event-Methods
/** Fires an acceleration event. /** Fires an acceleration event.
* @param vector Consists of three values: * @param vector Consists of three values:
* acceleration on X, Y and Z axis. * acceleration on X, Y and Z axis.

View File

@@ -34,16 +34,15 @@ import org.wiigee.device.Device;
* @author Benjamin 'BePo' Poppinga * @author Benjamin 'BePo' Poppinga
*/ */
public class ButtonReleasedEvent extends ActionStopEvent { public class ButtonReleasedEvent extends ActionStopEvent {
int button;
int button; public ButtonReleasedEvent(Device source, int button) {
super(source);
this.button = button;
}
public ButtonReleasedEvent(Device source, int button) { public int getButton() {
super(source); return this.button;
this.button = button; }
}
public int getButton() {
return this.button;
}
} }

View File

@@ -112,7 +112,7 @@ public class TriggeredProcessingUnit extends ProcessingUnit {
Log.write("Recognition started!"); Log.write("Recognition started!");
this.analyzing=true; this.analyzing=true;
} }
System.err.println(analyzing + " " + learning + " " + event.isCloseGestureInitEvent());
// CloseGestureButton = starts the training of the model with multiple // CloseGestureButton = starts the training of the model with multiple
// recognized gestures, contained in trainsequence // recognized gestures, contained in trainsequence
if((!this.analyzing && !this.learning) && if((!this.analyzing && !this.learning) &&

View File

@@ -16,12 +16,15 @@
*/ */
package wiiusej.values; package wiiusej.values;
import java.io.Serializable;
/** /**
* Represents gravity force on each axis. * Represents gravity force on each axis.
* *
* @author guiguito * @author guiguito
*/ */
public class GForce { public class GForce implements Serializable {
protected static final long serialVersionUID = 1L;
private float x; private float x;
private float y; private float y;

View File

@@ -16,12 +16,15 @@
*/ */
package wiiusej.values; package wiiusej.values;
import java.io.Serializable;
/** /**
* Class that represents the orientation of the wiimote. * Class that represents the orientation of the wiimote.
* *
* @author guiguito * @author guiguito
*/ */
public class Orientation { public class Orientation implements Serializable {
protected static final long serialVersionUID = 1L;
private float roll; private float roll;
private float pitch; private float pitch;

View File

@@ -16,12 +16,15 @@
*/ */
package wiiusej.values; package wiiusej.values;
import java.io.Serializable;
/** /**
* Represents raw acceleration on each axis. * Represents raw acceleration on each axis.
* *
* @author guiguito * @author guiguito
*/ */
public class RawAcceleration { public class RawAcceleration implements Serializable {
protected static final long serialVersionUID = 1L;
private short x; private short x;
private short y; private short y;

View File

@@ -16,12 +16,15 @@
*/ */
package wiiusej.wiiusejevents; package wiiusej.wiiusejevents;
import java.io.Serializable;
/** /**
* Abstract mother class representing an event with a wiimote id. * Abstract mother class representing an event with a wiimote id.
* *
* @author guiguito * @author guiguito
*/ */
public abstract class GenericEvent { public abstract class GenericEvent implements Serializable {
protected static final long serialVersionUID = 1L;
/* ID */ /* ID */
private int wiimoteId = -1; private int wiimoteId = -1;

View File

@@ -27,8 +27,9 @@ import wiiusej.wiiusejevents.GenericEvent;
* @author guiguito * @author guiguito
*/ */
public class MotionSensingEvent extends GenericEvent { public class MotionSensingEvent extends GenericEvent {
protected static final long serialVersionUID = 1L;
/* Motion Sensing */ /* Motion Sensing */
private Orientation orientation; private Orientation orientation;
private GForce gforce; private GForce gforce;
private RawAcceleration acceleration; private RawAcceleration acceleration;