001package jmri.jmrix.lenz.messageformatters; 002 003import jmri.jmrix.Message; 004import jmri.jmrix.lenz.LenzCommandStation; 005import jmri.jmrix.lenz.XNetConstants; 006import jmri.jmrix.lenz.XNetMessage; 007import jmri.jmrix.lenz.XPressNetMessageFormatter; 008 009/** 010 * Format Ops Mode Request messages for display 011 * 012 * @author Paul Bender Copyright (C) 2024 013 */ 014public class XNetOpsModeRequestMessageFormatter implements XPressNetMessageFormatter{ 015 @Override 016 public boolean handlesMessage(Message m) { 017 return m instanceof XNetMessage && 018 m.getElement(0) == XNetConstants.OPS_MODE_PROG_REQ; 019 } 020 021 @Override 022 public String formatMessage(Message m) { 023 if(m.getElement(1)== XNetConstants.OPS_MODE_PROG_WRITE_REQ){ 024 if ((m.getElement(4) & 0xEC) == 0xEC || (m.getElement(4) & 0xE4) == 0xE4) { 025 return getWriteString(m); 026 } else if ((m.getElement(4) & 0xE8) == 0xE8) { 027 return getVerifyString(m); 028 } 029 } 030 throw new IllegalArgumentException("Unknown Ops Mode Request Type"); 031 } 032 033 private static String getVerifyString(Message m) { 034 String message; 035 if ((m.getElement(6) & 0x10) == 0x10) { 036 message = "XNetMessageOpsModeBitVerify"; 037 } else { 038 message = "XNetMessageOpsModeBitWrite"; 039 } 040 return Bundle.getMessage(message, ((m.getElement(6) & 0x08) >> 3), (1 + m.getElement(5) + ((m.getElement(4) & 0x03) << 8)), (m.getElement(6) & 0x07), LenzCommandStation.calcLocoAddress(m.getElement(2), m.getElement(3))); 041 } 042 043 private static String getWriteString(Message m) { 044 String message = ""; 045 if ((m.getElement(4) & 0xEC) == 0xEC) { 046 message = "XNetMessageOpsModeByteWrite"; 047 } else if ((m.getElement(4) & 0xE4) == 0xE4) { 048 message = "XNetMessageOpsModeByteVerify"; 049 } 050 return Bundle.getMessage(message, m.getElement(6), (1 + m.getElement(5) + ((m.getElement(4) & 0x03) << 8)), LenzCommandStation.calcLocoAddress(m.getElement(2), m.getElement(3))); 051 } 052 053}