WPILibC++  unspecified
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Pages
InterruptableSensorBase.h
1 /*----------------------------------------------------------------------------*/
2 /* Copyright (c) FIRST 2008-2016. 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 "HAL/HAL.hpp"
11 #include "SensorBase.h"
12 #include "Resource.h"
13 
14 #include <memory>
15 
17  public:
18  enum WaitResult {
19  kTimeout = 0x0,
20  kRisingEdge = 0x1,
21  kFallingEdge = 0x100,
22  kBoth = 0x101,
23  };
24 
26  virtual ~InterruptableSensorBase() = default;
27  virtual uint32_t GetChannelForRouting() const = 0;
28  virtual uint32_t GetModuleForRouting() const = 0;
29  virtual bool GetAnalogTriggerForRouting() const = 0;
30  virtual void RequestInterrupts(
31  InterruptHandlerFunction handler,
32  void *param);
33  virtual void RequestInterrupts();
34  virtual void
36  virtual WaitResult WaitForInterrupt(
37  float timeout, bool ignorePrevious = true);
38  virtual void
40  virtual void DisableInterrupts();
41  virtual double ReadRisingTimestamp();
42  virtual double ReadFallingTimestamp();
44  virtual void SetUpSourceEdge(bool risingEdge, bool fallingEdge);
46 
47  protected:
48  void *m_interrupt = nullptr;
49  uint32_t m_interruptIndex = std::numeric_limits<uint32_t>::max();
50  void AllocateInterrupts(bool watcher);
51 
52  static std::unique_ptr<Resource> m_interrupts;
53 };
virtual void CancelInterrupts()
Free up the underlying chipobject functions.
Definition: InterruptableSensorBase.cpp:85
virtual double ReadRisingTimestamp()
Return the timestamp for the rising interrupt that occurred.
Definition: InterruptableSensorBase.cpp:151
virtual WaitResult WaitForInterrupt(float timeout, bool ignorePrevious=true)
Synchronus version.
Definition: InterruptableSensorBase.cpp:106
virtual void DisableInterrupts()
Disable, but don't deallocate.
Definition: InterruptableSensorBase.cpp:136
Base class for all sensors.
Definition: SensorBase.h:20
virtual double ReadFallingTimestamp()
Return the timestamp for the falling interrupt that occurred.
Definition: InterruptableSensorBase.cpp:167
virtual void SetUpSourceEdge(bool risingEdge, bool fallingEdge)
Set which edge to trigger interrupts on.
Definition: InterruptableSensorBase.cpp:184
Definition: InterruptableSensorBase.h:16
virtual void EnableInterrupts()
Enable interrupts - after finishing setup.
Definition: InterruptableSensorBase.cpp:125
virtual void RequestInterrupts()
Synchronus Wait version.
Definition: InterruptableSensorBase.cpp:55