From 964eec3fce1e630d252e3c9e26f24e3b74a1b4aa Mon Sep 17 00:00:00 2001 From: Mike Dunston Date: Fri, 8 Dec 2017 12:29:14 -0800 Subject: [PATCH 1/2] DCC++ ESP changes + cleanups 1) Removing unused ArrayList 2) Adding support for named power districts and current draws. 3) Adding version parser for ESP32 based basestation. --- java/src/jmri/jmrix/dccpp/DCCppConstants.java | 3 + java/src/jmri/jmrix/dccpp/DCCppReply.java | 61 +++++++++++++++---- 2 files changed, 52 insertions(+), 12 deletions(-) diff --git a/java/src/jmri/jmrix/dccpp/DCCppConstants.java b/java/src/jmri/jmrix/dccpp/DCCppConstants.java index c2e43e753d2..28733995045 100644 --- a/java/src/jmri/jmrix/dccpp/DCCppConstants.java +++ b/java/src/jmri/jmrix/dccpp/DCCppConstants.java @@ -135,7 +135,9 @@ public final class DCCppConstants { public final static String PROGRAM_REPLY_REGEX = "\\s*r\\s*(\\d+)\\|(\\d+)\\|(\\d+)\\s+([-]*\\d+)\\s*"; public final static String PROGRAM_BIT_REPLY_REGEX = "\\s*r\\s*(\\d+)\\|(\\d+)\\|(\\d+)\\s+(\\d+)\\s+(\\d+)\\s*"; public final static String CURRENT_REPLY_REGEX = "\\s*a\\s*(\\d+)"; + public final static String CURRENT_REPLY_NAMED_REGEX = "\\s*a\\s*(\\w+)\\s*(\\d+)"; public final static String TRACK_POWER_REPLY_REGEX = "\\s*p\\s*([0,1])\\s*"; + public final static String TRACK_POWER_REPLY_NAMED_REGEX = "\\s*p\\s*(\\d+)\\s+(\\w+)\\s*"; public final static String SENSOR_REPLY_REGEX = "\\s*[Qq]\\s*(\\d+)\\s*"; public final static String SENSOR_DEF_REPLY_REGEX = "\\s*Q\\s*(\\d+)\\s+(\\d+)\\s+([0|1])\\s*"; public final static String SENSOR_ACTIVE_REPLY_REGEX = "\\s*Q\\s*(\\d+)\\s*"; @@ -148,6 +150,7 @@ public final class DCCppConstants { // public final static String STATUS_REPLY_REGEX = "i(DCC\\+\\+.*): BUILD (.*)"; // V1.0 // public final static String STATUS_REPLY_REGEX = "i(DCC\\+\\+[^:]*): BUILD (.*)"; // V1.0 / V1.1 public final static String STATUS_REPLY_REGEX = "i(DCC\\+\\+[^:]*):(?:\\sBUILD)? (.*)"; // V1.0 / V1.1 / V1.2 + public final static String STATUS_REPLY_ESP32_REGEX = "iDCC\\+\\+.*ESP32.*: V-([\\d\\.]+)\\s+/\\s+(.*)"; // V1.0 //public final static String STATUS_REPLY_REGEX = "i(DCC\\+\\+\\s?.*):\\s?(?:BUILD)? (.*)"; // V1.0 / V1.1 / V1.2 public final static String FREE_MEMORY_REPLY_REGEX = "\\s*f\\s*(\\d+)\\s*"; public final static String WRITE_EEPROM_REPLY_REGEX = "\\s*e\\s*(\\d+)\\s+(\\d+)\\s+(\\d+)\\s*"; diff --git a/java/src/jmri/jmrix/dccpp/DCCppReply.java b/java/src/jmri/jmrix/dccpp/DCCppReply.java index b8f4fad6513..920410bfa23 100644 --- a/java/src/jmri/jmrix/dccpp/DCCppReply.java +++ b/java/src/jmri/jmrix/dccpp/DCCppReply.java @@ -1,6 +1,5 @@ package jmri.jmrix.dccpp; -import java.util.ArrayList; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.regex.PatternSyntaxException; @@ -45,7 +44,6 @@ public class DCCppReply extends jmri.jmrix.AbstractMRReply { - private ArrayList valueList = new ArrayList(); protected String myRegex; protected StringBuilder myReply; @@ -61,7 +59,6 @@ public DCCppReply() { public DCCppReply(DCCppReply reply) { super(reply); setBinary(false); - valueList = new ArrayList(reply.valueList); myRegex = reply.myRegex; myReply = reply.myReply; } @@ -70,11 +67,6 @@ public DCCppReply(DCCppReply reply) { public DCCppReply(String reply) { super(); setBinary(false); - valueList = new ArrayList(); - //char charList[] = reply.toCharArray(); - //for(int i=0;i Date: Fri, 8 Dec 2017 13:06:32 -0800 Subject: [PATCH 2/2] adding tests for named current and power district features --- .../test/jmri/jmrix/dccpp/DCCppReplyTest.java | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/java/test/jmri/jmrix/dccpp/DCCppReplyTest.java b/java/test/jmri/jmrix/dccpp/DCCppReplyTest.java index 44f9028fe75..27b21ed5d34 100644 --- a/java/test/jmri/jmrix/dccpp/DCCppReplyTest.java +++ b/java/test/jmri/jmrix/dccpp/DCCppReplyTest.java @@ -74,6 +74,41 @@ public void testCommTypeReply() { } + // Test named power districts + @Test + public void testNamedPowerDistrictReply() { + DCCppReply l = DCCppReply.parseDCCppReply("p 0 MAIN"); + Assert.assertTrue(l.isNamedPowerReply()); + Assert.assertEquals('p', l.getOpCodeChar()); + Assert.assertEquals("MAIN", l.getPowerDistrictName()); + Assert.assertEquals("OFF", l.getPowerDistrictStatus()); + + l = DCCppReply.parseDCCppReply("p 1 MAIN"); + Assert.assertTrue(l.isNamedPowerReply()); + Assert.assertEquals('p', l.getOpCodeChar()); + Assert.assertEquals("MAIN", l.getPowerDistrictName()); + Assert.assertEquals("ON", l.getPowerDistrictStatus()); + + l = DCCppReply.parseDCCppReply("p 2 MAIN"); + Assert.assertTrue(l.isNamedPowerReply()); + Assert.assertEquals('p', l.getOpCodeChar()); + Assert.assertEquals("MAIN", l.getPowerDistrictName()); + Assert.assertEquals("OVERLOAD", l.getPowerDistrictStatus()); + } + + // Test named power districts + @Test + public void testNamedCurrentReply() { + DCCppReply l = DCCppReply.parseDCCppReply("a MAIN 0"); + Assert.assertTrue(l.isNamedCurrentReply()); + Assert.assertEquals('a', l.getOpCodeChar()); + Assert.assertEquals("0", l.getCurrentString()); + + l = DCCppReply.parseDCCppReply("a MAIN 100"); + Assert.assertTrue(l.isNamedCurrentReply()); + Assert.assertEquals('a', l.getOpCodeChar()); + Assert.assertEquals("100", l.getCurrentString()); + } // The minimal setup for log4J @Before public void setUp() {