001package jmri.jmrix.lenz.messageformatters; 002 003import jmri.jmrix.Message; 004import jmri.jmrix.lenz.XNetConstants; 005import jmri.jmrix.lenz.XNetMessage; 006import jmri.jmrix.lenz.XPressNetMessageFormatter; 007 008/** 009 * Message Formatter for XPressNet programming read request messages 010 * @author Paul Bender Copyright (C) 2024 011 */ 012public class XNetProgReadMessageFormatter implements XPressNetMessageFormatter { 013 014 private static final String X_NET_MESSAGE_REQUEST_SERVICE_MODE_READ_DIRECT_V_36 = "XNetMessageRequestServiceModeReadDirectV36"; 015 016 017 @Override 018 public boolean handlesMessage(Message m) { 019 return m instanceof XNetMessage && 020 m.getElement(0) == XNetConstants.PROG_READ_REQUEST && 021 (m.getElement(1) == XNetConstants.PROG_READ_MODE_REGISTER || 022 m.getElement(1) == XNetConstants.PROG_READ_MODE_CV || 023 m.getElement(1) == XNetConstants.PROG_READ_MODE_PAGED || 024 (m.getElement(1) >= XNetConstants.PROG_READ_MODE_CV_V36 025 && m.getElement(1) <= XNetConstants.PROG_READ_MODE_CV_V36 + 3)); 026 } 027 028 @Override 029 public String formatMessage(Message m) { 030 switch (m.getElement(1)) { 031 case XNetConstants.PROG_READ_MODE_REGISTER: 032 return Bundle.getMessage("XNetMessageRequestServiceModeReadRegister", m.getElement(2)); 033 case XNetConstants.PROG_READ_MODE_CV: 034 return Bundle.getMessage("XNetMessageRequestServiceModeReadDirect", m.getElement(2)); 035 case XNetConstants.PROG_READ_MODE_PAGED: 036 return Bundle.getMessage("XNetMessageRequestServiceModeReadPaged", m.getElement(2)); 037 case XNetConstants.PROG_READ_MODE_CV_V36: 038 return Bundle.getMessage(X_NET_MESSAGE_REQUEST_SERVICE_MODE_READ_DIRECT_V_36, (m.getElement(2) == 0 ? 1024 : m.getElement(2))); 039 case XNetConstants.PROG_READ_MODE_CV_V36 + 1: 040 return Bundle.getMessage(X_NET_MESSAGE_REQUEST_SERVICE_MODE_READ_DIRECT_V_36, (256 + m.getElement(2))); 041 case XNetConstants.PROG_READ_MODE_CV_V36 + 2: 042 return Bundle.getMessage(X_NET_MESSAGE_REQUEST_SERVICE_MODE_READ_DIRECT_V_36, (512 + m.getElement(2))); 043 case XNetConstants.PROG_READ_MODE_CV_V36 + 3: 044 return Bundle.getMessage(X_NET_MESSAGE_REQUEST_SERVICE_MODE_READ_DIRECT_V_36, (768 + m.getElement(2))); 045 default: 046 throw new IllegalArgumentException("Unknown Programming Read Message"); 047 } 048 } 049}