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}