From 0b3ae425c05de93f4e3a2660540e5f24390050dd Mon Sep 17 00:00:00 2001 From: Stephan Richter Date: Fri, 1 Jan 2021 18:18:37 +0100 Subject: [PATCH] bugfixes: - now initializing signals before setting aspects - fixed css for HL2 --- pom.xml | 2 +- resources/css/style.css | 3 +- resources/svg/SignalE.svg | 2 +- resources/svg/SignalN.svg | 2 +- resources/svg/SignalS.svg | 2 +- resources/svg/SignalW.svg | 2 +- .../de/srsoftware/web4rail/tiles/Signal.java | 52 +++++++++++++++++-- .../de/srsoftware/web4rail/tiles/Turnout.java | 2 +- 8 files changed, 57 insertions(+), 10 deletions(-) diff --git a/pom.xml b/pom.xml index 0d4a543..cb041d8 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 de.srsoftware web4rail - 1.3.1 + 1.3.2 Web4Rail jar Java Model Railway Control diff --git a/resources/css/style.css b/resources/css/style.css index 5afb953..58ff6ce 100644 --- a/resources/css/style.css +++ b/resources/css/style.css @@ -194,10 +194,11 @@ h2{ .signal.red .sig_a{ fill: red; } +.signal.HL2 .sig_a, .signal.green .sig_a{ fill: lime; } -.signal.HL2 .sig_a{ +.signal.HL2 .sig_b{ fill: yellow; } diff --git a/resources/svg/SignalE.svg b/resources/svg/SignalE.svg index 490188b..756b671 100644 --- a/resources/svg/SignalE.svg +++ b/resources/svg/SignalE.svg @@ -1,7 +1,7 @@ - + \ No newline at end of file diff --git a/resources/svg/SignalN.svg b/resources/svg/SignalN.svg index dc0c620..2a70b16 100644 --- a/resources/svg/SignalN.svg +++ b/resources/svg/SignalN.svg @@ -1,7 +1,7 @@ - + \ No newline at end of file diff --git a/resources/svg/SignalS.svg b/resources/svg/SignalS.svg index f9796ff..81584bb 100644 --- a/resources/svg/SignalS.svg +++ b/resources/svg/SignalS.svg @@ -1,7 +1,7 @@ - + \ No newline at end of file diff --git a/resources/svg/SignalW.svg b/resources/svg/SignalW.svg index 53e18c2..c53df39 100644 --- a/resources/svg/SignalW.svg +++ b/resources/svg/SignalW.svg @@ -1,7 +1,7 @@ - + \ No newline at end of file diff --git a/src/main/java/de/srsoftware/web4rail/tiles/Signal.java b/src/main/java/de/srsoftware/web4rail/tiles/Signal.java index c41e5b8..a86c433 100644 --- a/src/main/java/de/srsoftware/web4rail/tiles/Signal.java +++ b/src/main/java/de/srsoftware/web4rail/tiles/Signal.java @@ -6,16 +6,17 @@ import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Map.Entry; +import java.util.TreeSet; +import java.util.Vector; +import java.util.concurrent.TimeoutException; import org.json.JSONArray; import org.json.JSONObject; -import java.util.TreeSet; -import java.util.Vector; - import de.srsoftware.tools.Tag; import de.srsoftware.web4rail.Command; import de.srsoftware.web4rail.Plan.Direction; +import de.srsoftware.web4rail.Protocol; import de.srsoftware.web4rail.Window; import de.srsoftware.web4rail.tags.Button; import de.srsoftware.web4rail.tags.Checkbox; @@ -30,10 +31,12 @@ public abstract class Signal extends Tile { public static final String GREEN = "green"; public static final TreeSet knownStates = new TreeSet(List.of(RED, GREEN)); private final HashMap> aspects = new HashMap>(); + private final HashSet initialized = new HashSet(); private static final String ADDRESS = "addr"; private static final String HOLD = "hold"; private static final String NEW_ASPECT = "new_aspect"; private static final String ASPECTS = "aspects"; + private Protocol protocol = Protocol.DCC128; private String state = RED; @@ -100,6 +103,22 @@ public abstract class Signal extends Tile { return super.load(json); } + private char proto() { + switch (protocol) { + case DCC14: + case DCC27: + case DCC28: + case DCC128: + return 'N'; + case MOTO: + return 'M'; + case SELECTRIX: + return 'S'; + default: + return 'P'; + } + } + @Override protected Window properties(List
preForm, FormInput formInputs, List
postForm) { Fieldset aspectEditor = new Fieldset(t("Aspects")); @@ -142,6 +161,8 @@ public abstract class Signal extends Tile { HashSet commands = aspects.get(aspect); if (isSet(commands)) { for (int[] data : commands) { + int addr = data[0]; + init(addr); Command cmd = new Command("SET {} GA "+data[0]+" "+data[1]+" "+data[2]+" "+(data[3]==1?-1:200)); LOG.debug("new Command: {}",cmd); plan.controlUnit().queue(cmd); @@ -151,6 +172,31 @@ public abstract class Signal extends Tile { return true; } + private void init(int addr) { + if (!initialized.contains(addr)) { + Command command = new Command("INIT {} GA "+addr+" "+proto()) { + + @Override + public void onSuccess() { + super.onSuccess(); + initialized.add(addr); + } + + @Override + public void onFailure(Reply r) { + super.onFailure(r); + } + + }; + try { + plan.queue(command).reply(); + } catch (TimeoutException e) { + LOG.warn(e.getMessage()); + } + + } + } + @Override public Tag tag(Map replacements) throws IOException { Tag tag = super.tag(replacements); diff --git a/src/main/java/de/srsoftware/web4rail/tiles/Turnout.java b/src/main/java/de/srsoftware/web4rail/tiles/Turnout.java index 13b5389..2d207f1 100644 --- a/src/main/java/de/srsoftware/web4rail/tiles/Turnout.java +++ b/src/main/java/de/srsoftware/web4rail/tiles/Turnout.java @@ -80,7 +80,7 @@ public abstract class Turnout extends Tile implements Device{ @Override public void onFailure(Reply r) { - super.onSuccess(); + super.onFailure(r); initialized = false; }