WPILibC++  2018.4.1-20180729181730-1145-g898076f
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Modules Pages
Counter.h
1 /*----------------------------------------------------------------------------*/
2 /* Copyright (c) 2008-2018 FIRST. All Rights Reserved. */
3 /* Open Source Software - may be modified and shared by FRC teams. The code */
4 /* must be accompanied by the FIRST BSD license file in the root directory of */
5 /* the project. */
6 /*----------------------------------------------------------------------------*/
7 
8 #pragma once
9 
10 #include <memory>
11 
12 #include <hal/Counter.h>
13 #include <hal/Types.h>
14 
15 #include "frc/AnalogTrigger.h"
16 #include "frc/CounterBase.h"
17 #include "frc/ErrorBase.h"
18 #include "frc/smartdashboard/SendableBase.h"
19 
20 namespace frc {
21 
22 class DigitalGlitchFilter;
23 
34 class Counter : public ErrorBase, public SendableBase, public CounterBase {
35  public:
36  enum Mode {
37  kTwoPulse = 0,
38  kSemiperiod = 1,
39  kPulseLength = 2,
40  kExternalDirection = 3
41  };
42 
56  explicit Counter(Mode mode = kTwoPulse);
57 
68  explicit Counter(int channel);
69 
82  explicit Counter(DigitalSource* source);
83 
97  explicit Counter(std::shared_ptr<DigitalSource> source);
98 
109  explicit Counter(const AnalogTrigger& trigger);
110 
123  Counter(EncodingType encodingType, DigitalSource* upSource,
124  DigitalSource* downSource, bool inverted);
125 
138  Counter(EncodingType encodingType, std::shared_ptr<DigitalSource> upSource,
139  std::shared_ptr<DigitalSource> downSource, bool inverted);
140 
141  ~Counter() override;
142 
149  void SetUpSource(int channel);
150 
159  void SetUpSource(AnalogTrigger* analogTrigger, AnalogTriggerType triggerType);
160 
169  void SetUpSource(std::shared_ptr<AnalogTrigger> analogTrigger,
170  AnalogTriggerType triggerType);
171 
172  void SetUpSource(DigitalSource* source);
173 
181  void SetUpSource(std::shared_ptr<DigitalSource> source);
182 
190  void SetUpSource(DigitalSource& source);
191 
200  void SetUpSourceEdge(bool risingEdge, bool fallingEdge);
201 
205  void ClearUpSource();
206 
213  void SetDownSource(int channel);
214 
223  void SetDownSource(AnalogTrigger* analogTrigger,
224  AnalogTriggerType triggerType);
225 
234  void SetDownSource(std::shared_ptr<AnalogTrigger> analogTrigger,
235  AnalogTriggerType triggerType);
236 
244  void SetDownSource(DigitalSource* source);
245 
254  void SetDownSource(DigitalSource& source);
255 
256  void SetDownSource(std::shared_ptr<DigitalSource> source);
257 
266  void SetDownSourceEdge(bool risingEdge, bool fallingEdge);
267 
271  void ClearDownSource();
272 
278  void SetUpDownCounterMode();
279 
287 
293  void SetSemiPeriodMode(bool highSemiPeriod);
294 
304  void SetPulseLengthMode(double threshold);
305 
315  void SetReverseDirection(bool reverseDirection);
316 
324  void SetSamplesToAverage(int samplesToAverage);
325 
335  int GetSamplesToAverage() const;
336 
337  int GetFPGAIndex() const;
338 
339  // CounterBase interface
346  int Get() const override;
347 
354  void Reset() override;
355 
364  double GetPeriod() const override;
365 
376  void SetMaxPeriod(double maxPeriod) override;
377 
395  void SetUpdateWhenEmpty(bool enabled);
396 
407  bool GetStopped() const override;
408 
414  bool GetDirection() const override;
415 
416  void InitSendable(SendableBuilder& builder) override;
417 
418  protected:
419  // Makes the counter count up.
420  std::shared_ptr<DigitalSource> m_upSource;
421 
422  // Makes the counter count down.
423  std::shared_ptr<DigitalSource> m_downSource;
424 
425  // The FPGA counter object
426  HAL_CounterHandle m_counter = HAL_kInvalidHandle;
427 
428  private:
429  int m_index = 0; // The index of this counter.
430 
431  friend class DigitalGlitchFilter;
432 };
433 
434 } // namespace frc
void SetUpDownCounterMode()
Set standard up / down counting mode on this counter.
void SetSemiPeriodMode(bool highSemiPeriod)
Set Semi-period mode on this counter.
void Reset() override
Reset the Counter to zero.
void ClearDownSource()
Disable the down counting source to the counter.
void SetUpdateWhenEmpty(bool enabled)
Select whether you want to continue updating the event timer output when there are no samples capture...
WPILib FRC namespace.
Definition: SPIAccelerometerSim.h:18
Counter(Mode mode=kTwoPulse)
Create an instance of a counter where no sources are selected.
void SetDownSource(int channel)
Set the down counting source to be a digital input channel.
void ClearUpSource()
Disable the up counting source to the counter.
int GetSamplesToAverage() const
Get the Samples to Average which specifies the number of samples of the timer to average when calcula...
Class to enable glitch filtering on a set of digital inputs.
Definition: DigitalGlitchFilter.h:32
Interface for counting the number of ticks on a digital input channel.
Definition: CounterBase.h:21
Class for counting the number of ticks on a digital input channel.
Definition: Counter.h:34
void SetSamplesToAverage(int samplesToAverage)
Set the Samples to Average which specifies the number of samples of the timer to average when calcula...
void SetPulseLengthMode(double threshold)
Configure the counter to count in up or down based on the length of the input pulse.
DigitalSource Interface.
Definition: DigitalSource.h:25
void SetUpSourceEdge(bool risingEdge, bool fallingEdge)
Set the edge sensitivity on an up counting source.
bool GetStopped() const override
Determine if the clock is stopped.
void SetDownSourceEdge(bool risingEdge, bool fallingEdge)
Set the edge sensitivity on a down counting source.
Base class for most objects.
Definition: ErrorBase.h:74
Definition: SendableBase.h:19
Definition: AnalogTrigger.h:22
int Get() const override
Read the current counter value.
Definition: SendableBuilder.h:23
void SetReverseDirection(bool reverseDirection)
Set the Counter to return reversed sensing on the direction.
void SetUpSource(int channel)
Set the upsource for the counter as a digital input channel.
double GetPeriod() const override
Get the Period of the most recent count.
void SetMaxPeriod(double maxPeriod) override
Set the maximum period where the device is still considered "moving".
void InitSendable(SendableBuilder &builder) override
Initializes this Sendable object.
bool GetDirection() const override
The last direction the counter value changed.
void SetExternalDirectionMode()
Set external direction mode on this counter.