/*----------------------------------------------------------------------------*/ /* Copyright (c) FIRST 2008-2016. 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 #include #include "DigitalSource.h" #include "HAL/Types.h" #include "LiveWindow/LiveWindowSendable.h" #include "tables/ITableListener.h" /** * Class to write to digital outputs. * Write values to the digital output channels. Other devices implemented * elsewhere will allocate channels automatically so for those devices it * shouldn't be done here. */ class DigitalOutput : public DigitalSource, public ITableListener, public LiveWindowSendable { public: explicit DigitalOutput(int channel); virtual ~DigitalOutput(); void Set(bool value); bool Get() const; int GetChannel() const override; void Pulse(float length); bool IsPulsing() const; void SetPWMRate(float rate); void EnablePWM(float initialDutyCycle); void DisablePWM(); void UpdateDutyCycle(float dutyCycle); // Digital Source Interface HAL_Handle GetPortHandleForRouting() const override; AnalogTriggerType GetAnalogTriggerTypeForRouting() const override; bool IsAnalogTrigger() const override; void ValueChanged(ITable* source, llvm::StringRef key, std::shared_ptr value, bool isNew) override; void UpdateTable(); void StartLiveWindowMode(); void StopLiveWindowMode(); std::string GetSmartDashboardType() const; void InitTable(std::shared_ptr subTable); std::shared_ptr GetTable() const; private: int m_channel; HAL_DigitalHandle m_handle; HAL_DigitalPWMHandle m_pwmGenerator; std::shared_ptr m_table; };