private static byte[] prepareData(AddressData decoderAddress, byte acknowledge) { ByteArrayOutputStream out = new ByteArrayOutputStream(); // write decoder address out.write(ByteUtils.getLowByte(decoderAddress.getAddress())); out.write(ByteUtils.getHighByte(decoderAddress.getAddress())); // data out.write(acknowledge); return out.toByteArray(); }
@Override public boolean equals(Object obj) { if (obj instanceof AddressData) { AddressData other = (AddressData) obj; if (address == other.getAddress() && type.equals(other.getType())) { return true; } } return false; }
/** * Convert the address data into a byte array. * * @param addressData * the address */ public static byte[] toByteArray(AddressData addressData) { byte[] data = new byte[2]; byte lowByte = ByteUtils.getLowByte(addressData.getAddress()); data[0] = lowByte; byte highByte = ByteUtils .getLowByte((ByteUtils.getHighByte(addressData.getAddress()) | (addressData.getType().getType() << 6))); data[1] = highByte; return data; }
/** * Add the address data to the provided byte array. * * @param addressData * the address * @param data * the byte array * @param offset * the offset to insert the address data */ public static void toByteArray(AddressData addressData, byte[] data, int offset) { byte lowByte = ByteUtils.getLowByte(addressData.getAddress()); data[offset] = lowByte; byte highByte = ByteUtils .getLowByte((ByteUtils.getHighByte(addressData.getAddress()) | (addressData.getType().getType() << 6))); data[offset + 1] = highByte; }
@Test public void prepareDecoderUpdatePomMessagesTest() throws URISyntaxException { DecoderPomUpdate decoderPomUpdate = new DecoderPomUpdate(); File firmwareFile = new File(DecoderPomUpdate.class.getResource("/firmware/LD-G-31-Plus_V2_2.hex").toURI().getPath()); List<String> firmwareContent = decoderPomUpdate.loadFirmwareFile(firmwareFile); Assert.assertNotNull(firmwareContent); DecoderInformation decoderInformation = new DecoderInformation("3E000031020200000305201500000000"); List<CommandStationPomMessage> messages = decoderPomUpdate.prepareDecoderUpdatePomMessages(firmwareContent, decoderInformation); Assert.assertNotNull(messages); CommandStationPomMessage message = messages.get(0); Assert.assertEquals(message.getDecoderAddress().getAddress(), 8705); Assert.assertEquals(message.getCvNumber(), 1); Assert.assertEquals(message.getCvValue(), 0x31); } }
@Test public void prepareSmallerLine2Test() { String line2 = ":08F2D000047E00003281000001"; DecoderPomUpdate decoderPomUpdate = new DecoderPomUpdate(); FirmwarePacket packet = decoderPomUpdate.parseLine(line2); Assert.assertNotNull(packet); LOGGER.info("Current packet: {}", packet); int packetLen = ByteUtils.getInt(packet.getLen()); // 08 F2D0 00 CommandStationPomMessage message = decoderPomUpdate.prepareNextRowPacket(packet, DecoderType.locoDecoder); Assert.assertNotNull(message); LOGGER.info("Row packet, message: {}, formatted data: {}", message, ByteUtils.bytesToHex(message.getData())); Assert.assertEquals(message.getDecoderAddress().getAddress(), 8448); Assert.assertEquals(message.getCvNumber(), 0xF2 + 1); Assert.assertEquals(message.getCvValue(), 0xD0); for (int index = 0; index < (packetLen / 3 + 1); index++) { message = decoderPomUpdate.prepareNextDataPacket(packet, DecoderType.locoDecoder); Assert.assertNotNull(message); LOGGER.info("Data packet, message: {}, formatted data: {}", message, ByteUtils.bytesToHex(message.getData())); } // verify the last message Assert.assertNotNull(message); LOGGER.info("Data packet, message: {}, formatted data: {}", message, ByteUtils.bytesToHex(message.getData())); Assert.assertEquals(message.getDecoderAddress().getAddress(), 8192 + 0 /* 0x00 : 8192 */); Assert.assertEquals(message.getCvNumber(), 0x00 + 1 + 0x0200); Assert.assertEquals(message.getCvValue(), 0x00); }
@Test public void prepareLine2Test() { String line2 = ":1000000080090020ED000000C1000000C1000000D8"; DecoderPomUpdate decoderPomUpdate = new DecoderPomUpdate(); FirmwarePacket packet = decoderPomUpdate.parseLine(line2); Assert.assertNotNull(packet); LOGGER.info("Current packet: {}", packet); int packetLen = ByteUtils.getInt(packet.getLen()); // 08 F2D0 00 CommandStationPomMessage message = decoderPomUpdate.prepareNextRowPacket(packet, DecoderType.locoDecoder); Assert.assertNotNull(message); LOGGER.info("Row packet, message: {}, formatted data: {}", message, ByteUtils.bytesToHex(message.getData())); Assert.assertEquals(message.getDecoderAddress().getAddress(), 8448); Assert.assertEquals(message.getCvNumber(), 0x300 + 1); Assert.assertEquals(message.getCvValue(), 0); for (int index = 0; index < (packetLen / 3 + 1); index++) { message = decoderPomUpdate.prepareNextDataPacket(packet, DecoderType.locoDecoder); Assert.assertNotNull(message); LOGGER.info("Data packet, message: {}, formatted data: {}", message, ByteUtils.bytesToHex(message.getData())); } // verify the last message Assert.assertNotNull(message); LOGGER.info("Data packet, message: {}, formatted data: {}", message, ByteUtils.bytesToHex(message.getData())); Assert.assertEquals(message.getDecoderAddress().getAddress(), 8192 + 0); Assert.assertEquals(message.getCvNumber(), 0x00 + 1 + 0x0100); Assert.assertEquals(message.getCvValue(), 0x00); }
Assert.assertNotNull(message); LOGGER.info("Row packet, message: {}, formatted data: {}", message, ByteUtils.bytesToHex(message.getData())); Assert.assertEquals(message.getDecoderAddress().getAddress(), 8448); Assert.assertEquals(message.getCvNumber(), 0xF2 + 1); Assert.assertEquals(message.getCvValue(), 0xD0); Assert.assertNotNull(message); LOGGER.info("Data packet, message: {}, formatted data: {}", message, ByteUtils.bytesToHex(message.getData())); Assert.assertEquals(message.getDecoderAddress().getAddress(), 8192 + 4 /* 0x04 : 8196 */); Assert.assertEquals(message.getCvNumber(), 0x7E + 1); Assert.assertEquals(message.getCvValue(), 0x00); Assert.assertNotNull(message); LOGGER.info("Data packet, message: {}, formatted data: {}", message, ByteUtils.bytesToHex(message.getData())); Assert.assertEquals(message.getDecoderAddress().getAddress(), 8192 + 0 /* 0x00 : 8192 */); Assert.assertEquals(message.getCvNumber(), 0x32 + 1 + 0x0100); Assert.assertEquals(message.getCvValue(), 0x81); Assert.assertNotNull(message); LOGGER.info("Data packet, message: {}, formatted data: {}", message, ByteUtils.bytesToHex(message.getData())); Assert.assertEquals(message.getDecoderAddress().getAddress(), 8192 + 0 /* 0x00 : 8192 */); Assert.assertEquals(message.getCvNumber(), 0x00 + 1 + 0x0200); Assert.assertEquals(message.getCvValue(), 0x00);
Assert.assertNotNull(message); LOGGER.info("Row packet, message: {}, formatted data: {}", message, ByteUtils.bytesToHex(message.getData())); Assert.assertEquals(message.getDecoderAddress().getAddress(), 8448); Assert.assertEquals(message.getCvNumber(), 0xF2 + 0x100 + 1); Assert.assertEquals(message.getCvValue(), 0xF8); Assert.assertNotNull(message); LOGGER.info("Data packet, message: {}, formatted data: {}", message, ByteUtils.bytesToHex(message.getData())); Assert.assertEquals(message.getDecoderAddress().getAddress(), 8192 + 16 /* 0x10 : 8208 */); Assert.assertEquals(message.getCvNumber(), 0x27 + 1); Assert.assertEquals(message.getCvValue(), 0x00); Assert.assertNotNull(message); LOGGER.info("Data packet, message: {}, formatted data: {}", message, ByteUtils.bytesToHex(message.getData())); Assert.assertEquals(message.getDecoderAddress().getAddress(), 8192 + 0 /* 0x00 : 8192 */); Assert.assertEquals(message.getCvNumber(), 0x00 + 1 + 0x0100); Assert.assertEquals(message.getCvValue(), 0x80); Assert.assertNotNull(message); LOGGER.info("Data packet, message: {}, formatted data: {}", message, ByteUtils.bytesToHex(message.getData())); Assert.assertEquals(message.getDecoderAddress().getAddress(), 8192 + 81 /* 0x51 : 8273 */); Assert.assertEquals(message.getCvNumber(), 0x01 + 1 + 0x0200); Assert.assertEquals(message.getCvValue(), 0x00); Assert.assertNotNull(message); LOGGER.info("Data packet, message: {}, formatted data: {}", message, ByteUtils.bytesToHex(message.getData())); Assert.assertEquals(message.getDecoderAddress().getAddress(), 8192 + 128 /* 0x80 : 8320 */); Assert.assertEquals(message.getCvNumber(), 0x51 + 1 + 0x0300); Assert.assertEquals(message.getCvValue(), 0x01);
Assert.assertNotNull(message); LOGGER.info("Row packet, message: {}, formatted data: {}", message, ByteUtils.bytesToHex(message.getData())); Assert.assertEquals(message.getDecoderAddress().getAddress(), 8448); Assert.assertEquals(message.getCvNumber(), 0x300 + 1); Assert.assertEquals(message.getCvValue(), 0); Assert.assertNotNull(message); LOGGER.info("Data packet, message: {}, formatted data: {}", message, ByteUtils.bytesToHex(message.getData())); Assert.assertEquals(message.getDecoderAddress().getAddress(), 8192 + 128 /* 8320 */); Assert.assertEquals(message.getCvNumber(), 0x09 + 1); Assert.assertEquals(message.getCvValue(), 0x00); Assert.assertNotNull(message); LOGGER.info("Data packet, message: {}, formatted data: {}", message, ByteUtils.bytesToHex(message.getData())); Assert.assertEquals(message.getDecoderAddress().getAddress(), 8192 + 32 /* 8224 */); Assert.assertEquals(message.getCvNumber(), 0xED + 1 + 0x0100); Assert.assertEquals(message.getCvValue(), 0x00); Assert.assertNotNull(message); LOGGER.info("Data packet, message: {}, formatted data: {}", message, ByteUtils.bytesToHex(message.getData())); Assert.assertEquals(message.getDecoderAddress().getAddress(), 8192 + 0); Assert.assertEquals(message.getCvNumber(), 0x00 + 1 + 0x0200); Assert.assertEquals(message.getCvValue(), 0xC1); Assert.assertNotNull(message); LOGGER.info("Data packet, message: {}, formatted data: {}", message, ByteUtils.bytesToHex(message.getData())); Assert.assertEquals(message.getDecoderAddress().getAddress(), 8192 + 0); Assert.assertEquals(message.getCvNumber(), 0x00 + 1 + 0x0300); Assert.assertEquals(message.getCvValue(), 0x00);