001package jmri.jmrix.lenz.messageformatters;
002
003import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
004import jmri.jmrix.Message;
005import jmri.jmrix.lenz.XNetConstants;
006import jmri.jmrix.lenz.XNetReply;
007import jmri.jmrix.lenz.XPressNetMessageFormatter;
008
009/**
010 * Format XPressNet V3 messages for CS Software Version Reply for display.
011 *
012 * @author Paul Bender Copyright (C) 2024
013 */
014
015public class XNetCSSoftwareVersionReplyFormatter implements XPressNetMessageFormatter {
016    @Override
017    public boolean handlesMessage(Message m) {
018        return m instanceof XNetReply &&
019                ((XNetReply) m).getElement(0)== XNetConstants.CS_SERVICE_MODE_RESPONSE &&
020                ((XNetReply) m).getElement(1)== XNetConstants.CS_SOFTWARE_VERSION;
021    }
022
023    @SuppressFBWarnings(value = "BC_UNCONFIRMED_CAST", justification = "cast is checked in handlesMessage")
024    @Override
025    public String formatMessage(Message m) {
026        if(!handlesMessage(m)) {
027            throw new IllegalArgumentException("Message is not a V3 CS Software Version Reply");
028        }
029        XNetReply r = (XNetReply) m;
030        String typeString;
031        switch (r.getElement(3)) {
032            case 0x00:
033                typeString = Bundle.getMessage("CSTypeLZ100");
034                break;
035            case 0x01:
036                typeString = Bundle.getMessage("CSTypeLH200");
037                break;
038            case 0x02:
039                typeString = Bundle.getMessage("CSTypeCompact");
040                break;
041            // GT 2007/11/6 - Added multiMaus
042            case 0x10:
043                typeString = Bundle.getMessage("CSTypeMultiMaus");
044                break;
045            default:
046                typeString = "" + r.getElement(3);
047        }
048        return Bundle.getMessage("XNetReplyCSVersion", (r.getElementBCD(2).floatValue()) / 10, typeString);
049    }
050}