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 * MessageFormatter for Z21 CAN Booster Set Track Power messages. 009 * <p> 010 * These messages are sent to the Z21 to set the track power output state of a CAN booster. 011 * 012 * @author Paul Bender Copyright (C) 2026 013 */ 014public class Z21CANBoosterSetTrackPowerFormatter implements Z21MessageFormatter { 015 @Override 016 public boolean handlesMessage(Message m) { 017 return m instanceof Z21Message && ((Z21Message)m).getOpCode() == 0x00CB; 018 } 019 020 @Override 021 public String formatMessage(Message m) { 022 if(!handlesMessage(m)){ 023 throw new IllegalArgumentException("Message m is not a Z21 CAN Booster Set Track Power Request"); 024 } 025 int networkID = ( m.getElement(4) & 0xFF) + ((m.getElement(5) & 0xFF) << 8); 026 int outputState = m.getElement(6) & 0xFF; 027 return Bundle.getMessage("Z21CANBoosterSetTrackPowerRequest", Integer.toHexString(networkID), 028 getOutputStateString(outputState)); 029 } 030 031 private String getOutputStateString(int outputState){ 032 switch(outputState){ 033 case 0x00: return Bundle.getMessage("Z21_CAN_BOOSTER_STATUS_STATE_ALL_OFF"); 034 case 0xFF: return Bundle.getMessage("Z21_CAN_BOOSTER_STATUS_STATE_ALL_ON"); 035 case 0x10: return Bundle.getMessage("Z21_CAN_BOOSTER_STATUS_STATE_FIRST_OFF"); 036 case 0x11: return Bundle.getMessage("Z21_CAN_BOOSTER_STATUS_STATE_FIRST_ON"); 037 case 0x20: return Bundle.getMessage("Z21_CAN_BOOSTER_STATUS_STATE_SECOND_OFF"); 038 case 0x22: return Bundle.getMessage("Z21_CAN_BOOSTER_STATUS_STATE_SECOND_ON"); 039 default: return "Unknown (" + outputState + ")"; 040 } 041 } 042 043 044}