Class CbusThrottle
- java.lang.Object
-
- jmri.beans.PropertyChangeSupport
-
- jmri.jmrix.AbstractThrottle
-
- jmri.jmrix.can.cbus.CbusThrottle
-
- All Implemented Interfaces:
PropertyChangeFirer
,PropertyChangeProvider
,DccThrottle
,Throttle
public class CbusThrottle extends AbstractThrottle
An implementation of DccThrottle via AbstractThrottle with code specific to a CBUS connection.Speed in the Throttle interfaces and AbstractThrottle is a float, but in CBUS is normally an int with values from 0 to 127.
CBUS 128 Speed Steps setSpeedSetting CBUS DSPD Translated Throttle 0 0 Speed 0 0 % -1 1 E Stop 0 % 0.007937 2 Speed 1 1/126 % 0.015873 3 Speed 2 2/126 % 0.984127 125 Speed 124 124/126 % 0.992063 126 Speed 125 125/126 % 1 127 Speed 126 100 % CBUS 28 Speed Steps CBUS DSPD Translated Throttle 0 Speed 0 Encoding 1 0 % 1 Speed 0 Encoding 2 0 % 2 E Stop Encoding 1 0 % 3 E Stop Encoding 2 0 % 4 Speed 1 1/28 % 5 Speed 2 2/28 % 29 Speed 26 26/28 % 30 Speed 27 27/28 % 31 Speed 28 100 % CBUS 14 Speed Steps CBUS DSPD Translated Throttle 0 Speed 0 0 % 1 E Stop 0 % 2 Speed 1 1/14 % 3 Speed 2 2/14 % 13 0x0D Speed 12 12/14 % 14 0x0E Speed 13 13/14 % 15 0x0F Speed 14 100 %
-
-
Field Summary
-
Fields inherited from class jmri.jmrix.AbstractThrottle
active, adapterMemo, FUNCTION_GROUPS, isForward, speedSetting, speedStepMode, start
-
Fields inherited from class jmri.beans.PropertyChangeSupport
propertyChangeSupport
-
Fields inherited from interface jmri.Throttle
F0, F0Momentary, F1, F10, F10Momentary, F11, F11Momentary, F12, F12Momentary, F13, F13Momentary, F14, F14Momentary, F15, F15Momentary, F16, F16Momentary, F17, F17Momentary, F18, F18Momentary, F19, F19Momentary, F1Momentary, F2, F20, F20Momentary, F21, F21Momentary, F22, F22Momentary, F23, F23Momentary, F24, F24Momentary, F25, F25Momentary, F26, F26Momentary, F27, F27Momentary, F28, F28Momentary, F2Momentary, F3, F3Momentary, F4, F4Momentary, F5, F5Momentary, F6, F6Momentary, F7, F7Momentary, F8, F8Momentary, F9, F9Momentary, ISFORWARD, SPEEDINCREMENT, SPEEDSETTING, SPEEDSTEPMODE, SPEEDSTEPS
-
-
Constructor Summary
Constructors Constructor Description CbusThrottle(CanSystemConnectionMemo memo, LocoAddress address, int handle)
Constructor
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected float
floatSpeed(int lSpeed)
Convert a CBUS speed integer to a float speed valueprotected int
getHandle()
Return the handle for this throttleLocoAddress
getLocoAddress()
Locomotive address.protected int
getNumRecoverAttempts()
Get the number of external steal recovery attemptsprotected void
increaseNumRecoverAttempts()
Increase a count of external steal recovery attemptsprotected boolean
isStolen()
Get Throttle Stolen Flagprotected void
releaseFromCommandStation()
Release session from a command station ie. throttle with clean full dispose called from releaseThrottleprotected void
resetNumRecoverAttempts()
Reset count of recovery attemptsprotected void
sendFunctionGroup(int group)
protected void
sendFunctionGroup1()
Send the CBUS message to set the state of functions F0, F1, F2, F3, F4.protected void
sendFunctionGroup2()
Send the CBUS message to set the state of functions F5, F6, F7, F8.protected void
sendFunctionGroup3()
Send the CBUS message to set the state of functions F9, F10, F11, F12.protected void
sendFunctionGroup4()
Send the CBUS message to set the state of functions F13, F14, F15, F16, F17, F18, F19, F20protected void
sendFunctionGroup5()
Send the CBUS message to set the state of functions F21, F22, F23, F24, F25, F26, F27, F28protected void
sendFunctionGroup6()
Send the CBUS message to set the state of functions F29 - F36protected void
setDispatchActive(boolean newval)
Adds extra check for num of this JMRI throttle users before notifying and makes sure these always get sent as a pair the abstracts only send to ThrottleListeners if value has been changedprotected void
setHandle(int newHandle)
Set the handle for this throttlevoid
setIsForward(boolean forward)
Set the direction and reset speed.void
setSpeedSetting(float speed, boolean allowDuplicates, boolean allowDuplicatesOnStop)
Set the speed.void
setSpeedStepMode(SpeedStepMode stepMode)
setSpeedStepMode - set the speed step value.protected void
setStolen(boolean isStolen)
Set Throttle Stolen Flagprotected void
startRefresh()
void
throttleDispose()
Dispose when finished with this object.protected void
throttleInit(int speed, int f0f4, int f5f8, int f9f12)
Set initial throttle values as taken from PLOC reply from hardwarejava.lang.String
toString()
protected void
updateFunctionGroup(int group, int fns)
protected void
updateIsForward(boolean forward)
Update the throttles direction without sending to hardware.Used to support CBUS sharing by taking direction received from the hardware in an OPC_DSPD message.protected void
updateSpeedSetting(int speed)
Update the throttles speed setting without sending to hardware.-
Methods inherited from class jmri.jmrix.AbstractThrottle
addPropertyChangeListener, dispatch, dispose, finishRecord, getFunction, getFunctionMomentary, getFunctionMomentaryNoWarn, getFunctionNoWarn, getFunctions, getFunctionsMomentary, getIsForward, getRosterEntry, getSpeedIncrement, getSpeedSetting, getSpeedStepMode, intSpeed, intSpeed, notifyThrottleDisconnect, notifyThrottleDispatchEnabled, notifyThrottleReleaseEnabled, record, release, removePropertyChangeListener, sendFunctionGroup, sendFunctionGroup10, sendFunctionGroup7, sendFunctionGroup8, sendFunctionGroup9, sendMomentaryFunctionGroup1, sendMomentaryFunctionGroup10, sendMomentaryFunctionGroup2, sendMomentaryFunctionGroup3, sendMomentaryFunctionGroup4, sendMomentaryFunctionGroup5, sendMomentaryFunctionGroup6, sendMomentaryFunctionGroup7, sendMomentaryFunctionGroup8, sendMomentaryFunctionGroup9, setFunction, setFunctionMomentary, setRosterEntry, setSpeedSetting, setSpeedSettingAgain, startClock, updateFunction, updateFunctionMomentary
-
Methods inherited from class jmri.beans.PropertyChangeSupport
addPropertyChangeListener, fireIndexedPropertyChange, fireIndexedPropertyChange, fireIndexedPropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, getPropertyChangeListeners, getPropertyChangeListeners, removePropertyChangeListener
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface jmri.beans.PropertyChangeProvider
addPropertyChangeListener, getPropertyChangeListeners, getPropertyChangeListeners, removePropertyChangeListener
-
Methods inherited from interface jmri.Throttle
getF0, getF0Momentary, getF1, getF10, getF10Momentary, getF11, getF11Momentary, getF12, getF12Momentary, getF13, getF13Momentary, getF14, getF14Momentary, getF15, getF15Momentary, getF16, getF16Momentary, getF17, getF17Momentary, getF18, getF18Momentary, getF19, getF19Momentary, getF1Momentary, getF2, getF20, getF20Momentary, getF21, getF21Momentary, getF22, getF22Momentary, getF23, getF23Momentary, getF24, getF24Momentary, getF25, getF25Momentary, getF26, getF26Momentary, getF27, getF27Momentary, getF28, getF28Momentary, getF2Momentary, getF3, getF3Momentary, getF4, getF4Momentary, getF5, getF5Momentary, getF6, getF6Momentary, getF7, getF7Momentary, getF8, getF8Momentary, getF9, getF9Momentary, setF0, setF0Momentary, setF1, setF10, setF10Momentary, setF11, setF11Momentary, setF12, setF12Momentary, setF13, setF13Momentary, setF14, setF14Momentary, setF15, setF15Momentary, setF16, setF16Momentary, setF17, setF17Momentary, setF18, setF18Momentary, setF19, setF19Momentary, setF1Momentary, setF2, setF20, setF20Momentary, setF21, setF21Momentary, setF22, setF22Momentary, setF23, setF23Momentary, setF24, setF24Momentary, setF25, setF25Momentary, setF26, setF26Momentary, setF27, setF27Momentary, setF28, setF28Momentary, setF2Momentary, setF3, setF3Momentary, setF4, setF4Momentary, setF5, setF5Momentary, setF6, setF6Momentary, setF7, setF7Momentary, setF8, setF8Momentary, setF9, setF9Momentary
-
-
-
-
Constructor Detail
-
CbusThrottle
public CbusThrottle(CanSystemConnectionMemo memo, LocoAddress address, int handle)
Constructor- Parameters:
memo
- System Connectionaddress
- The address this throttle relates to.handle
- the Session ID for the Throttle
-
-
Method Detail
-
throttleInit
protected void throttleInit(int speed, int f0f4, int f5f8, int f9f12)
Set initial throttle values as taken from PLOC reply from hardware- Parameters:
speed
- including direction flagf0f4
- Functions 0-4f5f8
- Functions 5-8f9f12
- Functions 9-12
-
setSpeedStepMode
public void setSpeedStepMode(SpeedStepMode stepMode)
setSpeedStepMode - set the speed step value.Overridden to capture mode changes to be forwarded to the hardware. New throttles default to 128 step mode. CBUS Command stations also default to 128SS so this does not need to be sent if unchanged.
- Specified by:
setSpeedStepMode
in interfaceDccThrottle
- Overrides:
setSpeedStepMode
in classAbstractThrottle
- Parameters:
stepMode
- the current speed step mode - default should be 128 speed step mode in most cases
-
floatSpeed
protected float floatSpeed(int lSpeed)
Convert a CBUS speed integer to a float speed value- Parameters:
lSpeed
- -1 to 127- Returns:
- float value -1 to 1
-
sendFunctionGroup1
protected void sendFunctionGroup1()
Send the CBUS message to set the state of functions F0, F1, F2, F3, F4.- Overrides:
sendFunctionGroup1
in classAbstractThrottle
-
sendFunctionGroup2
protected void sendFunctionGroup2()
Send the CBUS message to set the state of functions F5, F6, F7, F8.- Overrides:
sendFunctionGroup2
in classAbstractThrottle
-
sendFunctionGroup3
protected void sendFunctionGroup3()
Send the CBUS message to set the state of functions F9, F10, F11, F12.- Overrides:
sendFunctionGroup3
in classAbstractThrottle
-
sendFunctionGroup4
protected void sendFunctionGroup4()
Send the CBUS message to set the state of functions F13, F14, F15, F16, F17, F18, F19, F20- Overrides:
sendFunctionGroup4
in classAbstractThrottle
-
sendFunctionGroup5
protected void sendFunctionGroup5()
Send the CBUS message to set the state of functions F21, F22, F23, F24, F25, F26, F27, F28- Overrides:
sendFunctionGroup5
in classAbstractThrottle
-
sendFunctionGroup6
protected void sendFunctionGroup6()
Send the CBUS message to set the state of functions F29 - F36- Overrides:
sendFunctionGroup6
in classAbstractThrottle
-
sendFunctionGroup
protected void sendFunctionGroup(int group)
-
updateFunctionGroup
protected void updateFunctionGroup(int group, int fns)
-
setSpeedSetting
public void setSpeedSetting(float speed, boolean allowDuplicates, boolean allowDuplicatesOnStop)
Set the speed.This intentionally skips the emergency stop value of 1.
- Specified by:
setSpeedSetting
in interfaceThrottle
- Overrides:
setSpeedSetting
in classAbstractThrottle
- Parameters:
speed
- Number from 0 to 1; less than zero is emergency stopallowDuplicates
- don't suppress messagesallowDuplicatesOnStop
- don't suppress messages if the new speed is 'stop'
-
updateSpeedSetting
protected void updateSpeedSetting(int speed)
Update the throttles speed setting without sending to hardware. Used to support CBUS sharing by taking speed received from the hardware in an OPC_DSPD message.No compensation required for a direction flag
- Parameters:
speed
- integer speed value
-
setIsForward
public void setIsForward(boolean forward)
Set the direction and reset speed. Forwards to the layout Implementing functions should override this function, but should either make a call to super.setIsForward() to notify the listeners, or should notify the listeners themselves.- Specified by:
setIsForward
in interfaceThrottle
- Overrides:
setIsForward
in classAbstractThrottle
- Parameters:
forward
- true if forward; false otherwise
-
updateIsForward
protected void updateIsForward(boolean forward)
Update the throttles direction without sending to hardware.Used to support CBUS sharing by taking direction received from the hardware in an OPC_DSPD message.- Parameters:
forward
- True if Forward, else False
-
toString
public java.lang.String toString()
- Overrides:
toString
in classjava.lang.Object
-
getHandle
protected int getHandle()
Return the handle for this throttle- Returns:
- integer session handle
-
setHandle
protected void setHandle(int newHandle)
Set the handle for this throttleThis is normally done on Throttle Construction but certain operations, eg. recovering from an external steal may need to change this.
- Parameters:
newHandle
- session handle
-
setStolen
protected void setStolen(boolean isStolen)
Set Throttle Stolen FlagThis is false on Throttle Construction but certain operations may need to change this, eg. an external steal.
Sends IsAvailable Property Change Notification
- Parameters:
isStolen
- true if Throttle has been stolen, else false
-
isStolen
protected boolean isStolen()
Get Throttle Stolen FlagThis is false on Throttle Construction but certain operations may need to change this, eg. an external steal.
- Returns:
- true if Throttle has been stolen, else false
-
getNumRecoverAttempts
protected int getNumRecoverAttempts()
Get the number of external steal recovery attempts- Returns:
- Number of attempts since last reset
-
increaseNumRecoverAttempts
protected void increaseNumRecoverAttempts()
Increase a count of external steal recovery attempts
-
resetNumRecoverAttempts
protected void resetNumRecoverAttempts()
Reset count of recovery attempts
-
releaseFromCommandStation
protected void releaseFromCommandStation()
Release session from a command station ie. throttle with clean full dispose called from releaseThrottle
-
throttleDispose
public void throttleDispose()
Dispose when finished with this object. After this, further usage of this Throttle object will result in a JmriException.- Specified by:
throttleDispose
in classAbstractThrottle
-
startRefresh
protected final void startRefresh()
-
getLocoAddress
public LocoAddress getLocoAddress()
Locomotive address. The exact format is defined by the specific implementation, as subclasses of LocoAddress will contain different information.This is an unbound property.
- Returns:
- The locomotive address
-
setDispatchActive
protected void setDispatchActive(boolean newval)
Adds extra check for num of this JMRI throttle users before notifying and makes sure these always get sent as a pair the abstracts only send to ThrottleListeners if value has been changed- Parameters:
newval
- set true if dispatch can be enabled, else false
-
-