001package jmri.jmrix.lenz.messageformatters;
002
003import jmri.jmrix.Message;
004import jmri.jmrix.lenz.XNetConstants;
005import jmri.jmrix.lenz.XNetReply;
006import jmri.jmrix.lenz.XPressNetMessageFormatter;
007
008/**
009 * XPressNet message formatter for Loco Info Normal Unit Reply.
010 *
011 * @author Paul Bender Copyright (C) 2024
012 */
013public class XNetLocoInfoNormalUnitReplyFormatter implements XPressNetMessageFormatter {
014
015    @Override
016    public boolean handlesMessage(Message m) {
017        return m instanceof XNetReply &&
018                ((XNetReply) m).getElement(0) == XNetConstants.LOCO_INFO_NORMAL_UNIT
019                && ((XNetReply) m).getElement(1) != XNetConstants.LOCO_FUNCTION_STATUS_HIGH;
020    }
021
022    @Override
023    public String formatMessage(Message m) {
024        if(!handlesMessage(m)){
025            throw new IllegalArgumentException("Message is not supported");
026        }
027        // message byte 4, contains F0,F1,F2,F3,F4
028        int element3 = m.getElement(3);
029        // message byte 5, contains F12,F11,F10,F9,F8,F7,F6,F5
030        int element4 = m.getElement(4);
031        return Bundle.getMessage("XNetReplyLocoNormalLabel") + ","+
032                XNetLocoInfoReplyUtilities.parseSpeedAndDirection(m.getElement(1), m.getElement(2)) + " " +
033                XNetLocoInfoReplyUtilities.parseFunctionStatus(element3, element4);
034    }
035
036
037
038
039
040}
041