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}