001package jmri.jmrix.roco.z21.messageformatters;
002
003import jmri.jmrix.Message;
004import jmri.jmrix.roco.z21.Z21Message;
005import jmri.jmrix.roco.z21.Z21MessageFormatter;
006
007/**
008 * Formatter for Z21 CAN Set Description Requests
009 * @author Paul Bender Copyright (C) 2026
010 */
011public class Z21CANSetDescriptionRequestFormatter implements Z21MessageFormatter {
012    @Override
013    public boolean handlesMessage(Message m) {
014        return m instanceof Z21Message && ((Z21Message)m).getOpCode() == 0x00C9;
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 Request");
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("Z21CANSetDescriptionRequest", hexAddress, descString);
030    }
031}