Package jmri.jmrix.can
Class CanReply
- java.lang.Object
-
- jmri.jmrix.AbstractMessage
-
- jmri.jmrix.AbstractMRReply
-
- jmri.jmrix.can.CanReply
-
- All Implemented Interfaces:
CanFrame,CanMutableFrame,Message
public class CanReply extends AbstractMRReply implements CanMutableFrame
Base class for replies in a CANbus based message/reply protocol.It is expected that any CAN based system will be based upon basic CANbus concepts such as ID (standard or extended), Normal and RTR frames and a data field.
"header" refers to the full 11 or 29 bit header; which mode is separately set via the "extended" parameter
CBUS uses a 2-bit "Pri" field and 7-bit "ID" ("CAN ID") field, with separate accessors.
-
-
Field Summary
Fields Modifier and Type Field Description (package private) int_header(package private) boolean_isExtended(package private) boolean_isRtr-
Fields inherited from class jmri.jmrix.AbstractMRReply
DEFAULTMAXSIZE
-
Fields inherited from class jmri.jmrix.AbstractMessage
_dataChars, _nDataChars
-
-
Constructor Summary
Constructors Constructor Description CanReply()Create a new CanReplyCanReply(int i)Create a new CanReply of given data lengthCanReply(int[] d)Create a new CanReply from an int arrayCanReply(int[] d, int header)Create a new CanReply from an int array, with headerCanReply(CanMessage m)Create a new CanReply from an existing CanMessageCanReply(CanReply m)Create a new CanReply from an existing CanReply
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description booleanequals(java.lang.Object a)Note that a CanMessage and a CanReply can be tested for equalityint[]getData()Get the data byte array.intgetElement(int n)Get a particular element in a Message.intgetHeader()Get the CAN Frame header.intgetNumDataElements()Get the number of data elements in a Message.inthashCode()Hash on the headerbooleanisExtended()Get if the CAN Frame has an extended header.booleanisRtr()Get if the CAN Frame is an RTR Frame.voidsetElement(int n, int v)Set a single Data Element at a particular index.voidsetExtended(boolean b)Set if the CAN Frame header is extended.voidsetHeader(int h)Set the CAN Frame header.voidsetNumDataElements(int n)Set the number of data elements in the main CAN Frame body.voidsetRtr(boolean b)Set if the CAN Frame is an RTR Frame.protected intskipPrefix(int index)java.lang.StringtoMonitorString()this format matches @CanMessagejava.lang.StringtoString()this format matches @CanMessage-
Methods inherited from class jmri.jmrix.AbstractMRReply
flush, getOpCode, isBinary, isRetransmittableErrorMsg, isUnsolicited, match, maxSize, pollValue, setBinary, setOpCode, setUnsolicited, skipWhiteSpace, value
-
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface jmri.jmrix.can.CanFrame
appendHexElements, dataFramesEqual, extendedOrRtr, getToString, isEqual, monString
-
Methods inherited from interface jmri.jmrix.can.CanMutableFrame
setData, setData
-
-
-
-
Field Detail
-
_header
int _header
-
_isExtended
boolean _isExtended
-
_isRtr
boolean _isRtr
-
-
Constructor Detail
-
CanReply
public CanReply()
Create a new CanReply
-
CanReply
public CanReply(int i)
Create a new CanReply of given data length- Parameters:
i- number of data bytes, 0-8
-
CanReply
public CanReply(int[] d)
Create a new CanReply from an int array- Parameters:
d- array of CAN Frame data bytes, max 8
-
CanReply
public CanReply(int[] d, int header)
Create a new CanReply from an int array, with header- Parameters:
d- array of CAN Frame data bytes, max 8header- the Frame header value
-
CanReply
public CanReply(@Nonnull CanReply m)
Create a new CanReply from an existing CanReply- Parameters:
m- The existing CanReply
-
CanReply
public CanReply(@Nonnull CanMessage m)
Create a new CanReply from an existing CanMessage- Parameters:
m- The existing CanMessage
-
-
Method Detail
-
hashCode
public int hashCode()
Hash on the header- Overrides:
hashCodein classAbstractMessage- Returns:
- hashcode from sum of elements.
-
equals
public boolean equals(java.lang.Object a)
Note that a CanMessage and a CanReply can be tested for equality- Overrides:
equalsin classAbstractMessage
-
skipPrefix
protected int skipPrefix(int index)
- Specified by:
skipPrefixin classAbstractMRReply
-
getNumDataElements
public int getNumDataElements()
Get the number of data elements in a Message.- Specified by:
getNumDataElementsin interfaceCanFrame- Specified by:
getNumDataElementsin interfaceMessage- Overrides:
getNumDataElementsin classAbstractMessage- Returns:
- number elements.
-
setNumDataElements
public final void setNumDataElements(int n)
Set the number of data elements in the main CAN Frame body.- Specified by:
setNumDataElementsin interfaceCanMutableFrame- Parameters:
n- true number of data bytes, 0-8
-
getElement
public int getElement(int n)
Get a particular element in a Message.- Specified by:
getElementin interfaceCanFrame- Specified by:
getElementin interfaceMessage- Overrides:
getElementin classAbstractMessage- Parameters:
n- Element Index.- Returns:
- single element of message.
-
setElement
public void setElement(int n, int v)
Set a single Data Element at a particular index.- Specified by:
setElementin interfaceCanMutableFrame- Specified by:
setElementin interfaceMessage- Overrides:
setElementin classAbstractMRReply- Parameters:
n- index of element.v- value of element.
-
getData
public int[] getData()
Get the data byte array.- Returns:
- the actual byte array, not a Copy Of
-
getHeader
public int getHeader()
Get the CAN Frame header.
-
setHeader
public final void setHeader(int h)
Set the CAN Frame header.- Specified by:
setHeaderin interfaceCanMutableFrame- Parameters:
h- new header value
-
isExtended
public boolean isExtended()
Get if the CAN Frame has an extended header.- Specified by:
isExtendedin interfaceCanFrame- Returns:
- true if extended, else false
-
setExtended
public void setExtended(boolean b)
Set if the CAN Frame header is extended.- Specified by:
setExtendedin interfaceCanMutableFrame- Parameters:
b- true if extended, else false
-
isRtr
public boolean isRtr()
Get if the CAN Frame is an RTR Frame.
-
setRtr
public void setRtr(boolean b)
Set if the CAN Frame is an RTR Frame.- Specified by:
setRtrin interfaceCanMutableFrame- Parameters:
b- true if RTR, else false
-
toString
public java.lang.String toString()
this format matches @CanMessage- Specified by:
toStringin interfaceMessage- Overrides:
toStringin classAbstractMRReply
-
toMonitorString
public java.lang.String toMonitorString()
this format matches @CanMessage- Specified by:
toMonitorStringin interfaceMessage- Returns:
- a human-readable representation of the message.
-
-