diff --git a/build.xml b/build.xml index dca1a53..ebbdb6a 100644 --- a/build.xml +++ b/build.xml @@ -107,7 +107,7 @@ - java + diff --git a/src/com/limelight/input/EvdevAbsolute.java b/src/com/limelight/input/EvdevAbsolute.java index 1801a39..a053cef 100644 --- a/src/com/limelight/input/EvdevAbsolute.java +++ b/src/com/limelight/input/EvdevAbsolute.java @@ -53,7 +53,9 @@ public class EvdevAbsolute { return reverse?Short.MAX_VALUE:Short.MIN_VALUE; else { value += value= 0) { + releaseControllerId(); + } + } + private short accountForDeadzone(short value) { return Math.abs(value) > mapping.abs_deadzone?value:0; } diff --git a/src/com/limelight/input/EvdevLoader.java b/src/com/limelight/input/EvdevLoader.java index a4ddff8..83d3eb8 100644 --- a/src/com/limelight/input/EvdevLoader.java +++ b/src/com/limelight/input/EvdevLoader.java @@ -90,16 +90,22 @@ public class EvdevLoader implements Runnable { WatchService watcher = evdev.getFileSystem().newWatchService(); evdev.register(watcher, StandardWatchEventKinds.ENTRY_CREATE); - WatchKey watckKey = watcher.take(); - List> events = watckKey.pollEvents(); - for (WatchEvent event:events) { - if (event.kind() == StandardWatchEventKinds.ENTRY_CREATE) { - String name = event.context().toString(); - if (filter.accept(input, name)) { - LimeLog.info("Input " + name + " added"); - new EvdevHandler(conn, new File(input, name).getAbsolutePath(), mapping).start(); + for (;;) { + WatchKey watchKey = watcher.take(); + List> events = watchKey.pollEvents(); + for (WatchEvent event:events) { + if (event.kind() == StandardWatchEventKinds.ENTRY_CREATE) { + String name = event.context().toString(); + if (filter.accept(input, name)) { + LimeLog.info("Input " + name + " added"); + new EvdevHandler(conn, new File(input, name).getAbsolutePath(), mapping).start(); + } } } + + if (!watchKey.reset()) { + break; + } } } catch (IOException | InterruptedException ex) { LimeLog.severe(ex.getMessage()); diff --git a/src/com/limelight/input/EvdevReader.java b/src/com/limelight/input/EvdevReader.java index e9b3de7..3b3f791 100644 --- a/src/com/limelight/input/EvdevReader.java +++ b/src/com/limelight/input/EvdevReader.java @@ -43,6 +43,7 @@ public abstract class EvdevReader implements Runnable { } protected abstract void parseEvent(ByteBuffer buffer); + protected abstract void deviceRemoved(); @Override public void run() { @@ -54,6 +55,7 @@ public abstract class EvdevReader implements Runnable { } } catch (IOException e) { LimeLog.warning("Input device removed"); + deviceRemoved(); } } diff --git a/src/com/limelight/input/GamepadMapper.java b/src/com/limelight/input/GamepadMapper.java index 0e0d705..20b7dfe 100644 --- a/src/com/limelight/input/GamepadMapper.java +++ b/src/com/limelight/input/GamepadMapper.java @@ -75,6 +75,11 @@ public class GamepadMapper extends EvdevReader { notify(); } } + + @Override + protected void deviceRemoved() { + // Nothing for us to do + } public synchronized void readKey(String key, String name) throws InterruptedException { System.out.println(name);