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 * Formatter for Z21 System State Reply. 010 * 011 * @author Paul Bender Copyright (C) 2025 012 */ 013public class Z21SystemStateReplyFormatter implements Z21MessageFormatter { 014 015 @Override 016 public boolean handlesMessage(Message m) { 017 return m instanceof Z21Reply && ((Z21Reply) m).getOpCode() == 0x0084; 018 } 019 020 @SuppressFBWarnings(value = "BC_UNCONFIRMED_CAST", justification = "cast is checked in handlesMessage") 021 @Override 022 public String formatMessage(Message m) { 023 if (!handlesMessage(m)) { 024 throw new IllegalArgumentException("Message is not supported"); 025 } 026 Z21Reply r = (Z21Reply) m; 027 int mainCurrent = r.getSystemDataMainCurrent(); 028 int progCurrent = r.getSystemDataProgCurrent(); 029 int filteredMainCurrent = r.getSystemDataFilteredMainCurrent(); 030 int temperature = r.getSystemDataTemperature(); 031 int supplyVolts = r.getSystemDataSupplyVoltage(); 032 int internalVolts = r.getSystemDataVCCVoltage(); 033 int state = r.getElement(16); 034 int extendedState = r.getElement(17); 035 // data bytes 14 and 15 (offset 18 and 19) are reserved. 036 return Bundle.getMessage("Z21SystemStateReply",mainCurrent, 037 progCurrent,filteredMainCurrent,temperature, 038 supplyVolts,internalVolts,state,extendedState); 039 } 040 041}