WPILibC++  unspecified
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 "AnalogTrigger.h"
16 #include "CounterBase.h"
17 #include "ErrorBase.h"
18 #include "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
int Get() const override
Read the current counter value.
Definition: Counter.cpp:277
void ClearDownSource()
Disable the down counting source to the counter.
Definition: Counter.cpp:214
void SetDownSourceEdge(bool risingEdge, bool fallingEdge)
Set the edge sensitivity on a down counting source.
Definition: Counter.cpp:202
Definition: Utility.cpp:119
Counter(Mode mode=kTwoPulse)
Create an instance of a counter where no sources are selected.
Definition: Counter.cpp:19
bool GetDirection() const override
The last direction the counter value changed.
Definition: Counter.cpp:322
Class to enable glitch filtering on a set of digital inputs.
Definition: DigitalGlitchFilter.h:32
void Reset() override
Reset the Counter to zero.
Definition: Counter.cpp:285
Interface for counting the number of ticks on a digital input channel.
Definition: CounterBase.h:21
void SetUpSourceEdge(bool risingEdge, bool fallingEdge)
Set the edge sensitivity on an up counting source.
Definition: Counter.cpp:138
Class for counting the number of ticks on a digital input channel.
Definition: Counter.h:34
void SetExternalDirectionMode()
Set external direction mode on this counter.
Definition: Counter.cpp:229
void SetDownSource(int channel)
Set the down counting source to be a digital input channel.
Definition: Counter.cpp:158
void SetUpdateWhenEmpty(bool enabled)
Select whether you want to continue updating the event timer output when there are no samples capture...
Definition: Counter.cpp:307
DigitalSource Interface.
Definition: DigitalSource.h:25
void SetPulseLengthMode(double threshold)
Configure the counter to count in up or down based on the length of the input pulse.
Definition: Counter.cpp:243
Base class for most objects.
Definition: ErrorBase.h:74
Definition: SendableBase.h:19
Definition: AnalogTrigger.h:22
void SetSamplesToAverage(int samplesToAverage)
Set the Samples to Average which specifies the number of samples of the timer to average when calcula...
Definition: Counter.cpp:257
void SetUpDownCounterMode()
Set standard up / down counting mode on this counter.
Definition: Counter.cpp:222
void InitSendable(SendableBuilder &builder) override
Initializes this Sendable object.
Definition: Counter.cpp:330
Definition: SendableBuilder.h:23
double GetPeriod() const override
Get the Period of the most recent count.
Definition: Counter.cpp:292
void SetReverseDirection(bool reverseDirection)
Set the Counter to return reversed sensing on the direction.
Definition: Counter.cpp:250
void SetUpSource(int channel)
Set the upsource for the counter as a digital input channel.
Definition: Counter.cpp:94
bool GetStopped() const override
Determine if the clock is stopped.
Definition: Counter.cpp:314
void SetMaxPeriod(double maxPeriod) override
Set the maximum period where the device is still considered "moving".
Definition: Counter.cpp:300
int GetSamplesToAverage() const
Get the Samples to Average which specifies the number of samples of the timer to average when calcula...
Definition: Counter.cpp:268
void SetSemiPeriodMode(bool highSemiPeriod)
Set Semi-period mode on this counter.
Definition: Counter.cpp:236
void ClearUpSource()
Disable the up counting source to the counter.
Definition: Counter.cpp:150