Files
JIMRI/java/test/jmri/jmrix/loconet/alm/almi/AlmirTest.java
T
2026-06-17 14:00:51 +02:00

694 lines
40 KiB
Java

package jmri.jmrix.loconet.alm.almi;
import jmri.jmrix.loconet.LocoNetMessage;
import jmri.util.JUnitUtil;
import org.junit.Assert;
import org.junit.jupiter.api.*;
/**
*
* @author B. Milhaupt Copyright (C) 2022
*/
class AlmirTest {
@Test
public void testAlmRouteCapabilitiesQuery() {
LocoNetMessage l;
l = new LocoNetMessage(new int[] {0xEE, 0x10, 0x01, 0x00, 0, 0x00, 0, 0x00, 0, 0x00, 0, 0x00, 0, 0x00, 0, 15});
Assert.assertEquals("Routes capabilities (command station, DS7x, etc.) query.\n", Almir.interpretAlmRoutes(l));
l = new LocoNetMessage(new int[] {0xEE, 0x10, 0x01, 0x00, 0, 0x00, 0x0f, 0x00, 0, 0x00, 0, 0x00, 0, 0x00, 0, 15});
Assert.assertEquals("Routes capabilities (command station, DS7x, etc.) query.\n", Almir.interpretAlmRoutes(l));
}
@Test
public void testAlmRouteDataQuery1() {
LocoNetMessage l;
l = new LocoNetMessage(new int[] {0xEE, 0x10, 0x01, 0x02, 0x00, 0, 0x0, 0x00,0,0,0,0,0,0,0x7f,0});
Assert.assertEquals("Query command station Route 1 entries 1-4 if 8 entries per route. Or if 16 entries per route, query command station Route 1 entries 1-4.\n",
Almir.interpretAlmRoutes(l));
l = new LocoNetMessage(new int[] {0xEE, 0x10, 0x01, 0x02, 0x01, 0x00, 0x0, 0x00,0,0,0,0,0,0,0x7f,0});
Assert.assertEquals("Query command station Route 1 entries 5-8 if 8 entries per route. Or if 16 entries per route, query command station Route 1 entries 5-8.\n",
Almir.interpretAlmRoutes(l));
l = new LocoNetMessage(new int[] {0xEE, 0x10, 0x01, 0x02, 2, 0x00, 0x0, 0x00,0,0,0,0,0,0,0x7f,0});
Assert.assertEquals("Query command station Route 2 entries 1-4 if 8 entries per route. Or if 16 entries per route, query command station Route 1 entries 9-12.\n",
Almir.interpretAlmRoutes(l));
l = new LocoNetMessage(new int[] {0xEE, 0x10, 0x01, 0x02, 0x03, 0x00, 0x0, 0x00,0,0,0,0,0,0,0x7f,0});
Assert.assertEquals("Query command station Route 2 entries 5-8 if 8 entries per route. Or if 16 entries per route, query command station Route 1 entries 13-16.\n",
Almir.interpretAlmRoutes(l));
l = new LocoNetMessage(new int[] {0xEE, 0x10, 0x01, 0x02, 0x20, 0x00, 0x0, 0xF, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7});
Assert.assertEquals("Query command station Route 17 entries 1-4 if 8 entries per route. Or if 16 entries per route, query command station Route 9 entries 1-4.\n",
Almir.interpretAlmRoutes(l));
l = new LocoNetMessage(new int[] {0xEE, 0x10, 0x01, 0x02, 0x7c, 0x01, 0x0F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x74});
Assert.assertEquals("Query command station Route 127 entries 1-4 if 8 entries per route. Or if 16 entries per route, query command station Route 64 entries 1-4.\n",
Almir.interpretAlmRoutes(l));
l = new LocoNetMessage(new int[] {0xEE, 0x10, 0x01, 0x02, 0x7f, 0x01, 0x0F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x74});
Assert.assertEquals("Query command station Route 128 entries 5-8 if 8 entries per route. Or if 16 entries per route, query command station Route 64 entries 13-16.\n",
Almir.interpretAlmRoutes(l));
l = new LocoNetMessage(new int[] {0xEE, 0x10, 0x01, 0x02, 0x7D, 0x01, 0x0F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x74});
Assert.assertEquals("Query command station Route 127 entries 5-8 if 8 entries per route. Or if 16 entries per route, query command station Route 64 entries 5-8.\n",
Almir.interpretAlmRoutes(l));
l = new LocoNetMessage(new int[] {0xEE, 0x10, 0x01, 0x02, 0x7E, 0x01, 0x0F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x74});
Assert.assertEquals("Query command station Route 128 entries 1-4 if 8 entries per route. Or if 16 entries per route, query command station Route 64 entries 9-12.\n",
Almir.interpretAlmRoutes(l));
l = new LocoNetMessage(new int[] {0xEE, 0x10, 0x01, 0x02, 0x7F, 0x01, 0x0F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x74});
Assert.assertEquals("Query command station Route 128 entries 5-8 if 8 entries per route. Or if 16 entries per route, query command station Route 64 entries 13-16.\n",
Almir.interpretAlmRoutes(l));
}
@Test
public void testAlmRouteDataReport1() {
LocoNetMessage l;
//E6 10 01 02 ALM-style command station Route Data Report
l = new LocoNetMessage(new int[] {0xE6, 0x10, 0x01, 0x02, 0x7F, 0x01, 0x0F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x74});
Assert.assertEquals("Report command station Route 128 entries 5-8 if 8 entries per route. Or if 16 entries per route, report command station Route 64 entries 13-16 with Unused, Unused, Unused, Unused.\n",
Almir.interpretAlmRoutes(l));
l = new LocoNetMessage(new int[] {0xE6, 0x10, 0x01, 0x02, 0x02, 0x00, 0x0F, 0x0C, 0x20, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x2B});
Assert.assertEquals("Report command station Route 2 entries 1-4 if 8 entries per route. Or if 16 entries per route, report command station Route 1 entries 9-12 with 13c, Unused, Unused, Unused.\n",
Almir.interpretAlmRoutes(l));
l = new LocoNetMessage(new int[] {0xE6 ,0x10 ,0x01 ,0x02 ,0x02 ,0x00 ,0x0F ,0x0C ,0x20 ,0x7F ,0x10 ,0x00 ,0x31 ,0x7F ,0x7F ,0x75});
Assert.assertEquals("Report command station Route 2 entries 1-4 if 8 entries per route. Or if 16 entries per route, report command station Route 1 entries 9-12 with 13c, 128t, 129c, Unused.\n",
Almir.interpretAlmRoutes(l));
l = new LocoNetMessage(new int[] {0xE6 ,0x10 ,0x01 ,0x02 ,0x02 ,0x00 ,0x0F ,0x0C ,0x20 ,0x7F ,0x10 ,0x00 ,0x31 ,0x7F ,0x7F ,0x75});
Assert.assertEquals("Report command station Route 2 entries 1-4 if 8 entries per route. Or if 16 entries per route, report command station Route 1 entries 9-12 with 13c, 128t, 129c, Unused.\n",
Almir.interpretAlmRoutes(l));
}
@Test
public void testAlmRouteCSDataWrite1() {
LocoNetMessage l;
l = new LocoNetMessage(new int[] {0xEE, 0x10, 0x01, 0x03, 0x7F, 0x01, 0x0F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x74});
Assert.assertEquals("Write command station Route 128 entries 5-8 if 8 entries per route. Or if 16 entries per route, write command station Route 64 entries 13-16 with Unused, Unused, Unused, Unused.\n",
Almir.interpretAlmRoutes(l));
}
@Test
public void testAlmRouteCSDataReport1() {
LocoNetMessage l;
l = new LocoNetMessage(new int[] {0xE6 ,0x10 ,0x01 ,0x02 ,0x02 ,0x00 ,0x0F ,0x0C ,0x20 ,0x7F ,0x10 ,0x00 ,0x31 ,0x00 ,0x34 ,0x48});
Assert.assertEquals("Report command station Route 2 entries 1-4 if 8 entries per route. Or if 16 entries per route, report command station Route 1 entries 9-12 with 13c, 128t, 129c, 513c.\n",
Almir.interpretAlmRoutes(l));
l = new LocoNetMessage(new int[] {0xE6 ,0x10 ,0x01 ,0x02 ,0x02 ,0x00 ,0x0F ,0x0C ,0x10 ,0x7F ,0x10 ,0x00 ,0x31 ,0x00 ,0x34 ,0x48});
Assert.assertEquals("Report command station Route 2 entries 1-4 if 8 entries per route. Or if 16 entries per route, report command station Route 1 entries 9-12 with 13t, 128t, 129c, 513c.\n",
Almir.interpretAlmRoutes(l));
l = new LocoNetMessage(new int[] {0xE6 ,0x10 ,0x01 ,0x02 ,0x02 ,0x00 ,0x0F ,0x0C ,0x10 ,0x7F ,0x30 ,0x00 ,0x31 ,0x00 ,0x34 ,0x48});
Assert.assertEquals("Report command station Route 2 entries 1-4 if 8 entries per route. Or if 16 entries per route, report command station Route 1 entries 9-12 with 13t, 128c, 129c, 513c.\n",
Almir.interpretAlmRoutes(l));
l = new LocoNetMessage(new int[] {0xE6 ,0x10 ,0x01 ,0x02 ,0x02 ,0x00 ,0x0F ,0x0C ,0x10 ,0x7F ,0x30 ,0x00 ,0x11 ,0x00 ,0x34 ,0x48});
Assert.assertEquals("Report command station Route 2 entries 1-4 if 8 entries per route. Or if 16 entries per route, report command station Route 1 entries 9-12 with 13t, 128c, 129t, 513c.\n",
Almir.interpretAlmRoutes(l));
l = new LocoNetMessage(new int[] {0xE6 ,0x10 ,0x01 ,0x02 ,0x02 ,0x00 ,0x0F ,0x0C ,0x10 ,0x7F ,0x30 ,0x00 ,0x11 ,0x00 ,0x14 ,0x48});
Assert.assertEquals("Report command station Route 2 entries 1-4 if 8 entries per route. Or if 16 entries per route, report command station Route 1 entries 9-12 with 13t, 128c, 129t, 513t.\n",
Almir.interpretAlmRoutes(l));
}
@Test
public void testAlmRouteDeviceDeselect1() {
LocoNetMessage l;
//EE 10 02 00 ALM-style DS7x-series device de-selection for routes accesses
l = new LocoNetMessage(new int[] {0xEE, 0x10, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03});
Assert.assertEquals(" ALM task 2 test 1 - deselect",
"De-select the device currently selected for ALM Routes configuration, if any.\n",
Almir.interpretAlmRoutes(l));
}
@Test
public void testAlmRouteLengthTest1() {
LocoNetMessage l;
l = new LocoNetMessage(new int[] {0xEE, 0x10, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,0});
Assert.assertEquals(" ALM task check length test 1",
"",
Almir.interpretAlmRoutes(l));
l = new LocoNetMessage(new int[] {0xEE, 0x10, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00});
Assert.assertEquals(" ALM task check length test 2",
"",
Almir.interpretAlmRoutes(l));
}
@Test
public void testAlmRouteDevSel1() {
LocoNetMessage l;
//EE 10 02 0e ALM-style DS7x-series device selection for routes accesses
l = new LocoNetMessage(new int[] {0xEE, 0x10, 0x02, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x60, 0x00, 0x00, 0x00, 0x00, 0x03});
Assert.assertEquals(" ALM task 2 test 5 - selecting",
"Selecting device of type DS78V, s/n 0x0, using addresses 1 thru 8 for Routes programming.\n",
Almir.interpretAlmRoutes(l));
}
@Test
public void testAlmRouteCSCapabilitiesReport1() {
//E6 10 01 00 ALM-style command station Routes Capability Report
LocoNetMessage l;
l = new LocoNetMessage(new int[] {0xE6, 0x10, 0x01, 0x00, 0x40, 0x00, 0x03, 0x02, 0x08, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03});
Assert.assertEquals(" ALM task 2 test 6 - reporting routes capabilities",
"Command Station Routes Capabilities reply: 32 routes, 8 entries each route.\n",
Almir.interpretAlmRoutes(l));
}
@Test
public void testAlmRouteDeviceCapabilitiesReport1() {
//E6 10 02 00 ALM-style DS7x-series Route capabilities Report
LocoNetMessage l;
l = new LocoNetMessage(new int[] {0xE6, 0x10, 0x02, 0x00, 0x10, 0x00, 0x00, 0x02, 0x08, 0x74, 0x02, 0x02, 0x06, 0x03, 0x04, 0x03});
Assert.assertEquals(" ALM task 2 test 7 - reporting routes capabilities 2",
"Device DS74 (s/n 0x302) in Slow motion mode (routes currently enabled), using turnout addresses 516 thru 519, with 8 routes of 8 entries per route, may be configured using ALM messaging.\n",
Almir.interpretAlmRoutes(l));
l = new LocoNetMessage(new int[] {0xE6, 0x10, 0x02, 0x00, 0x20, 0x00, 0x00, 0x02, 0x08, 0x7c, 0x04, 0x02, 0x06, 0x03, 0x04, 0x03});
Assert.assertEquals(" ALM task 2 test 7 - reporting routes capabilities 2",
"Device DS78V (s/n 0x302) in Servo (2-position) mode (routes currently enabled), using turnout addresses 516 thru 523, with 16 routes of 8 entries per route, may be configured using ALM messaging.\n",
Almir.interpretAlmRoutes(l));
}
@Test
public void testAlmRouteSomeUndefineds1() {
LocoNetMessage l;
l = new LocoNetMessage(new int[] {0xE6, 0x10, 0x01, 0x00, 0, 0x00, 0, 0x00, 0, 0x00, 0, 0x00, 0, 0x00, 0, 0});
Assert.assertEquals("OPC_ALM_RD task 0 test 1 - Undefined operation",
"",
Almir.interpretAlmRoutes(l));
l = new LocoNetMessage(new int[] {0xE6, 0x10, 0x02, 0x00, 0, 0x00, 0, 0x00, 0, 0x00, 0, 0x00, 0, 0x00, 0, 0});
Assert.assertEquals("OPC_ALM_RD task 0 test 2 - Undefined operation",
"",
Almir.interpretAlmRoutes(l));
l = new LocoNetMessage(new int[] {0xE6, 0x10, 0x03, 0x00, 0, 0x00, 0, 0x00, 0, 0x00, 0, 0x00, 0, 0x00, 0, 0});
Assert.assertEquals("OPC_ALM_RD task 0 test 3 - Undefined operation",
"",
Almir.interpretAlmRoutes(l));
}
@Test
public void testRoutesALMGeneral() {
LocoNetMessage l;
l = new LocoNetMessage(new int[] {0xEE, 0x10, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03});
Assert.assertEquals(" ALM task 2 test 1",
"De-select the device currently selected for ALM Routes configuration, if any.\n",
Almir.interpretAlmRoutes(l));
l = new LocoNetMessage(new int[] {0xEE, 0x10, 0x01, 0x02, 0x00, 0, 0x0, 0x00,0,0,0,0,0,0,0x7f,0});
Assert.assertEquals("Query command station Route 1 entries 1-4 if 8 entries per route. Or if 16 entries per route, query command station Route 1 entries 1-4.\n",
Almir.interpretAlmRoutes(l));
l = new LocoNetMessage(new int[] {0xEE, 0x10, 0x01, 0x02, 0x01, 0x00, 0x0, 0x00,0,0,0,0,0,0,0x7f,0});
Assert.assertEquals("Query command station Route 1 entries 5-8 if 8 entries per route. Or if 16 entries per route, query command station Route 1 entries 5-8.\n",
Almir.interpretAlmRoutes(l));
l = new LocoNetMessage(new int[] {0xEE, 0x10, 0x01, 0x02, 2, 0x00, 0x0, 0x00,0,0,0,0,0,0,0x7f,0});
Assert.assertEquals("Query command station Route 2 entries 1-4 if 8 entries per route. Or if 16 entries per route, query command station Route 1 entries 9-12.\n",
Almir.interpretAlmRoutes(l));
l = new LocoNetMessage(new int[] {0xEE, 0x10, 0x01, 0x02, 0x03, 0x00, 0, 0x00,0,0,0,0,0,0,0x7f,0});
Assert.assertEquals("Query command station Route 2 entries 5-8 if 8 entries per route. Or if 16 entries per route, query command station Route 1 entries 13-16.\n",
Almir.interpretAlmRoutes(l));
l = new LocoNetMessage(new int[] {0xEE, 0x10, 0x01, 0x02, 32, 0x00, 0, 0xF, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7, 0xF, 0x2D});
Assert.assertEquals("Query command station Route 17 entries 1-4 if 8 entries per route. Or if 16 entries per route, query command station Route 9 entries 1-4.\n",
Almir.interpretAlmRoutes(l));
l = new LocoNetMessage(new int[] {0xEE, 0x10, 0x01, 0x02, 0x78, 0x01, 0x0F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x74});
Assert.assertEquals("Query command station Route 125 entries 1-4 if 8 entries per route. Or if 16 entries per route, query command station Route 63 entries 1-4.\n",
Almir.interpretAlmRoutes(l));
l = new LocoNetMessage(new int[] {0xEE, 0x10, 0x01, 0x02, 0x7C, 0x01, 0x0F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x74});
Assert.assertEquals("Query command station Route 127 entries 1-4 if 8 entries per route. Or if 16 entries per route, query command station Route 64 entries 1-4.\n",
Almir.interpretAlmRoutes(l));
l = new LocoNetMessage(new int[] {0xEE, 0x10, 0x01, 0x02, 0x7D, 0x01, 0x0F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x74});
Assert.assertEquals("Query command station Route 127 entries 5-8 if 8 entries per route. Or if 16 entries per route, query command station Route 64 entries 5-8.\n",
Almir.interpretAlmRoutes(l));
l = new LocoNetMessage(new int[] {0xEE, 0x10, 0x01, 0x02, 0x7E, 0x01, 0x0F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x74});
Assert.assertEquals("Query command station Route 128 entries 1-4 if 8 entries per route. Or if 16 entries per route, query command station Route 64 entries 9-12.\n",
Almir.interpretAlmRoutes(l));
l = new LocoNetMessage(new int[] {0xEE, 0x10, 0x01, 0x02, 0x7F, 0x01, 0x0F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x74});
Assert.assertEquals("Query command station Route 128 entries 5-8 if 8 entries per route. Or if 16 entries per route, query command station Route 64 entries 13-16.\n",
Almir.interpretAlmRoutes(l));
l = new LocoNetMessage(new int[] {0xEE, 0x10, 0x01, 0x03, 0x7F, 0x01, 0x0F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x74});
Assert.assertEquals("Write command station Route 128 entries 5-8 if 8 entries per route. Or if 16 entries per route, write command station Route 64 entries 13-16 with Unused, Unused, Unused, Unused.\n",
Almir.interpretAlmRoutes(l));
l = new LocoNetMessage(new int[] {0xE6, 0x10, 0x01, 0x02, 0x7F, 0x01, 0x0F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x74});
Assert.assertEquals("Report command station Route 128 entries 5-8 if 8 entries per route. Or if 16 entries per route, report command station Route 64 entries 13-16 with Unused, Unused, Unused, Unused.\n",
Almir.interpretAlmRoutes(l));
l = new LocoNetMessage(new int[] {0xE6, 0x10, 0x01, 0x02, 0x7F, 0x01, 0x0F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x74});
Assert.assertEquals("Report command station Route 128 entries 5-8 if 8 entries per route. Or if 16 entries per route, report command station Route 64 entries 13-16 with Unused, Unused, Unused, Unused.\n",
Almir.interpretAlmRoutes(l));
l = new LocoNetMessage(new int[] {0xE6, 0x10, 0x01, 0x02, 0x02, 0x00, 0x0F, 0x0C, 0x20, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x2B});
Assert.assertEquals("Report command station Route 2 entries 1-4 if 8 entries per route. Or if 16 entries per route, report command station Route 1 entries 9-12 with 13c, Unused, Unused, Unused.\n",
Almir.interpretAlmRoutes(l));
l = new LocoNetMessage(new int[] {0xE6 ,0x10 ,0x01 ,0x02 ,0x02 ,0x00 ,0x0F ,0x0C ,0x20 ,0x7F ,0x10 ,0x00 ,0x31 ,0x7F ,0x7F ,0x75});
Assert.assertEquals("Report command station Route 2 entries 1-4 if 8 entries per route. Or if 16 entries per route, report command station Route 1 entries 9-12 with 13c, 128t, 129c, Unused.\n",
Almir.interpretAlmRoutes(l));
l = new LocoNetMessage(new int[] {0xE6 ,0x10 ,0x01 ,0x02 ,0x02 ,0x00 ,0x0F ,0x0C ,0x20 ,0x7F ,0x10 ,0x00 ,0x31 ,0x7F ,0x7F ,0x75});
Assert.assertEquals("Report command station Route 2 entries 1-4 if 8 entries per route. Or if 16 entries per route, report command station Route 1 entries 9-12 with 13c, 128t, 129c, Unused.\n",
Almir.interpretAlmRoutes(l));
l = new LocoNetMessage(new int[] {0xE6 ,0x10 ,0x01 ,0x02 ,0x02 ,0x00 ,0x0F ,0x0C ,0x20 ,0x7F ,0x10 ,0x00 ,0x31 ,0x00 ,0x34 ,0x48});
Assert.assertEquals("Report command station Route 2 entries 1-4 if 8 entries per route. Or if 16 entries per route, report command station Route 1 entries 9-12 with 13c, 128t, 129c, 513c.\n",
Almir.interpretAlmRoutes(l));
l = new LocoNetMessage(new int[] {0xE6 ,0x10 ,0x01 ,0x02 ,0x02 ,0x00 ,0x0F ,0x0C ,0x10 ,0x7F ,0x10 ,0x00 ,0x31 ,0x00 ,0x34 ,0x48});
Assert.assertEquals("Report command station Route 2 entries 1-4 if 8 entries per route. Or if 16 entries per route, report command station Route 1 entries 9-12 with 13t, 128t, 129c, 513c.\n",
Almir.interpretAlmRoutes(l));
l = new LocoNetMessage(new int[] {0xE6 ,0x10 ,0x01 ,0x02 ,0x02 ,0x00 ,0x0F ,0x0C ,0x10 ,0x7F ,0x30 ,0x00 ,0x31 ,0x00 ,0x34 ,0x48});
Assert.assertEquals("Report command station Route 2 entries 1-4 if 8 entries per route. Or if 16 entries per route, report command station Route 1 entries 9-12 with 13t, 128c, 129c, 513c.\n",
Almir.interpretAlmRoutes(l));
l = new LocoNetMessage(new int[] {0xE6 ,0x10 ,0x01 ,0x02 ,0x02 ,0x00 ,0x0F ,0x0C ,0x10 ,0x7F ,0x30 ,0x00 ,0x11 ,0x00 ,0x34 ,0x48});
Assert.assertEquals("Report command station Route 2 entries 1-4 if 8 entries per route. Or if 16 entries per route, report command station Route 1 entries 9-12 with 13t, 128c, 129t, 513c.\n",
Almir.interpretAlmRoutes(l));
l = new LocoNetMessage(new int[] {0xE6 ,0x10 ,0x01 ,0x02 ,0x02 ,0x00 ,0x0F ,0x0C ,0x10 ,0x7F ,0x30 ,0x00 ,0x11 ,0x00 ,0x14 ,0x48});
Assert.assertEquals("Report command station Route 2 entries 1-4 if 8 entries per route. Or if 16 entries per route, report command station Route 1 entries 9-12 with 13t, 128c, 129t, 513t.\n",
Almir.interpretAlmRoutes(l));
}
@Test
public void testAlmRouteDevDataReport() {
//E6 10 02 02 ALM-style DS7x-series Route Data Report
LocoNetMessage l = new LocoNetMessage(new int[] {
0xE6, 0x10, 0x02, 0x02, 0x00, 0x00, 0x00, 0x1F, 0x10, 0x44, 0x37, 0x39, 0x12, 0x75, 0x1B, 0x30});
Assert.assertEquals("check 1a","Report device Route 1 entries 1-4 if 8 entries per route. Or if 16 entries per route, report device Route 1 entries 1-4 with 32t, 965c, 314t, 1526t.\n", Almir.interpretAlmRoutes(l));
l.setElement(8,0);
l.setElement(9,0);
l.setElement(10,0);
l.setElement(11,0);
l.setElement(12,0);
l.setElement(13,0);
l.setElement(14,0);
int i;
for (i = 1; i < 0x80; ) {
l.setElement(7, i);
Assert.assertEquals("check 1 loop "+i,"Report device Route 1 entries 1-4 if 8 entries per route. Or if 16 entries per route, report device Route 1 entries 1-4 with "+(i+1)+"t, 1t, 1t, 1t.\n", Almir.interpretAlmRoutes(l));
i <<= 1;
}
l.setElement(7,0);
for (i = 1; i < 0x10; ) {
l.setElement(8, i);
Assert.assertEquals("check 2 loop "+i,"Report device Route 1 entries 1-4 if 8 entries per route. Or if 16 entries per route, report device Route 1 entries 1-4 with "+((i<<7)+1)+"t, 1t, 1t, 1t.\n", Almir.interpretAlmRoutes(l));
i <<= 1;
}
l.setElement(8,0);
for (i = 1; i < 0x80; ) {
l.setElement(9, i);
Assert.assertEquals("check 3 loop "+i,"Report device Route 1 entries 1-4 if 8 entries per route. Or if 16 entries per route, report device Route 1 entries 1-4 with 1t, "+(i+1)+"t, 1t, 1t.\n", Almir.interpretAlmRoutes(l));
i <<= 1;
}
l.setElement(9,0);
for (i = 1; i < 0x10; ) {
l.setElement(10, i);
Assert.assertEquals("check 4 loop "+i,"Report device Route 1 entries 1-4 if 8 entries per route. Or if 16 entries per route, report device Route 1 entries 1-4 with 1t, "+((i<<7)+1)+"t, 1t, 1t.\n", Almir.interpretAlmRoutes(l));
i <<= 1;
}
l.setElement(10,0);
for (i = 1; i < 0x80; ) {
l.setElement(11, i);
Assert.assertEquals("check 5 loop "+i,"Report device Route 1 entries 1-4 if 8 entries per route. Or if 16 entries per route, report device Route 1 entries 1-4 with 1t, 1t, "+(i+1)+"t, 1t.\n", Almir.interpretAlmRoutes(l));
i <<= 1;
}
l.setElement(11,0);
for (i = 1; i < 0x10; ) {
l.setElement(12, i);
Assert.assertEquals("check 6 loop "+i,"Report device Route 1 entries 1-4 if 8 entries per route. Or if 16 entries per route, report device Route 1 entries 1-4 with 1t, 1t, "+((i<<7)+1)+"t, 1t.\n", Almir.interpretAlmRoutes(l));
i <<= 1;
}
l.setElement(12,0);
for (i = 1; i < 0x80; ) {
l.setElement(13, i);
Assert.assertEquals("check 7 loop "+i,"Report device Route 1 entries 1-4 if 8 entries per route. Or if 16 entries per route, report device Route 1 entries 1-4 with 1t, 1t, 1t, "+(i+1)+"t.\n", Almir.interpretAlmRoutes(l));
i <<= 1;
}
l.setElement(13,0);
for (i = 1; i < 0x10; ) {
l.setElement(14, i);
Assert.assertEquals("check 8 loop "+i,"Report device Route 1 entries 1-4 if 8 entries per route. Or if 16 entries per route, report device Route 1 entries 1-4 with 1t, 1t, 1t, "+((i<<7)+1)+"t.\n", Almir.interpretAlmRoutes(l));
i <<= 1;
}
l.setElement(14,0);
l.setElement(8,0x20);
Assert.assertEquals("check closed turnout 1","Report device Route 1 entries 1-4 if 8 entries per route. Or if 16 entries per route, report device Route 1 entries 1-4 with 1c, 1t, 1t, 1t.\n", Almir.interpretAlmRoutes(l));
l.setElement(8,0);
l.setElement(10,0x20);
Assert.assertEquals("check closed turnout 2","Report device Route 1 entries 1-4 if 8 entries per route. Or if 16 entries per route, report device Route 1 entries 1-4 with 1t, 1c, 1t, 1t.\n", Almir.interpretAlmRoutes(l));
l.setElement(10,0);
l.setElement(12,0x20);
Assert.assertEquals("check closed turnout 3","Report device Route 1 entries 1-4 if 8 entries per route. Or if 16 entries per route, report device Route 1 entries 1-4 with 1t, 1t, 1c, 1t.\n", Almir.interpretAlmRoutes(l));
l.setElement(12,0);
l.setElement(14,0x20);
Assert.assertEquals("check closed turnout 4","Report device Route 1 entries 1-4 if 8 entries per route. Or if 16 entries per route, report device Route 1 entries 1-4 with 1t, 1t, 1t, 1c.\n", Almir.interpretAlmRoutes(l));
}
@Test
public void testAlmRouteCsDataWr() {
//EE 10 01 03 ALM-style Command station Route Data Write
LocoNetMessage l;
l = new LocoNetMessage(new int[] {0xE6, 0x10, 0x01, 0x03, 0x7F, 0x01, 0x0F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x74});
Assert.assertEquals("",
Almir.interpretAlmRoutes(l));
l = new LocoNetMessage(new int[] {0xEE, 0x10, 0x01, 0x03, 0x7D, 0x01, 0x0F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x74});
Assert.assertEquals("Write command station Route 127 entries 5-8 if 8 entries per route. Or if 16 entries per route, write command station Route 64 entries 5-8 with Unused, Unused, Unused, Unused.\n",
Almir.interpretAlmRoutes(l));
}
@Test
public void testAlmRouteDevRouteDataWrite() {
//EE 10 02 03 ALM-style DS7x-series Route Data Write
LocoNetMessage l = new LocoNetMessage(new int[] {
0xEE, 0x10, 0x02, 0x03, 0x02, 0x00, 0x00, 0x7F, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x30});
Assert.assertEquals("check 1a","Write device Route 2 entries 1-4 if 8 entries per route. Or if 16 entries per route, write device Route 1 entries 9-12 with Unused, Unused, Unused, Unused.\n", Almir.interpretAlmRoutes(l));
l.setElement(4,1);
Assert.assertEquals("check 1b","Write device Route 1 entries 5-8 if 8 entries per route. Or if 16 entries per route, write device Route 1 entries 5-8 with Unused, Unused, Unused, Unused.\n", Almir.interpretAlmRoutes(l));
l.setElement(4,3);
Assert.assertEquals("check 1c","Write device Route 2 entries 5-8 if 8 entries per route. Or if 16 entries per route, write device Route 1 entries 13-16 with Unused, Unused, Unused, Unused.\n", Almir.interpretAlmRoutes(l));
l.setElement(4,0x7F);
Assert.assertEquals("check 1d","Write device Route 64 entries 5-8 if 8 entries per route. Or if 16 entries per route, write device Route 32 entries 13-16 with Unused, Unused, Unused, Unused.\n", Almir.interpretAlmRoutes(l));
l.setElement(4,0x00);
l.setElement(5, 0x01);
Assert.assertEquals("check 13","Write device Route 65 entries 1-4 if 8 entries per route. Or if 16 entries per route, write device Route 33 entries 1-4 with Unused, Unused, Unused, Unused.\n", Almir.interpretAlmRoutes(l));
l.setElement(4,0);
l.setElement(5,0);
l.setElement(8,0);
l.setElement(9,0);
l.setElement(10,0);
l.setElement(11,0);
l.setElement(12,0);
l.setElement(13,0);
l.setElement(14,0);
int i;
for (i = 1; i < 0x80; ) {
l.setElement(7, i);
Assert.assertEquals("check 1 loop "+i,"Write device Route 1 entries 1-4 if 8 entries per route. Or if 16 entries per route, write device Route 1 entries 1-4 with "+(i+1)+"t, 1t, 1t, 1t.\n", Almir.interpretAlmRoutes(l));
i <<= 1;
}
l.setElement(7,0);
for (i = 1; i < 0x10; ) {
l.setElement(8, i);
Assert.assertEquals("check 2 loop "+i,"Write device Route 1 entries 1-4 if 8 entries per route. Or if 16 entries per route, write device Route 1 entries 1-4 with "+((i<<7)+1)+"t, 1t, 1t, 1t.\n", Almir.interpretAlmRoutes(l));
i <<= 1;
}
l.setElement(8,0);
for (i = 1; i < 0x80; ) {
l.setElement(9, i);
Assert.assertEquals("check 3 loop "+i,"Write device Route 1 entries 1-4 if 8 entries per route. Or if 16 entries per route, write device Route 1 entries 1-4 with 1t, "+(i+1)+"t, 1t, 1t.\n", Almir.interpretAlmRoutes(l));
i <<= 1;
}
l.setElement(9,0);
for (i = 1; i < 0x10; ) {
l.setElement(10, i);
Assert.assertEquals("check 4 loop "+i,"Write device Route 1 entries 1-4 if 8 entries per route. Or if 16 entries per route, write device Route 1 entries 1-4 with 1t, "+((i<<7)+1)+"t, 1t, 1t.\n", Almir.interpretAlmRoutes(l));
i <<= 1;
}
l.setElement(10,0);
for (i = 1; i < 0x80; ) {
l.setElement(11, i);
Assert.assertEquals("check 5 loop "+i,"Write device Route 1 entries 1-4 if 8 entries per route. Or if 16 entries per route, write device Route 1 entries 1-4 with 1t, 1t, "+(i+1)+"t, 1t.\n", Almir.interpretAlmRoutes(l));
i <<= 1;
}
l.setElement(11,0);
for (i = 1; i < 0x10; ) {
l.setElement(12, i);
Assert.assertEquals("check 6 loop "+i,"Write device Route 1 entries 1-4 if 8 entries per route. Or if 16 entries per route, write device Route 1 entries 1-4 with 1t, 1t, "+((i<<7)+1)+"t, 1t.\n", Almir.interpretAlmRoutes(l));
i <<= 1;
}
l.setElement(12,0);
for (i = 1; i < 0x80; ) {
l.setElement(13, i);
Assert.assertEquals("check 7 loop "+i,"Write device Route 1 entries 1-4 if 8 entries per route. Or if 16 entries per route, write device Route 1 entries 1-4 with 1t, 1t, 1t, "+(i+1)+"t.\n", Almir.interpretAlmRoutes(l));
i <<= 1;
}
l.setElement(13,0);
for (i = 1; i < 0x10; ) {
l.setElement(14, i);
Assert.assertEquals("check 8 loop "+i,"Write device Route 1 entries 1-4 if 8 entries per route. Or if 16 entries per route, write device Route 1 entries 1-4 with 1t, 1t, 1t, "+((i<<7)+1)+"t.\n", Almir.interpretAlmRoutes(l));
i <<= 1;
}
l.setElement(14,0);
l.setElement(8,0x20);
Assert.assertEquals("check closed turnout 1","Write device Route 1 entries 1-4 if 8 entries per route. Or if 16 entries per route, write device Route 1 entries 1-4 with 1c, 1t, 1t, 1t.\n", Almir.interpretAlmRoutes(l));
l.setElement(8,0);
l.setElement(10,0x20);
Assert.assertEquals("check closed turnout 2","Write device Route 1 entries 1-4 if 8 entries per route. Or if 16 entries per route, write device Route 1 entries 1-4 with 1t, 1c, 1t, 1t.\n", Almir.interpretAlmRoutes(l));
l.setElement(10,0);
l.setElement(12,0x20);
Assert.assertEquals("check closed turnout 3","Write device Route 1 entries 1-4 if 8 entries per route. Or if 16 entries per route, write device Route 1 entries 1-4 with 1t, 1t, 1c, 1t.\n", Almir.interpretAlmRoutes(l));
l.setElement(12,0);
l.setElement(14,0x20);
Assert.assertEquals("check closed turnout 4","Write device Route 1 entries 1-4 if 8 entries per route. Or if 16 entries per route, write device Route 1 entries 1-4 with 1t, 1t, 1t, 1c.\n", Almir.interpretAlmRoutes(l));
}
@Test
public void testAlmRouteDevRouteDataQuery() {
//EE 10 02 02 ALM-style DS7x-series Route Data Query
LocoNetMessage l = new LocoNetMessage(new int[] {
0xEE, 0x10, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x30});
Assert.assertEquals("check 1a","Query the selected device, Route 1, entries 1 thru 4.\n", Almir.interpretAlmRoutes(l));
int i;
for (i = 1; i < 0x80; ) {
l.setElement(4, i);
Assert.assertEquals("check 1 loop "+i,"Query the selected device, Route "
+ (1+(i/2)) + ", entries " + ((i&1)==1?"5 thru 8":"1 thru 4")
+ ".\n",
Almir.interpretAlmRoutes(l));
i <<= 1;
}
l.setElement(4,0);
for (i = 1; i < 0x80; ) {
l.setElement(5, i);
if (i < 2) {
Assert.assertEquals("check 2 loop "+i,"Query the selected device, Route "
+(1+(i<<6))+", entries 1 thru 4.\n",
Almir.interpretAlmRoutes(l));
} else {
Assert.assertEquals("check 2 loop "+i,"",Almir.interpretAlmRoutes(l));
}
i <<= 1;
}
}
@Test
public void testAlmRouteDevChgAddr() {
//EE 10 02 0f ALM-style DS7x-series device change base address
//Device {0}, s/n 0x{1}, using addresses {2} thru {3} has been selected for Routes configuration.\n
LocoNetMessage l = new LocoNetMessage(new int[] {
0xEE, 0x10, 0x02, 0x0f, 0x00, 0x00, 0x00, 0x00,
0x00, 0x74, 0x00, 0x01, 0x02, 0x03, 0x04, 0x00});
Assert.assertEquals("basic check 1",
"Change DS74, s/n 0x101 to use new Base Address 516.\n",
Almir.interpretAlmRoutes(l));
l.setElement(9,0x7c);
Assert.assertEquals("basic check 1",
"Change DS78V, s/n 0x101 to use new Base Address 516.\n",
Almir.interpretAlmRoutes(l));
l.setElement(9,0x74);
int i;
l.setElement(12, 0);
for (i = 1; i < 0x80;) {
l.setElement(11, i);
Assert.assertEquals("basic check 3 loop "+i,
"Change DS74, s/n 0x"
+Integer.toHexString(i)+" to use new Base Address 516.\n",
Almir.interpretAlmRoutes(l));
i <<= 1;
}
l.setElement(9, 0x7C);
l.setElement(11, 0);
for (i = 1; i< 0x80;) {
l.setElement(12, i);
Assert.assertEquals("basic check 4 loop "+i,
"Change DS78V, s/n 0x"
+Integer.toHexString(i<<7)+" to use new Base Address 516.\n",
Almir.interpretAlmRoutes(l));
i <<= 1;
}
l.setElement(12, 0);
l.setElement(14, 0);
for (i = 1; i< 0x80;) {
l.setElement(13, i);
Assert.assertEquals("basic check 5 loop "+i,
"Change DS78V, s/n 0x0 to use new Base Address "+(i+1)+".\n",
Almir.interpretAlmRoutes(l));
i <<= 1;
}
l.setElement(9, 0x74);
l.setElement(13, 0);
for (i = 1; i< 0x80;) {
l.setElement(14, i);
Assert.assertEquals("basic check 6 loop "+i,
"Change DS74, s/n 0x0 to use new Base Address "+Integer.toString(((i<<7)+1))+".\n",
Almir.interpretAlmRoutes(l));
i <<= 1;
}
}
@Test
public void testAlmRouteDevSelectReply() {
//E6 10 02 0E ALM-style Device selection Reply
//Device {0}, s/n 0x{1}, using addresses {2} thru {3} has been selected for Routes configuration.\n
LocoNetMessage l = new LocoNetMessage(new int[] {
0xE6, 0x10, 0x02, 0x0E, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
});
Assert.assertEquals("alm route dev select reply case 1",
"Device (Unknown), s/n 0x0, using addresses 1 thru 1 has been selected for Routes configuration.\n",
Almir.interpretAlmRoutes(l));
int i;
for (i = 0; i < 0x80;) {
l.setElement(13, i);
Assert.assertEquals("alm route dev select reply case 2 loop "+i,
"Device (Unknown), s/n 0x0, using addresses "+(i+1)+" thru "+(i+1)+" has been selected for Routes configuration.\n",
Almir.interpretAlmRoutes(l));
if (i == 0) {
i = 1;
} else {
i <<= 1;
}
}
l.setElement(13, 0);
for (i = 0; i < 0x80;) {
l.setElement(14, i);
Assert.assertEquals("alm route dev select reply case 3 loop "+i,
"Device (Unknown), s/n 0x0, using addresses "+((i<<7)+1)+" thru "+((i<<7)+1)+" has been selected for Routes configuration.\n",
Almir.interpretAlmRoutes(l));
if (i == 0) {
i = 1;
} else {
i <<= 1;
}
}
l.setElement(14, 0);
for (i = 0; i < 0x80;) {
l.setElement(11, i);
Assert.assertEquals("alm route dev select reply case 4 loop "+i,
"Device (Unknown), s/n 0x"+Integer.toHexString(i)+", using addresses 1 thru 1 has been selected for Routes configuration.\n",
Almir.interpretAlmRoutes(l));
if (i == 0) {
i = 1;
} else {
i <<= 1;
}
}
l.setElement(11, 0);
for (i = 0; i < 0x80;) {
l.setElement(12, i);
Assert.assertEquals("alm route dev select reply case 5 loop "+i,
"Device (Unknown), s/n 0x"+Integer.toHexString(i<<7)+", using addresses 1 thru 1 has been selected for Routes configuration.\n",
Almir.interpretAlmRoutes(l));
if (i == 0) {
i = 1;
} else {
i <<= 1;
}
}
l.setElement(12, 0);
l.setElement(9, 0x74);
Assert.assertEquals("alm route dev select reply case 6",
"Device DS74, s/n 0x0, using addresses 1 thru 4 has been selected for Routes configuration.\n",
Almir.interpretAlmRoutes(l));
l.setElement(10, 4);
Assert.assertEquals("alm route dev select reply case 7",
"Device DS74, s/n 0x0, using addresses 1 thru 4 has been selected for Routes configuration.\n",
Almir.interpretAlmRoutes(l));
l.setElement(10, 8);
Assert.assertEquals("alm route dev select reply case 8",
"Device DS74, s/n 0x0, using addresses 1 thru 4 has been selected for Routes configuration.\n",
Almir.interpretAlmRoutes(l));
l.setElement(10, 10);
Assert.assertEquals("alm route dev select reply case 9",
"Device DS74, s/n 0x0, using addresses 1 thru 8 has been selected for Routes configuration.\n",
Almir.interpretAlmRoutes(l));
l.setElement(10, 12);
Assert.assertEquals("alm route dev select reply case 10",
"Device DS74, s/n 0x0, using addresses 1 thru 4 has been selected for Routes configuration.\n",
Almir.interpretAlmRoutes(l));
l.setElement(10, 0);
l.setElement(9, 0x7c);
Assert.assertEquals("alm route dev select reply case 11",
"Device DS78V, s/n 0x0, using addresses 1 thru 8 has been selected for Routes configuration.\n",
Almir.interpretAlmRoutes(l));
l.setElement(10, 4);
Assert.assertEquals("alm route dev select reply case 12",
"Device DS78V, s/n 0x0, using addresses 1 thru 8 has been selected for Routes configuration.\n",
Almir.interpretAlmRoutes(l));
l.setElement(10, 8);
Assert.assertEquals("alm route dev select reply case 13",
"Device DS78V, s/n 0x0, using addresses 1 thru 8 has been selected for Routes configuration.\n",
Almir.interpretAlmRoutes(l));
l.setElement(10, 10);
Assert.assertEquals("alm route dev select reply case 14",
"Device DS78V, s/n 0x0, using addresses 1 thru 8 has been selected for Routes configuration.\n",
Almir.interpretAlmRoutes(l));
l.setElement(10, 12);
Assert.assertEquals("alm route dev select reply case 15",
"Device DS78V, s/n 0x0, using addresses 1 thru 16 has been selected for Routes configuration.\n",
Almir.interpretAlmRoutes(l));
}
@BeforeEach
public void setUp() {
JUnitUtil.setUp();
}
@AfterEach
public void tearDown() {
JUnitUtil.tearDown();
}
}