com.dalsemi.comm
Class CanBus

java.lang.Object
  |
  +--com.dalsemi.comm.CanBus

public class CanBus
extends java.lang.Object

Class allowing access to 87C390 CANBus Controllers. Each controller can access 15 message centers numbered 1 - 15. Each message center can be programmed either transmit or receive, except message center 15. Message center 15 is unique in the fact it can only receive, and can also buffer two back to back frames.


Field Summary
static byte CANBUS0
           
static byte CANBUS1
           
 
Constructor Summary
CanBus(byte portnum)
          Create a new CanBus instance.
 
Method Summary
 void autoAnswerRemoteFrameRequest(int messageCenter, int ID, byte[] data)
          Set up a message center to auto reply to remote frame requests.
 boolean autoBaud()
          Attempt to autobaud to traffic on the CAN Bus.
 void close()
          Close this CANBus Controller This releases all resources for this CAN controller
 void disableController()
          Shut down this CAN controller.
 void disableMessageCenter(int messageCenter)
          Shut down this message center for changes.
 void enableController()
          Startup this CAN controller.
 void enableMessageCenter(int messageCenter)
          Startup this message center.
 int getRXErrorCount()
          Get the receiver error count.
 int getTXErrorCount()
          Get the transmitter error count.
 void open()
          Open this CANBus Controller This is done automatically during the constructor.
 void receive(CanFrame frame)
          Receive a CAN data frame.
 boolean receivePoll(CanFrame frame)
          Receive a CAN data frame.
 void resetController()
          Reset this CAN controller.
 void sendDataFrame(int ID, boolean extendedID, byte[] data)
          Send a CAN Data Frame from first available message center.
 void sendFrame(CanFrame frame)
          Send a CAN frame from first available message center.
 void sendRemoteFrameRequest(int ID, boolean extendedID, byte[] data)
          Send a CAN Remote Frame Request from first available message center.
 void set11BitGlobalIDMask(int mask)
          Set the 11 Bit (STANDARD) Global ID Mask.
 void set11BitMessageCenterArbitrationID(int messageCenter, int ID)
          Set an 11 Bit Arbitration ID for a message center.
 void set29BitGlobalIDMask(int mask)
          Set the 29 Bit (EXTENDED) Global ID Mask.
 void set29BitMessageCenter15IDMask(int mask)
          Set the 29 Bit Message Center 15 ID Mask.
 void set29BitMessageCenterArbitrationID(int messageCenter, int ID)
          Set an 11 Bit Arbitration ID for a message center.
 void setBaudRateDivisor(int divisor)
          Set baud rate divisor from the CPU crystal.
 void setMessageCenterMessageIDMaskEnable(int messageCenter, boolean maskEnable)
          Enable or disable Message ID Masking for a specific message center Note: If masking is disabled, this message center ID must match ALL bits of incoming ID.
 void setMessageCenterRXMode(int messageCenter)
          Set a specific message center as receiver or transmitter Note: Message Center 15 is always RECEIVE only.
 void setMessageCenterTXMode(int messageCenter)
          Set a specific message center as receiver or transmitter Note: Message Center 15 is always RECEIVE only.
 void setMessageCenterWriteOverEnable(int messageCenter, boolean writeover)
          Set the state of write over in a specific message center.
 void setSampleRate(int value)
          Set SMP (Sample Rate) This method sets whether to use one or three samples per bit time during CAN communication.
 void setSiestaMode()
          Put the CAN Controller in SIESTA mode When Bus activity is detected, the controller will wake up and participate on the bus.
 void setSynchronizationJumpWidth(int value)
          Set SJW (Synchronization Jump Width) This method sets the SJW necessary for adjusting TSEG1 and TSEG2 to compensate for sync problems during CAN communication.
 void setTSEG1(int value)
          Set TSEG1 (Timing Segment 1 = PROP_SEG + PHASE_SEG1) This method sets TSEG1 to a specified number of time quanta.
 void setTSEG2(int value)
          Set TSEG2 (Timing Segment 2 = PHASE_SEG2) This method sets TSEG2 to a specified number of time quanta.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

CANBUS0

