mirror of
https://github.com/wpilibsuite/allwpilib
synced 2026-06-19 00:41:43 +00:00
A templated hal::Handle class is used to wrap handles to make them move-only. This eliminates a lot of boilerplate move constructor/assignment code in the main WPILib classes. HAL_SPIPort and HAL_I2CPort are also wrapped. The wrapper class does not implement destruction. This would require the wrapper class to be handle-specific (rather than generic) and would result in more code added than it removed, plus would add header dependencies on more HAL headers. In addition, some HAL handle release functions are more complex (e.g. have return values) and can't be easily mapped to a destructor.
79 lines
2.2 KiB
C++
79 lines
2.2 KiB
C++
/*----------------------------------------------------------------------------*/
|
|
/* Copyright (c) 2008-2019 FIRST. All Rights Reserved. */
|
|
/* Open Source Software - may be modified and shared by FRC teams. The code */
|
|
/* must be accompanied by the FIRST BSD license file in the root directory of */
|
|
/* the project. */
|
|
/*----------------------------------------------------------------------------*/
|
|
|
|
#pragma once
|
|
|
|
#include "frc/DigitalSource.h"
|
|
|
|
namespace frc {
|
|
|
|
class DigitalGlitchFilter;
|
|
|
|
/**
|
|
* Class to read a digital input.
|
|
*
|
|
* This class will read digital inputs and return the current value on the
|
|
* channel. Other devices such as encoders, gear tooth sensors, etc. that are
|
|
* implemented elsewhere will automatically allocate digital inputs and outputs
|
|
* as required. This class is only for devices like switches etc. that aren't
|
|
* implemented anywhere else.
|
|
*/
|
|
class DigitalInput : public DigitalSource {
|
|
public:
|
|
/**
|
|
* Create an instance of a Digital Input class.
|
|
*
|
|
* Creates a digital input given a channel.
|
|
*
|
|
* @param channel The DIO channel 0-9 are on-board, 10-25 are on the MXP port
|
|
*/
|
|
explicit DigitalInput(int channel);
|
|
|
|
~DigitalInput() override;
|
|
|
|
DigitalInput(DigitalInput&&) = default;
|
|
DigitalInput& operator=(DigitalInput&&) = default;
|
|
|
|
/**
|
|
* Get the value from a digital input channel.
|
|
*
|
|
* Retrieve the value of a single digital input channel from the FPGA.
|
|
*/
|
|
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 override;
|
|
|
|
void InitSendable(SendableBuilder& builder) override;
|
|
|
|
private:
|
|
int m_channel;
|
|
hal::Handle<HAL_DigitalHandle> m_handle;
|
|
|
|
friend class DigitalGlitchFilter;
|
|
};
|
|
|
|
} // namespace frc
|