mirror of
https://github.com/wpilibsuite/allwpilib
synced 2026-06-22 01:11:42 +00:00
This makes our APIs more consistent. With optimizations enabled, doubles are just as efficient as floats on ARMv7, so we should take advantage of the extra precision.
105 lines
4.0 KiB
C++
105 lines
4.0 KiB
C++
/*----------------------------------------------------------------------------*/
|
|
/* 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 <memory>
|
|
#include <string>
|
|
|
|
#include "CounterBase.h"
|
|
#include "LiveWindow/LiveWindowSendable.h"
|
|
#include "SensorBase.h"
|
|
|
|
namespace frc {
|
|
|
|
/**
|
|
* Class for counting the number of ticks on a digital input channel.
|
|
*
|
|
* This is a general purpose class for counting repetitive events. It can return
|
|
* the number of counts, the period of the most recent cycle, and detect when
|
|
* the signal being counted has stopped by supplying a maximum cycle time.
|
|
*
|
|
* All counters will immediately start counting - Reset() them if you need them
|
|
* to be zeroed before use.
|
|
*/
|
|
class Counter : public SensorBase,
|
|
public CounterBase,
|
|
public LiveWindowSendable {
|
|
public:
|
|
explicit Counter(Mode mode = kTwoPulse);
|
|
explicit Counter(int channel);
|
|
// TODO: [Not Supported] explicit Counter(DigitalSource *source);
|
|
// TODO: [Not Supported] explicit Counter(DigitalSource &source);
|
|
// TODO: [Not Supported] explicit Counter(AnalogTrigger *source);
|
|
// TODO: [Not Supported] explicit Counter(AnalogTrigger &source);
|
|
// TODO: [Not Supported] Counter(EncodingType encodingType, DigitalSource
|
|
// *upSource, DigitalSource *downSource, bool inverted);
|
|
virtual ~Counter();
|
|
|
|
void SetUpSource(int channel);
|
|
// TODO: [Not Supported] void SetUpSource(AnalogTrigger *analogTrigger,
|
|
// AnalogTriggerType triggerType);
|
|
// TODO: [Not Supported] void SetUpSource(AnalogTrigger &analogTrigger,
|
|
// AnalogTriggerType triggerType);
|
|
// TODO: [Not Supported] void SetUpSource(DigitalSource *source);
|
|
// TODO: [Not Supported] void SetUpSource(DigitalSource &source);
|
|
void SetUpSourceEdge(bool risingEdge, bool fallingEdge);
|
|
void ClearUpSource();
|
|
|
|
void SetDownSource(int channel);
|
|
// TODO: [Not Supported] void SetDownSource(AnalogTrigger *analogTrigger,
|
|
// AnalogTriggerType triggerType);
|
|
// TODO: [Not Supported] void SetDownSource(AnalogTrigger &analogTrigger,
|
|
// AnalogTriggerType triggerType);
|
|
// TODO: [Not Supported] void SetDownSource(DigitalSource *source);
|
|
// TODO: [Not Supported] void SetDownSource(DigitalSource &source);
|
|
void SetDownSourceEdge(bool risingEdge, bool fallingEdge);
|
|
void ClearDownSource();
|
|
|
|
void SetUpDownCounterMode();
|
|
void SetExternalDirectionMode();
|
|
void SetSemiPeriodMode(bool highSemiPeriod);
|
|
void SetPulseLengthMode(double threshold);
|
|
|
|
void SetReverseDirection(bool reverseDirection);
|
|
|
|
// CounterBase interface
|
|
int Get() const override;
|
|
void Reset() override;
|
|
double GetPeriod() const override;
|
|
void SetMaxPeriod(double maxPeriod) override;
|
|
void SetUpdateWhenEmpty(bool enabled);
|
|
bool GetStopped() const override;
|
|
bool GetDirection() const override;
|
|
|
|
void SetSamplesToAverage(int samplesToAverage);
|
|
int GetSamplesToAverage() const;
|
|
int GetFPGAIndex() const { return m_index; }
|
|
|
|
void UpdateTable() override;
|
|
void StartLiveWindowMode() override;
|
|
void StopLiveWindowMode() override;
|
|
std::string GetSmartDashboardType() const override;
|
|
void InitTable(std::shared_ptr<ITable> subTable) override;
|
|
std::shared_ptr<ITable> GetTable() const override;
|
|
|
|
protected:
|
|
// What makes the counter count up.
|
|
// TODO: [Not Supported] DigitalSource *m_upSource;
|
|
// What makes the counter count down.
|
|
// TODO: [Not Supported] DigitalSource *m_downSource;
|
|
void* m_counter; ///< The FPGA counter object.
|
|
private:
|
|
bool m_allocatedUpSource; ///< Was the upSource allocated locally?
|
|
bool m_allocatedDownSource; ///< Was the downSource allocated locally?
|
|
int m_index; ///< The index of this counter.
|
|
|
|
std::shared_ptr<ITable> m_table;
|
|
};
|
|
|
|
} // namespace frc
|