001package jmri.jmrix.roco.z21.messageformatters;
002
003import jmri.jmrix.Message;
004import jmri.jmrix.roco.z21.Z21MessageFormatter;
005import jmri.jmrix.roco.z21.Z21Reply;
006
007public class Z21CANBoosterStatusFormatter implements Z21MessageFormatter {
008    @Override
009    public boolean handlesMessage(Message m) {
010        return m instanceof Z21Reply && ((Z21Reply)m).getOpCode() == 0x00CA;
011    }
012
013    @Override
014    public String formatMessage(Message m) {
015        if(!handlesMessage(m)){
016            throw new IllegalArgumentException("Message m is not a Z21 CAN Booster Status Reply");
017        }
018        int networkID = ( m.getElement(4) & 0xFF) + ((m.getElement(5) & 0xFF) << 8);
019        int output = ( m.getElement(6) & 0xFF) + ((m.getElement(7) & 0xFF) << 8);
020        int stateFlags = ( m.getElement(8) & 0xFF) + ((m.getElement(9) & 0xFF) << 8);
021        int voltage = ( m.getElement(10) & 0xFF) + ((m.getElement(11) & 0xFF) << 8);
022        int amperage = ( m.getElement(12) & 0xFF) + ((m.getElement(13) & 0xFF) << 8);
023        String hexAddress= Integer.toHexString(networkID);
024        StringBuilder statusBuilder = new StringBuilder();
025        if((stateFlags & 0x0001) != 0) {
026            statusBuilder.append("\t\t")
027                    .append(Bundle.getMessage("Z21_CAN_BOOSTER_STATUS_FLAG_BRAKE_GENERATOR"))
028                    .append(System.lineSeparator());
029        }
030        if((stateFlags & 0x0020) != 0) {
031            statusBuilder.append("\t\t")
032                    .append(Bundle.getMessage("Z21_CAN_BOOSTER_STATUS_FLAG_SHORT_CIRCUIT"))
033                    .append(System.lineSeparator());
034        }
035        if((stateFlags & 0x0080) != 0) {
036            statusBuilder.append("\t\t")
037                    .append(Bundle.getMessage("Z21_CAN_BOOSTER_STATUS_FLAG_TRACK_OFF"))
038                    .append(System.lineSeparator());
039        }
040        if((stateFlags & 0x0800) != 0) {
041            statusBuilder.append("\t\t")
042                    .append(Bundle.getMessage("Z21_CAN_BOOSTER_STATUS_FLAG_RAILCOM_ACTIVE"))
043                    .append(System.lineSeparator());
044        }
045        if((stateFlags & 0x0100) != 0) {
046            statusBuilder.append("\t\t")
047                    .append(Bundle.getMessage("Z21_CAN_BOOSTER_STATUS_FLAG_OUTPUT_DISABLED"))
048                    .append(System.lineSeparator());
049        }
050        statusBuilder.delete(statusBuilder.length() - System.lineSeparator().length(), statusBuilder.length());
051        return Bundle.getMessage("Z21CANBoosterStatusReply", hexAddress, output, statusBuilder.toString(), voltage, amperage);
052    }
053}