mirror of
https://github.com/wpilibsuite/allwpilib
synced 2026-06-21 01:01:43 +00:00
This is the changes made by Patrick Plenefisch converting the native code to use CMake and the CMake Maven Plugin, as opposed to the native Maven plugin. This is to allow for compatibility with newer versions of the GCC toolchain. All the cpp sources were moved from maven style directories to cpp style directories for CMake. Change-Id: I67f5e3608948f37c83b0990d232105a3784f8593
98 lines
3.5 KiB
C++
98 lines
3.5 KiB
C++
/*----------------------------------------------------------------------------*/
|
|
/* Copyright (c) FIRST 2008. 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 $(WIND_BASE)/WPILib. */
|
|
/*----------------------------------------------------------------------------*/
|
|
|
|
#ifndef CPPCOUNTER_H_
|
|
#define CPPCOUNTER_H_
|
|
|
|
#include "HAL/HAL.h"
|
|
#include "AnalogTriggerOutput.h"
|
|
#include "CounterBase.h"
|
|
#include "SensorBase.h"
|
|
#include "LiveWindow/LiveWindowSendable.h"
|
|
|
|
/**
|
|
* 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.
|
|
*/
|
|
class Counter : public SensorBase, public CounterBase, public LiveWindowSendable
|
|
{
|
|
public:
|
|
/* typedef enum {kTwoPulse=0, kSemiperiod=1, kPulseLength=2, kExternalDirection=3} Mode; */
|
|
|
|
Counter();
|
|
explicit Counter(uint32_t channel);
|
|
Counter(uint8_t moduleNumber, uint32_t channel);
|
|
explicit Counter(DigitalSource *source);
|
|
explicit Counter(DigitalSource &source);
|
|
explicit Counter(AnalogTrigger *trigger);
|
|
explicit Counter(AnalogTrigger &trigger);
|
|
Counter(EncodingType encodingType, DigitalSource *upSource, DigitalSource *downSource, bool inverted);
|
|
virtual ~Counter();
|
|
|
|
void SetUpSource(uint32_t channel);
|
|
void SetUpSource(uint8_t moduleNumber, uint32_t channel);
|
|
void SetUpSource(AnalogTrigger *analogTrigger, AnalogTriggerType triggerType);
|
|
void SetUpSource(AnalogTrigger &analogTrigger, AnalogTriggerType triggerType);
|
|
void SetUpSource(DigitalSource *source);
|
|
void SetUpSource(DigitalSource &source);
|
|
void SetUpSourceEdge(bool risingEdge, bool fallingEdge);
|
|
void ClearUpSource();
|
|
|
|
void SetDownSource(uint32_t channel);
|
|
void SetDownSource(uint8_t moduleNumber, uint32_t channel);
|
|
void SetDownSource(AnalogTrigger *analogTrigger, AnalogTriggerType triggerType);
|
|
void SetDownSource(AnalogTrigger &analogTrigger, AnalogTriggerType triggerType);
|
|
void SetDownSource(DigitalSource *source);
|
|
void SetDownSource(DigitalSource &source);
|
|
void SetDownSourceEdge(bool risingEdge, bool fallingEdge);
|
|
void ClearDownSource();
|
|
|
|
void SetUpDownCounterMode();
|
|
void SetExternalDirectionMode();
|
|
void SetSemiPeriodMode(bool highSemiPeriod);
|
|
void SetPulseLengthMode(float threshold);
|
|
|
|
void SetReverseDirection(bool reverseDirection);
|
|
|
|
// CounterBase interface
|
|
void Start();
|
|
int32_t Get();
|
|
void Reset();
|
|
void Stop();
|
|
double GetPeriod();
|
|
void SetMaxPeriod(double maxPeriod);
|
|
void SetUpdateWhenEmpty(bool enabled);
|
|
bool GetStopped();
|
|
bool GetDirection();
|
|
void SetSamplesToAverage(int samplesToAverage);
|
|
int GetSamplesToAverage();
|
|
uint32_t GetIndex() {return m_index;}
|
|
|
|
|
|
void UpdateTable();
|
|
void StartLiveWindowMode();
|
|
void StopLiveWindowMode();
|
|
virtual std::string GetSmartDashboardType();
|
|
void InitTable(ITable *subTable);
|
|
ITable * GetTable();
|
|
protected:
|
|
DigitalSource *m_upSource; ///< What makes the counter count up.
|
|
DigitalSource *m_downSource; ///< What makes the counter count down.
|
|
void* m_counter; ///< The FPGA counter object.
|
|
private:
|
|
void InitCounter(Mode mode = kTwoPulse);
|
|
|
|
bool m_allocatedUpSource; ///< Was the upSource allocated locally?
|
|
bool m_allocatedDownSource; ///< Was the downSource allocated locally?
|
|
uint32_t m_index; ///< The index of this counter.
|
|
|
|
ITable *m_table;
|
|
};
|
|
|
|
#endif
|