Package edu.wpi.first.wpilibj
Class InterruptableSensorBase
- java.lang.Object
-
- edu.wpi.first.wpilibj.SendableBase
-
- edu.wpi.first.wpilibj.InterruptableSensorBase
-
- All Implemented Interfaces:
Sendable
,AutoCloseable
- Direct Known Subclasses:
DigitalSource
public abstract class InterruptableSensorBase extends SendableBase
Base for sensors to be used with interrupts.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
InterruptableSensorBase.WaitResult
-
Field Summary
Fields Modifier and Type Field Description protected int
m_interrupt
The interrupt resource.protected boolean
m_isSynchronousInterrupt
Flags if the interrupt being allocated is synchronous.
-
Constructor Summary
Constructors Constructor Description InterruptableSensorBase()
Create a new InterrupatableSensorBase.
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description protected void
allocateInterrupts(boolean watcher)
Allocate the interrupt.void
cancelInterrupts()
Cancel interrupts on this device.void
close()
void
disableInterrupts()
Disable Interrupts without without deallocating structures.void
enableInterrupts()
Enable interrupts to occur on this input.abstract int
getAnalogTriggerTypeForRouting()
If this is an analog trigger.abstract int
getPortHandleForRouting()
The channel routing number.double
readFallingTimestamp()
Return the timestamp for the falling interrupt that occurred most recently.double
readRisingTimestamp()
Return the timestamp for the rising interrupt that occurred most recently.void
requestInterrupts()
Request one of the 8 interrupts synchronously on this digital input.void
requestInterrupts(InterruptHandlerFunction<?> handler)
Request one of the 8 interrupts asynchronously on this digital input.void
setUpSourceEdge(boolean risingEdge, boolean fallingEdge)
Set which edge to trigger interrupts on.InterruptableSensorBase.WaitResult
waitForInterrupt(double timeout)
In synchronous mode, wait for the defined interrupt to occur.InterruptableSensorBase.WaitResult
waitForInterrupt(double timeout, boolean ignorePrevious)
In synchronous mode, wait for the defined interrupt to occur.-
Methods inherited from class edu.wpi.first.wpilibj.SendableBase
addChild, free, getName, getSubsystem, setName, setName, setName, setSubsystem
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface edu.wpi.first.wpilibj.Sendable
initSendable, setName
-
-
-
-
Method Detail
-
close
public void close()
- Specified by:
close
in interfaceAutoCloseable
- Overrides:
close
in classSendableBase
-
getAnalogTriggerTypeForRouting
public abstract int getAnalogTriggerTypeForRouting()
If this is an analog trigger.- Returns:
- true if this is an analog trigger.
-
getPortHandleForRouting
public abstract int getPortHandleForRouting()
The channel routing number.- Returns:
- channel routing number
-
requestInterrupts
public void requestInterrupts(InterruptHandlerFunction<?> handler)
Request one of the 8 interrupts asynchronously on this digital input.- Parameters:
handler
- TheInterruptHandlerFunction
that contains the methodInterruptHandlerFunction.interruptFired(int, Object)
that will be called whenever there is an interrupt on this device. Request interrupts in synchronous mode where the user program interrupt handler will be called when an interrupt occurs. The default is interrupt on rising edges only.
-
requestInterrupts
public void requestInterrupts()
Request one of the 8 interrupts synchronously on this digital input. Request interrupts in synchronous mode where the user program will have to explicitly wait for the interrupt to occur usingwaitForInterrupt(double, boolean)
. The default is interrupt on rising edges only.
-
allocateInterrupts
protected void allocateInterrupts(boolean watcher)
Allocate the interrupt.- Parameters:
watcher
- true if the interrupt should be in synchronous mode where the user program will have to explicitly wait for the interrupt to occur.
-
cancelInterrupts
public void cancelInterrupts()
Cancel interrupts on this device. This deallocates all the chipobject structures and disables any interrupts.
-
waitForInterrupt
public InterruptableSensorBase.WaitResult waitForInterrupt(double timeout, boolean ignorePrevious)
In synchronous mode, wait for the defined interrupt to occur.- Parameters:
timeout
- Timeout in secondsignorePrevious
- If true, ignore interrupts that happened before waitForInterrupt was called.- Returns:
- Result of the wait.
-
waitForInterrupt
public InterruptableSensorBase.WaitResult waitForInterrupt(double timeout)
In synchronous mode, wait for the defined interrupt to occur.- Parameters:
timeout
- Timeout in seconds- Returns:
- Result of the wait.
-
enableInterrupts
public void enableInterrupts()
Enable interrupts to occur on this input. Interrupts are disabled when the RequestInterrupt call is made. This gives time to do the setup of the other options before starting to field interrupts.
-
disableInterrupts
public void disableInterrupts()
Disable Interrupts without without deallocating structures.
-
readRisingTimestamp
public double readRisingTimestamp()
Return the timestamp for the rising interrupt that occurred most recently. This is in the same time domain as getClock(). The rising-edge interrupt should be enabled withsetUpSourceEdge(boolean, boolean)
.- Returns:
- Timestamp in seconds since boot.
-
readFallingTimestamp
public double readFallingTimestamp()
Return the timestamp for the falling interrupt that occurred most recently. This is in the same time domain as getClock(). The falling-edge interrupt should be enabled withsetUpSourceEdge(boolean, boolean)
.- Returns:
- Timestamp in seconds since boot.
-
setUpSourceEdge
public void setUpSourceEdge(boolean risingEdge, boolean fallingEdge)
Set which edge to trigger interrupts on.- Parameters:
risingEdge
- true to interrupt on rising edgefallingEdge
- true to interrupt on falling edge
-
-