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