Multiplexer ten behoeve van Lirc toegevoegd.

This commit is contained in:
2011-06-02 20:15:54 +00:00
parent d516351fda
commit 84fb300464
10 changed files with 94 additions and 44 deletions

View File

@@ -1,4 +1,4 @@
log4j.rootLogger=TRACE, CA log4j.rootLogger=DEBUG, CA
log4j.appender.CA=org.apache.log4j.ConsoleAppender log4j.appender.CA=org.apache.log4j.ConsoleAppender
log4j.appender.CA.layout=org.apache.log4j.PatternLayout log4j.appender.CA.layout=org.apache.log4j.PatternLayout
log4j.appender.CA.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n log4j.appender.CA.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n

View File

@@ -76,6 +76,7 @@ public abstract class Device extends EventHandler implements Titled, Exitable {
/* Recognize events */ /* Recognize events */
protected void add(State state) { protected void add(State state) {
log.debug(state.toString() + " " + state.getButton());
sequenceListener.add(state); sequenceListener.add(state);
} }

View File

@@ -13,7 +13,7 @@ public abstract class Worker implements Runnable {
protected boolean active = false; protected boolean active = false;
public void start(boolean thread) { public void start(boolean thread) {
log.debug("Start"); log.trace("Start");
running = true; running = true;
if (thread) { if (thread) {
log.debug("Start thread"); log.debug("Start thread");
@@ -29,7 +29,7 @@ public abstract class Worker implements Runnable {
} }
public void stop() { public void stop() {
log.debug("Stop"); log.trace("Stop");
if (active()) { if (active()) {
deactivate(); deactivate();
} }
@@ -66,6 +66,9 @@ public abstract class Worker implements Runnable {
start(thread); start(thread);
} }
active = true; active = true;
synchronized (this) {
notifyAll();
}
} }
public void deactivate() { public void deactivate() {
@@ -79,7 +82,7 @@ public abstract class Worker implements Runnable {
} else { } else {
try { try {
synchronized (this) { synchronized (this) {
log.debug("Wait"); log.trace("Wait");
wait(); wait();
} }
} catch (InterruptedException e) { } catch (InterruptedException e) {

View File

@@ -2,13 +2,17 @@ package mimis.device.lirc;
import java.util.HashMap; import java.util.HashMap;
import mimis.Button;
import mimis.Device; import mimis.Device;
import mimis.device.lirc.button.DenonRC176; import mimis.device.lirc.button.DenonRC176;
import mimis.device.lirc.button.PhiliphsRCLE011Button; import mimis.device.lirc.button.PhiliphsRCLE011Button;
import mimis.macro.state.Press;
import mimis.macro.state.Release;
import mimis.util.Multiplexer; import mimis.util.Multiplexer;
import mimis.util.multiplexer.SignalListener;
import mimis.value.Signal;
public class LircDevice extends Device implements LircButtonListener, SignalListener {
public class LircDevice extends Device implements LircButtonListener {
protected static final String TITLE = "Lirc"; protected static final String TITLE = "Lirc";
protected Multiplexer multiplexer; protected Multiplexer multiplexer;
@@ -21,23 +25,36 @@ public class LircDevice extends Device implements LircButtonListener {
buttonMap.put(PhiliphsRCLE011Button.NAME, PhiliphsRCLE011Button.values()); buttonMap.put(PhiliphsRCLE011Button.NAME, PhiliphsRCLE011Button.values());
buttonMap.put(DenonRC176.NAME, DenonRC176.values()); buttonMap.put(DenonRC176.NAME, DenonRC176.values());
multiplexer = new Multiplexer(); multiplexer = new Multiplexer(this);
lircService = new LircService(buttonMap); lircService = new LircService(buttonMap);
lircService.add(this); lircService.add(this);
} }
public void activate() { public void activate() {
lircService.start(); multiplexer.start();
lircService.activate();
super.activate(); super.activate();
} }
public void deactivate() { public void deactivate() {
multiplexer.deactivate();
lircService.deactivate(); lircService.deactivate();
super.deactivate(); super.deactivate();
} }
public void add(LircButton lircButton) { 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;
}
} }
} }

View File

@@ -16,7 +16,6 @@ import java.util.Scanner;
import mimis.Worker; import mimis.Worker;
import mimis.exception.button.UnknownButtonException; import mimis.exception.button.UnknownButtonException;
public class LircService extends Worker { public class LircService extends Worker {
public static final String IP = "127.0.0.1"; public static final String IP = "127.0.0.1";
public static final int PORT = 8765; public static final int PORT = 8765;
@@ -33,6 +32,7 @@ public class LircService extends Worker {
public LircService(HashMap<String, LircButton[]> buttonMap) { public LircService(HashMap<String, LircButton[]> buttonMap) {
this(buttonMap, IP, PORT); this(buttonMap, IP, PORT);
//String send = Native.getValue("HKEY_CURRENT_USER\\Software\\LIRC", "password");
} }
public LircService(HashMap<String, LircButton[]> buttonMap, String ip, int port) { public LircService(HashMap<String, LircButton[]> buttonMap, String ip, int port) {
@@ -83,7 +83,7 @@ public class LircService extends Worker {
String string = bufferedReader.readLine(); String string = bufferedReader.readLine();
try { try {
LircButton lircButton = parseButton(new Scanner(string)); 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) { for (LircButtonListener lircbuttonListener : lircButtonListenerList) {
lircbuttonListener.add(lircButton); lircbuttonListener.add(lircButton);
} }
@@ -112,10 +112,8 @@ public class LircService extends Worker {
throw new UnknownButtonException(); throw new UnknownButtonException();
} }
public static void main(String[] args) { public static void main(String[] args) {
System.out.println("hey"); new LircDevice().activate();
//String send = Native.getValue("HKEY_CURRENT_USER\\Software\\LIRC", "password");
new LircDevice().start();
while (true); while (true);
} }
} }

View File

@@ -1,7 +1,6 @@
package mimis.device.lirc.button; package mimis.device.lirc.button;
import mimis.device.lirc.LircButton; import mimis.device.lirc.LircButton;
import mimis.exception.button.UnknownButtonException;
public enum PhiliphsRCLE011Button implements LircButton { public enum PhiliphsRCLE011Button implements LircButton {
POWER ("Standby"), POWER ("Standby"),
@@ -43,7 +42,7 @@ public enum PhiliphsRCLE011Button implements LircButton {
public static final String NAME = "Philips_RCLE011"; public static final String NAME = "Philips_RCLE011";
protected String code; protected String code;
private PhiliphsRCLE011Button(String code) { private PhiliphsRCLE011Button(String code) {
this.code = code; this.code = code;
} }
@@ -51,13 +50,4 @@ public enum PhiliphsRCLE011Button implements LircButton {
public String getCode() { public String getCode() {
return code; 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();
}
} }

View File

@@ -1,13 +1,56 @@
package mimis.util; package mimis.util;
import mimis.Worker; import mimis.Worker;
import mimis.util.multiplexer.SignalListener;
import mimis.value.Signal;
public class Multiplexer extends Worker { public class Multiplexer extends Worker {
public static final int THRESHOLD = 500; public static final int TIMEOUT = 150;
protected int threshold;
protected Object object; 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() { 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;
} }
} }

View File

@@ -0,0 +1,7 @@
package mimis.util.multiplexer;
import mimis.value.Signal;
public interface SignalListener {
public void add(Signal signal, Object object);
}

View File

@@ -1,7 +1,5 @@
package mimis.value; package mimis.value;
import mimis.exception.task.action.ActionDeserializeException;
public enum Action { public enum Action {
EXIT, EXIT,
FORWARD, FORWARD,
@@ -19,16 +17,4 @@ public enum Action {
VOLUME_UP, VOLUME_UP,
FULLSCREEN, FULLSCREEN,
TRAIN, STOP, SAVE, RECOGNIZE, LOAD, SHUFFLE, FADEOUT, QUIT, VISUALISER, LIKE, DISLIKE; 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();
}
}
} }

View File

@@ -0,0 +1,5 @@
package mimis.value;
public enum Signal {
BEGIN, END;
}