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}