public static final byte CANBUS0

CANBUS1

public static final byte CANBUS1
Constructor Detail

CanBus

public CanBus(byte portnum)
       throws CanBusException
Create a new CanBus instance. This opens and resets the specified CAN Controller and readies it for operation. The controller will be in a disabled state. Calling enableController() will place the controller on the bus. All message centers start up disabled.
Parameters:
portnum - Either CANBUS0 or CANBUS1
Method Detail

open

public void open()
          throws CanBusException
Open this CANBus Controller This is done automatically during the constructor.

close

public void close()
           throws CanBusException
Close this CANBus Controller This releases all resources for this CAN controller

setBaudRateDivisor

public void setBaudRateDivisor(int divisor)
                        throws CanBusException
Set baud rate divisor from the CPU crystal. This method sets the basic time quantum (tqu) necessary for CAN communication. The divisor divides straight off the external crystal on the processor. Zero is not valid, so all values have an implied +1 added to them. For instance, at 18.432MHz, a divisor of 6 will give you a tqu of 379.774ns. tqu = (6 + 1) * 1/18.432MHz
Parameters:
divisor - 8 bit clock divisor
Throws:
CanBusException -  

setSynchronizationJumpWidth

public void setSynchronizationJumpWidth(int value)
Set SJW (Synchronization Jump Width) This method sets the SJW necessary for adjusting TSEG1 and TSEG2 to compensate for sync problems during CAN communication. TSEG1 may be lengthened during resync TSEG2 may be shortened during resync
Parameters:
value - 1 to 4 (1tqu to 4tqu)

setSampleRate

public void setSampleRate(int value)
Set SMP (Sample Rate) This method sets whether to use one or three samples per bit time during CAN communication.
Parameters:
value - 1 or 3

setTSEG1

public void setTSEG1(int value)
Set TSEG1 (Timing Segment 1 = PROP_SEG + PHASE_SEG1) This method sets TSEG1 to a specified number of time quanta. This is the timing segment before the bit sample.
Parameters:
value - 2tqu to 16tqu

setTSEG2

public void setTSEG2(int value)
Set TSEG2 (Timing Segment 2 = PHASE_SEG2) This method sets TSEG2 to a specified number of time quanta. This is the timing segment after the bit sample.
Parameters:
value - 2tqu to 8tqu

resetController

public void resetController()
Reset this CAN controller. No more transmissions, or receptions will be processed. The CAN controller is disconnected from the bus. All message centers reset to power on defaults. ALL SETTINGS LOST!

disableController

public void disableController()
Shut down this CAN controller. No more transmissions, or receptions will be processed. The CAN controller is disconnected from the bus. User is free to change timing and other communication critical parameters. Message centers remain intact.

enableController

public void enableController()
Startup this CAN controller. All critical timing parameters must already be set. Message centers remain intact.

enableMessageCenter

public void enableMessageCenter(int messageCenter)
Startup this message center. All mode changes must be complete. Message center becomes operational and able to send or receive messages depending on mode.
Parameters:
messageCenter - to enable

disableMessageCenter

public void disableMessageCenter(int messageCenter)
Shut down this message center for changes. No more transmissions, or receptions will be processed at this message center.
Parameters:
messageCenter - to enable

receive

public void receive(CanFrame frame)
             throws CanBusException
Receive a CAN data frame. This method blocks until a frame is received.
Parameters:
frame - A frame in which to place the incoming data.

receivePoll

public boolean receivePoll(CanFrame frame)
                    throws CanBusException
Receive a CAN data frame. This method returns immediately and does not block.
Parameters:
frame - A frame in which to place the incoming data.
Returns:
True if frame has been received.

sendFrame

public void sendFrame(CanFrame frame)
               throws CanBusException
Send a CAN frame from first available message center.
Parameters:
frame - A CAN frame

sendDataFrame

public void sendDataFrame(int ID,
                          boolean extendedID,
                          byte[] data)
                   throws CanBusException
Send a CAN Data Frame from first available message center.
Parameters:
ID - for frame
data - to send in frame

sendRemoteFrameRequest

