001package jmri.jmrix.lenz.messageformatters; 002 003import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; 004import jmri.jmrix.Message; 005import jmri.jmrix.lenz.XNetConstants; 006import jmri.jmrix.lenz.XNetReply; 007import jmri.jmrix.lenz.XPressNetMessageFormatter; 008 009/** 010 * Format XPressNet V3 messages for CS Software Version Reply for display. 011 * 012 * @author Paul Bender Copyright (C) 2024 013 */ 014 015public class XNetCSSoftwareVersionReplyFormatter implements XPressNetMessageFormatter { 016 @Override 017 public boolean handlesMessage(Message m) { 018 return m instanceof XNetReply && 019 ((XNetReply) m).getElement(0)== XNetConstants.CS_SERVICE_MODE_RESPONSE && 020 ((XNetReply) m).getElement(1)== XNetConstants.CS_SOFTWARE_VERSION; 021 } 022 023 @SuppressFBWarnings(value = "BC_UNCONFIRMED_CAST", justification = "cast is checked in handlesMessage") 024 @Override 025 public String formatMessage(Message m) { 026 if(!handlesMessage(m)) { 027 throw new IllegalArgumentException("Message is not a V3 CS Software Version Reply"); 028 } 029 XNetReply r = (XNetReply) m; 030 String typeString; 031 switch (r.getElement(3)) { 032 case 0x00: 033 typeString = Bundle.getMessage("CSTypeLZ100"); 034 break; 035 case 0x01: 036 typeString = Bundle.getMessage("CSTypeLH200"); 037 break; 038 case 0x02: 039 typeString = Bundle.getMessage("CSTypeCompact"); 040 break; 041 // GT 2007/11/6 - Added multiMaus 042 case 0x10: 043 typeString = Bundle.getMessage("CSTypeMultiMaus"); 044 break; 045 default: 046 typeString = "" + r.getElement(3); 047 } 048 return Bundle.getMessage("XNetReplyCSVersion", (r.getElementBCD(2).floatValue()) / 10, typeString); 049 } 050}