001package jmri.jmrix.lenz.messageformatters;
002
003import jmri.jmrix.Message;
004import jmri.jmrix.lenz.XNetMessage;
005import jmri.jmrix.lenz.XPressNetMessageFormatter;
006import jmri.jmrix.lenz.XNetConstants;
007
008/**
009 * Message Formatter for XPressNet programming request messages
010 * @author Paul Bender Copyright (C) 2024
011 */
012public class XNetProgWriteMessageFormatter implements XPressNetMessageFormatter {
013    private static final String X_NET_MESSAGE_REQUEST_SERVICE_MODE_WRITE_DIRECT_V_36 = "XNetMessageRequestServiceModeWriteDirectV36";
014
015    @Override
016    public boolean handlesMessage(Message m) {
017        return m instanceof XNetMessage &&
018           m.getElement(0) == XNetConstants.PROG_WRITE_REQUEST;
019    }
020
021    @Override
022    public String formatMessage(Message m) {
023        switch (m.getElement(1)) {
024            case XNetConstants.PROG_WRITE_MODE_REGISTER:
025                return Bundle.getMessage("XNetMessageRequestServiceModeWriteRegister", m.getElement(2), m.getElement(3));
026            case XNetConstants.PROG_WRITE_MODE_CV:
027                return Bundle.getMessage("XNetMessageRequestServiceModeWriteDirect", m.getElement(2), m.getElement(3));
028            case XNetConstants.PROG_WRITE_MODE_PAGED:
029                return Bundle.getMessage("XNetMessageRequestServiceModeWritePaged", m.getElement(2), m.getElement(3));
030            case XNetConstants.PROG_WRITE_MODE_CV_V36:
031                return Bundle.getMessage(X_NET_MESSAGE_REQUEST_SERVICE_MODE_WRITE_DIRECT_V_36, (m.getElement(2) == 0 ? 1024 : m.getElement(2)), m.getElement(3));
032            case (XNetConstants.PROG_WRITE_MODE_CV_V36 + 1):
033                return Bundle.getMessage(X_NET_MESSAGE_REQUEST_SERVICE_MODE_WRITE_DIRECT_V_36, (256 + m.getElement(2)), m.getElement(3));
034            case (XNetConstants.PROG_WRITE_MODE_CV_V36 + 2):
035                return Bundle.getMessage(X_NET_MESSAGE_REQUEST_SERVICE_MODE_WRITE_DIRECT_V_36, (512 + m.getElement(2)), m.getElement(3));
036            case (XNetConstants.PROG_WRITE_MODE_CV_V36 + 3):
037                return Bundle.getMessage(X_NET_MESSAGE_REQUEST_SERVICE_MODE_WRITE_DIRECT_V_36, (768 + m.getElement(2)), m.getElement(3));
038            default:
039                throw new IllegalArgumentException("Unknown Programming Write Message");
040        }
041    }
042}