001package jmri.jmrix.roco.z21.messageformatters; 002 003import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; 004import jmri.jmrix.Message; 005import jmri.jmrix.roco.z21.Z21MessageFormatter; 006import jmri.jmrix.roco.z21.Z21Reply; 007 008 009/** 010 * Formats the Z21 Hardware Info Reply message. 011 * 012 * @author Paul Bender Copyright (C) 2025 013 */ 014public class Z21HardwareInfoReplyFormatter implements Z21MessageFormatter { 015 016 @Override 017 public boolean handlesMessage(Message m) { 018 return m instanceof Z21Reply && ((Z21Reply)m).getOpCode() == 0x001A; 019 } 020 021 @SuppressFBWarnings(value = "BC_UNCONFIRMED_CAST", justification = "cast is checked in handlesMessage") 022 @Override 023 public String formatMessage(Message m) { 024 if(!handlesMessage(m)) { 025 throw new IllegalArgumentException("Z21HardwareInfoReplyFormatter cannot format message that it does not handle"); 026 } 027 Z21Reply r = (Z21Reply) m; 028 int hwversion = r.getElement(4) + (r.getElement(5) << 8) + 029 (r.getElement(6) << 16 ) + (r.getElement(7) << 24 ); 030 float swversion = (r.getElementBCD(8)/100.0f)+ 031 (r.getElementBCD(9))+ 032 (r.getElementBCD(10)*100)+ 033 (r.getElementBCD(11))*10000; 034 return Bundle.getMessage("Z21ReplyStringVersion",java.lang.Integer.toHexString(hwversion), swversion); 035 } 036 037}