From 84fb300464246db5291ffbc2a9d497af59df62fc Mon Sep 17 00:00:00 2001 From: Rik Veenboer Date: Thu, 2 Jun 2011 20:15:54 +0000 Subject: [PATCH] Multiplexer ten behoeve van Lirc toegevoegd. --- java/cfg/log4j.properties | 2 +- java/src/mimis/Device.java | 1 + java/src/mimis/Worker.java | 9 ++-- java/src/mimis/device/lirc/LircDevice.java | 29 ++++++++--- java/src/mimis/device/lirc/LircService.java | 10 ++-- .../lirc/button/PhiliphsRCLE011Button.java | 12 +---- java/src/mimis/util/Multiplexer.java | 49 +++++++++++++++++-- .../util/multiplexer/SignalListener.java | 7 +++ java/src/mimis/value/Action.java | 14 ------ java/src/mimis/value/Signal.java | 5 ++ 10 files changed, 94 insertions(+), 44 deletions(-) create mode 100644 java/src/mimis/util/multiplexer/SignalListener.java create mode 100644 java/src/mimis/value/Signal.java diff --git a/java/cfg/log4j.properties b/java/cfg/log4j.properties index 0cce0b6..62c7729 100644 --- a/java/cfg/log4j.properties +++ b/java/cfg/log4j.properties @@ -1,4 +1,4 @@ -log4j.rootLogger=TRACE, CA +log4j.rootLogger=DEBUG, CA log4j.appender.CA=org.apache.log4j.ConsoleAppender log4j.appender.CA.layout=org.apache.log4j.PatternLayout log4j.appender.CA.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n diff --git a/java/src/mimis/Device.java b/java/src/mimis/Device.java index f4b05a9..cfa5766 100644 --- a/java/src/mimis/Device.java +++ b/java/src/mimis/Device.java @@ -76,6 +76,7 @@ public abstract class Device extends EventHandler implements Titled, Exitable { /* Recognize events */ protected void add(State state) { + log.debug(state.toString() + " " + state.getButton()); sequenceListener.add(state); } diff --git a/java/src/mimis/Worker.java b/java/src/mimis/Worker.java index 2dd9a59..ea0a030 100644 --- a/java/src/mimis/Worker.java +++ b/java/src/mimis/Worker.java @@ -13,7 +13,7 @@ public abstract class Worker implements Runnable { protected boolean active = false; public void start(boolean thread) { - log.debug("Start"); + log.trace("Start"); running = true; if (thread) { log.debug("Start thread"); @@ -29,7 +29,7 @@ public abstract class Worker implements Runnable { } public void stop() { - log.debug("Stop"); + log.trace("Stop"); if (active()) { deactivate(); } @@ -66,6 +66,9 @@ public abstract class Worker implements Runnable { start(thread); } active = true; + synchronized (this) { + notifyAll(); + } } public void deactivate() { @@ -79,7 +82,7 @@ public abstract class Worker implements Runnable { } else { try { synchronized (this) { - log.debug("Wait"); + log.trace("Wait"); wait(); } } catch (InterruptedException e) { diff --git a/java/src/mimis/device/lirc/LircDevice.java b/java/src/mimis/device/lirc/LircDevice.java index e501bfa..1e12f23 100644 --- a/java/src/mimis/device/lirc/LircDevice.java +++ b/java/src/mimis/device/lirc/LircDevice.java @@ -2,13 +2,17 @@ package mimis.device.lirc; import java.util.HashMap; +import mimis.Button; import mimis.Device; import mimis.device.lirc.button.DenonRC176; import mimis.device.lirc.button.PhiliphsRCLE011Button; +import mimis.macro.state.Press; +import mimis.macro.state.Release; import mimis.util.Multiplexer; +import mimis.util.multiplexer.SignalListener; +import mimis.value.Signal; - -public class LircDevice extends Device implements LircButtonListener { +public class LircDevice extends Device implements LircButtonListener, SignalListener { protected static final String TITLE = "Lirc"; protected Multiplexer multiplexer; @@ -21,23 +25,36 @@ public class LircDevice extends Device implements LircButtonListener { buttonMap.put(PhiliphsRCLE011Button.NAME, PhiliphsRCLE011Button.values()); buttonMap.put(DenonRC176.NAME, DenonRC176.values()); - multiplexer = new Multiplexer(); - + multiplexer = new Multiplexer(this); + lircService = new LircService(buttonMap); lircService.add(this); } public void activate() { - lircService.start(); + multiplexer.start(); + lircService.activate(); super.activate(); } public void deactivate() { + multiplexer.deactivate(); lircService.deactivate(); super.deactivate(); } public void add(LircButton lircButton) { - + multiplexer.add(lircButton); + } + + public void add(Signal signal, Object object) { + switch (signal) { + case BEGIN: + add(new Press((Button) object)); + break; + case END: + add(new Release((Button) object)); + break; + } } } diff --git a/java/src/mimis/device/lirc/LircService.java b/java/src/mimis/device/lirc/LircService.java index 2311865..0f4c4ac 100644 --- a/java/src/mimis/device/lirc/LircService.java +++ b/java/src/mimis/device/lirc/LircService.java @@ -16,7 +16,6 @@ import java.util.Scanner; import mimis.Worker; import mimis.exception.button.UnknownButtonException; - public class LircService extends Worker { public static final String IP = "127.0.0.1"; public static final int PORT = 8765; @@ -33,6 +32,7 @@ public class LircService extends Worker { public LircService(HashMap buttonMap) { this(buttonMap, IP, PORT); + //String send = Native.getValue("HKEY_CURRENT_USER\\Software\\LIRC", "password"); } public LircService(HashMap buttonMap, String ip, int port) { @@ -83,7 +83,7 @@ public class LircService extends Worker { String string = bufferedReader.readLine(); try { LircButton lircButton = parseButton(new Scanner(string)); - log.debug(String.format("Lirc button: %s", lircButton)); + //log.debug(String.format("Lirc button: %s", lircButton)); for (LircButtonListener lircbuttonListener : lircButtonListenerList) { lircbuttonListener.add(lircButton); } @@ -112,10 +112,8 @@ public class LircService extends Worker { throw new UnknownButtonException(); } - public static void main(String[] args) { - System.out.println("hey"); - //String send = Native.getValue("HKEY_CURRENT_USER\\Software\\LIRC", "password"); - new LircDevice().start(); + public static void main(String[] args) { + new LircDevice().activate(); while (true); } } diff --git a/java/src/mimis/device/lirc/button/PhiliphsRCLE011Button.java b/java/src/mimis/device/lirc/button/PhiliphsRCLE011Button.java index 32c9938..636886f 100644 --- a/java/src/mimis/device/lirc/button/PhiliphsRCLE011Button.java +++ b/java/src/mimis/device/lirc/button/PhiliphsRCLE011Button.java @@ -1,7 +1,6 @@ package mimis.device.lirc.button; import mimis.device.lirc.LircButton; -import mimis.exception.button.UnknownButtonException; public enum PhiliphsRCLE011Button implements LircButton { POWER ("Standby"), @@ -43,7 +42,7 @@ public enum PhiliphsRCLE011Button implements LircButton { public static final String NAME = "Philips_RCLE011"; protected String code; - + private PhiliphsRCLE011Button(String code) { this.code = code; } @@ -51,13 +50,4 @@ public enum PhiliphsRCLE011Button implements LircButton { public String getCode() { return code; } - - public static PhiliphsRCLE011Button create(String code) throws UnknownButtonException { - for (PhiliphsRCLE011Button button : PhiliphsRCLE011Button.values()) { - if (button.getCode().equals(code)) { - return button; - } - } - throw new UnknownButtonException(); - } } diff --git a/java/src/mimis/util/Multiplexer.java b/java/src/mimis/util/Multiplexer.java index 199bb1e..f850cfa 100644 --- a/java/src/mimis/util/Multiplexer.java +++ b/java/src/mimis/util/Multiplexer.java @@ -1,13 +1,56 @@ package mimis.util; import mimis.Worker; +import mimis.util.multiplexer.SignalListener; +import mimis.value.Signal; public class Multiplexer extends Worker { - public static final int THRESHOLD = 500; + public static final int TIMEOUT = 150; + + protected int threshold; protected Object object; + protected SignalListener signalListener; + protected boolean end; + + public Multiplexer(SignalListener signalListener) { + this(signalListener, TIMEOUT); + } + + public Multiplexer(SignalListener signalListener, int treshold) { + this.signalListener = signalListener; + } + + public void add(Object object) { + if (this.object == null) { + signalListener.add(Signal.BEGIN, object); + this.object = object; + end = true; + activate(); + } else if (this.object.equals(object)) { + end = false; + synchronized (this) { + notifyAll(); + } + } else { + end = true; + synchronized (this) { + notifyAll(); + } + add(object); + } + } protected void work() { - // TODO Auto-generated method stub - + try { + synchronized (this) { + wait(TIMEOUT); + } + } catch (InterruptedException e) {} + if (end) { + signalListener.add(Signal.END, object); + object = null; + deactivate(); + } + end = !end; } } diff --git a/java/src/mimis/util/multiplexer/SignalListener.java b/java/src/mimis/util/multiplexer/SignalListener.java new file mode 100644 index 0000000..209838f --- /dev/null +++ b/java/src/mimis/util/multiplexer/SignalListener.java @@ -0,0 +1,7 @@ +package mimis.util.multiplexer; + +import mimis.value.Signal; + +public interface SignalListener { + public void add(Signal signal, Object object); +} diff --git a/java/src/mimis/value/Action.java b/java/src/mimis/value/Action.java index 1820b19..f29aa5d 100644 --- a/java/src/mimis/value/Action.java +++ b/java/src/mimis/value/Action.java @@ -1,7 +1,5 @@ package mimis.value; -import mimis.exception.task.action.ActionDeserializeException; - public enum Action { EXIT, FORWARD, @@ -19,16 +17,4 @@ public enum Action { VOLUME_UP, FULLSCREEN, TRAIN, STOP, SAVE, RECOGNIZE, LOAD, SHUFFLE, FADEOUT, QUIT, VISUALISER, LIKE, DISLIKE; - - public String serialze() { - return name(); - } - - public static Action deserialise(String value) throws ActionDeserializeException { - try { - return Action.valueOf(value); - } catch (NullPointerException e) { - throw new ActionDeserializeException(); - } - } } diff --git a/java/src/mimis/value/Signal.java b/java/src/mimis/value/Signal.java new file mode 100644 index 0000000..c2702dc --- /dev/null +++ b/java/src/mimis/value/Signal.java @@ -0,0 +1,5 @@ +package mimis.value; + +public enum Signal { + BEGIN, END; +}