001package jmri.jmrix.lenz.messageformatters;
002
003import jmri.jmrix.Message;
004import jmri.jmrix.lenz.XNetMessage;
005import jmri.jmrix.lenz.LenzCommandStation;
006import jmri.jmrix.lenz.XNetConstants;
007import jmri.jmrix.lenz.XPressNetMessageFormatter;
008
009/**
010 * Message Formatter for XPressNet Locomotive information request messages
011 * @author Paul Bender Copyright (C) 2024
012 */
013
014public class XNetLocoStatusRequestMessageFormatter implements XPressNetMessageFormatter {
015
016    @Override
017    public boolean handlesMessage(Message m) {
018        return m instanceof XNetMessage &&
019               m.getElement(0) == XNetConstants.LOCO_STATUS_REQ ;
020    }
021
022    @Override
023    public String formatMessage(Message m) {
024        switch (m.getElement(1)) {
025            case XNetConstants.LOCO_INFO_REQ_FUNC:
026                return Bundle.getMessage("XNetMessageRequestLocoFunctionMomStatus", LenzCommandStation.calcLocoAddress(m.getElement(2), m.getElement(3)));
027            case XNetConstants.LOCO_INFO_REQ_FUNC_HI_ON:
028                return Bundle.getMessage("XNetMessageRequestLocoFunctionHighStatus", LenzCommandStation.calcLocoAddress(m.getElement(2), m.getElement(3)));
029            case XNetConstants.LOCO_INFO_REQ_FUNC_HI_MOM:
030                return Bundle.getMessage("XNetMessageRequestLocoFunctionHighMomStatus", LenzCommandStation.calcLocoAddress(m.getElement(2), m.getElement(3)));
031            case XNetConstants.LOCO_INFO_REQ_V3:
032                return Bundle.getMessage("XNetMessageRequestLocoInfo", LenzCommandStation.calcLocoAddress(m.getElement(2), m.getElement(3)));
033            case XNetConstants.LOCO_STACK_SEARCH_FWD:
034                return Bundle.getMessage("XNetMessageSearchCSStackForward", LenzCommandStation.calcLocoAddress(m.getElement(2), m.getElement(3)));
035            case XNetConstants.LOCO_STACK_SEARCH_BKWD:
036                return Bundle.getMessage("XNetMessageSearchCSStackBackward", LenzCommandStation.calcLocoAddress(m.getElement(2), m.getElement(3)));
037            case XNetConstants.LOCO_STACK_DELETE:
038                return Bundle.getMessage("XNetMessageDeleteAddressOnStack", LenzCommandStation.calcLocoAddress(m.getElement(2), m.getElement(3)));
039            default:
040                throw new IllegalArgumentException("Unknown Locomotive Status Request Message");
041        }
042    }
043
044}