001package jmri.jmrix.roco.z21.messageformatters;
002
003import jmri.jmrix.Message;
004import jmri.jmrix.roco.z21.Z21MessageFormatter;
005import jmri.jmrix.roco.z21.Z21Reply;
006
007/**
008 * Formats Z21 CAN Description Reply messages for display in the monitor and log.
009 * @author Paul Bender Copyright (C) 2026
010 */
011public class Z21CANDescriptionReplyFormatter implements Z21MessageFormatter {
012    @Override
013    public boolean handlesMessage(Message m) {
014        return m instanceof Z21Reply && ((Z21Reply)m).getOpCode() == 0x00C8;
015    }
016
017    @Override
018    public String formatMessage(Message m) {
019        if(!handlesMessage(m)){
020            throw new IllegalArgumentException("Message m is not a Z21 CAN Description Reply");
021        }
022        int networkID = ( m.getElement(4) & 0xFF) + ((m.getElement(5) & 0xFF) << 8);
023        byte[] description = new byte[16];
024        for(int i = 0; i < 16; i++) {
025            description[i] = (byte) m.getElement(6 + i);
026        }
027        String hexAddress= Integer.toHexString(networkID);
028        String descString = new String(description).trim();
029        return Bundle.getMessage("Z21CANDescriptionReply", hexAddress, descString);
030    }
031}