001package jmri.jmrix.roco.z21.messageformatters; 002 003import jmri.jmrix.Message; 004import jmri.jmrix.roco.z21.Z21MessageFormatter; 005import jmri.jmrix.roco.z21.Z21Reply; 006 007public class Z21CANBoosterStatusFormatter implements Z21MessageFormatter { 008 @Override 009 public boolean handlesMessage(Message m) { 010 return m instanceof Z21Reply && ((Z21Reply)m).getOpCode() == 0x00CA; 011 } 012 013 @Override 014 public String formatMessage(Message m) { 015 if(!handlesMessage(m)){ 016 throw new IllegalArgumentException("Message m is not a Z21 CAN Booster Status Reply"); 017 } 018 int networkID = ( m.getElement(4) & 0xFF) + ((m.getElement(5) & 0xFF) << 8); 019 int output = ( m.getElement(6) & 0xFF) + ((m.getElement(7) & 0xFF) << 8); 020 int stateFlags = ( m.getElement(8) & 0xFF) + ((m.getElement(9) & 0xFF) << 8); 021 int voltage = ( m.getElement(10) & 0xFF) + ((m.getElement(11) & 0xFF) << 8); 022 int amperage = ( m.getElement(12) & 0xFF) + ((m.getElement(13) & 0xFF) << 8); 023 String hexAddress= Integer.toHexString(networkID); 024 StringBuilder statusBuilder = new StringBuilder(); 025 if((stateFlags & 0x0001) != 0) { 026 statusBuilder.append("\t\t") 027 .append(Bundle.getMessage("Z21_CAN_BOOSTER_STATUS_FLAG_BRAKE_GENERATOR")) 028 .append(System.lineSeparator()); 029 } 030 if((stateFlags & 0x0020) != 0) { 031 statusBuilder.append("\t\t") 032 .append(Bundle.getMessage("Z21_CAN_BOOSTER_STATUS_FLAG_SHORT_CIRCUIT")) 033 .append(System.lineSeparator()); 034 } 035 if((stateFlags & 0x0080) != 0) { 036 statusBuilder.append("\t\t") 037 .append(Bundle.getMessage("Z21_CAN_BOOSTER_STATUS_FLAG_TRACK_OFF")) 038 .append(System.lineSeparator()); 039 } 040 if((stateFlags & 0x0800) != 0) { 041 statusBuilder.append("\t\t") 042 .append(Bundle.getMessage("Z21_CAN_BOOSTER_STATUS_FLAG_RAILCOM_ACTIVE")) 043 .append(System.lineSeparator()); 044 } 045 if((stateFlags & 0x0100) != 0) { 046 statusBuilder.append("\t\t") 047 .append(Bundle.getMessage("Z21_CAN_BOOSTER_STATUS_FLAG_OUTPUT_DISABLED")) 048 .append(System.lineSeparator()); 049 } 050 statusBuilder.delete(statusBuilder.length() - System.lineSeparator().length(), statusBuilder.length()); 051 return Bundle.getMessage("Z21CANBoosterStatusReply", hexAddress, output, statusBuilder.toString(), voltage, amperage); 052 } 053}