public void sendRemoteFrameRequest(int ID,
                                   boolean extendedID,
                                   byte[] data)
                            throws CanBusException
Send a CAN Remote Frame Request from first available message center.
Parameters:
ID - for frame
data - to send in frame

autoAnswerRemoteFrameRequest

public void autoAnswerRemoteFrameRequest(int messageCenter,
                                         int ID,
                                         byte[] data)
Set up a message center to auto reply to remote frame requests. Note: This resets the state of a message center for this purpose only. If disabled, message center becomes enabled.
Parameters:
messageCenter - Which message center to use for this reply.
ID - for frame
data - to send in frame

set11BitGlobalIDMask

public void set11BitGlobalIDMask(int mask)
Set the 11 Bit (STANDARD) Global ID Mask. The Global ID Mask is used to denote which bits to match in the ID.
Parameters:
mask - 11 bit mask

set29BitGlobalIDMask

public void set29BitGlobalIDMask(int mask)
Set the 29 Bit (EXTENDED) Global ID Mask. The Global ID Mask is used to denote which bits to match in the ID.
Parameters:
mask - 29 bit mask

set29BitMessageCenter15IDMask

public void set29BitMessageCenter15IDMask(int mask)
Set the 29 Bit Message Center 15 ID Mask. Message Center 15 has it's own ID Mask. The Message Center 15 ID Mask is used to denote which bits to match in the Message Center 15 ID.
Parameters:
mask - 29 bit mask

set11BitMessageCenterArbitrationID

public void set11BitMessageCenterArbitrationID(int messageCenter,
                                               int ID)
Set an 11 Bit Arbitration ID for a message center. When this value matches an incoming frame ID subject to the Global ID Mask or Message Center 15 Mask, the incoming frame will be received. Note: This will change the specified message center to only respond to 11 bit messages.
Parameters:
messageCenter - which message center to change
ID - 11 bit ID

set29BitMessageCenterArbitrationID

public void set29BitMessageCenterArbitrationID(int messageCenter,
                                               int ID)
Set an 11 Bit Arbitration ID for a message center. When this value matches an incoming frame ID subject to the Global ID Mask or Message Center 15 Mask, the incoming frame will be received. Note: This will change the specified message center to only respond to 29 bit messages.
Parameters:
messageCenter - which message center to change
ID - 29 bit ID

setMessageCenterWriteOverEnable

public void setMessageCenterWriteOverEnable(int messageCenter,
                                            boolean writeover)
Set the state of write over in a specific message center. This allows incoming frames to overwrite received frames that haven't been moved out of the message center.
Parameters:
messageCenter - which message center to change
writeover - set to true to allow overwrite.

setMessageCenterTXMode

public void setMessageCenterTXMode(int messageCenter)
Set a specific message center as receiver or transmitter Note: Message Center 15 is always RECEIVE only.
Parameters:
messageCenter - which message center to change
mode - TRANSMIT or RECEIVE

setMessageCenterRXMode

public void setMessageCenterRXMode(int messageCenter)
Set a specific message center as receiver or transmitter Note: Message Center 15 is always RECEIVE only.
Parameters:
messageCenter - which message center to change
mode - TRANSMIT or RECEIVE

setMessageCenterMessageIDMaskEnable

public void setMessageCenterMessageIDMaskEnable(int messageCenter,
                                                boolean maskEnable)
Enable or disable Message ID Masking for a specific message center Note: If masking is disabled, this message center ID must match ALL bits of incoming ID.
Parameters:
messageCenter - which message center to change
maskEnable - true to allow Global Mask, false to require exact match of ID

autoBaud

public boolean autoBaud()
                 throws CanBusException
Attempt to autobaud to traffic on the CAN Bus.
Returns:
true if auto baud successfull.
Throws:
CanBusException -  

getTXErrorCount

public int getTXErrorCount()
Get the transmitter error count.
Returns:
Transmitter error count.

getRXErrorCount

public int getRXErrorCount()
Get the receiver error count.
Returns:
Receiver error count.

setSiestaMode

public void setSiestaMode()
Put the CAN Controller in SIESTA mode When Bus activity is detected, the controller will wake up and participate on the bus.