Make DigitalOutput a DigitalSource (#2054)

It's perfectly safe to use as a DigitalSource, and can enable some cool tricks.
This commit is contained in:
Thad House
2019-11-07 20:03:43 -08:00
committed by Peter Johnson
parent 5ccad2e8a4
commit ff39a96cee
3 changed files with 59 additions and 4 deletions

View File

@@ -70,6 +70,14 @@ bool DigitalOutput::Get() const {
return val;
}
HAL_Handle DigitalOutput::GetPortHandleForRouting() const { return m_handle; }
AnalogTriggerType DigitalOutput::GetAnalogTriggerTypeForRouting() const {
return (AnalogTriggerType)0;
}
bool DigitalOutput::IsAnalogTrigger() const { return false; }
int DigitalOutput::GetChannel() const { return m_channel; }
void DigitalOutput::Pulse(double length) {

View File

@@ -9,7 +9,7 @@
#include <hal/Types.h>
#include "frc/ErrorBase.h"
#include "frc/DigitalSource.h"
#include "frc/smartdashboard/Sendable.h"
#include "frc/smartdashboard/SendableHelper.h"
@@ -24,7 +24,7 @@ class SendableBuilder;
* elsewhere will allocate channels automatically so for those devices it
* shouldn't be done here.
*/
class DigitalOutput : public ErrorBase,
class DigitalOutput : public DigitalSource,
public Sendable,
public SendableHelper<DigitalOutput> {
public:
@@ -59,10 +59,26 @@ class DigitalOutput : public ErrorBase,
*/
bool Get() const;
// Digital Source Interface
/**
* @return The HAL Handle to the specified source.
*/
HAL_Handle GetPortHandleForRouting() const override;
/**
* @return The type of analog trigger output to be used. 0 for Digitals
*/
AnalogTriggerType GetAnalogTriggerTypeForRouting() const override;
/**
* Is source an AnalogTrigger
*/
bool IsAnalogTrigger() const override;
/**
* @return The GPIO channel number that this object represents.
*/
int GetChannel() const;
int GetChannel() const override;
/**
* Output a single pulse on the digital output line.

View File

@@ -18,7 +18,7 @@ import edu.wpi.first.wpilibj.smartdashboard.SendableRegistry;
* Class to write digital outputs. This class will write digital outputs. Other devices that are
* implemented elsewhere will automatically allocate digital inputs and outputs as required.
*/
public class DigitalOutput implements Sendable, AutoCloseable {
public class DigitalOutput extends DigitalSource implements Sendable, AutoCloseable {
private static final int invalidPwmGenerator = 0;
private int m_pwmGenerator = invalidPwmGenerator;
@@ -76,6 +76,7 @@ public class DigitalOutput implements Sendable, AutoCloseable {
*
* @return The GPIO channel number.
*/
@Override
public int getChannel() {
return m_channel;
}
@@ -177,4 +178,34 @@ public class DigitalOutput implements Sendable, AutoCloseable {
builder.setSmartDashboardType("Digital Output");
builder.addBooleanProperty("Value", this::get, this::set);
}
/**
* Is this an analog trigger.
*
* @return true if this is an analog trigger
*/
@Override
public boolean isAnalogTrigger() {
return false;
}
/**
* Get the analog trigger type.
*
* @return false
*/
@Override
public int getAnalogTriggerTypeForRouting() {
return 0;
}
/**
* Get the HAL Port Handle.
*
* @return The HAL Handle to the specified source.
*/
@Override
public int getPortHandleForRouting() {
return m_handle;
}
}