WPILibC++  2020.3.2
Types.h
1 /*----------------------------------------------------------------------------*/
2 /* Copyright (c) 2016-2019 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 <stdint.h>
11 
18 #define HAL_kInvalidHandle 0
19 
20 typedef int32_t HAL_Handle;
21 
22 typedef HAL_Handle HAL_PortHandle;
23 
24 typedef HAL_Handle HAL_AnalogInputHandle;
25 
26 typedef HAL_Handle HAL_AnalogOutputHandle;
27 
28 typedef HAL_Handle HAL_AnalogTriggerHandle;
29 
30 typedef HAL_Handle HAL_CompressorHandle;
31 
32 typedef HAL_Handle HAL_CounterHandle;
33 
34 typedef HAL_Handle HAL_DigitalHandle;
35 
36 typedef HAL_Handle HAL_DigitalPWMHandle;
37 
38 typedef HAL_Handle HAL_EncoderHandle;
39 
40 typedef HAL_Handle HAL_FPGAEncoderHandle;
41 
42 typedef HAL_Handle HAL_GyroHandle;
43 
44 typedef HAL_Handle HAL_InterruptHandle;
45 
46 typedef HAL_Handle HAL_NotifierHandle;
47 
48 typedef HAL_Handle HAL_RelayHandle;
49 
50 typedef HAL_Handle HAL_SolenoidHandle;
51 
52 typedef HAL_Handle HAL_SerialPortHandle;
53 
54 typedef HAL_Handle HAL_CANHandle;
55 
56 typedef HAL_Handle HAL_SimDeviceHandle;
57 
58 typedef HAL_Handle HAL_SimValueHandle;
59 
60 typedef HAL_Handle HAL_DMAHandle;
61 
62 typedef HAL_Handle HAL_DutyCycleHandle;
63 
64 typedef HAL_Handle HAL_AddressableLEDHandle;
65 
66 typedef HAL_CANHandle HAL_PDPHandle;
67 
68 typedef int32_t HAL_Bool;
69 
70 #ifdef __cplusplus
71 #define HAL_ENUM(name) enum name : int32_t
72 #else
73 #define HAL_ENUM(name) \
74  typedef int32_t name; \
75  enum name
76 #endif
77 
78 #ifdef __cplusplus
79 namespace hal {
80 
85 template <typename CType, int32_t CInvalid = HAL_kInvalidHandle>
86 class Handle {
87  public:
88  Handle() = default;
89  /*implicit*/ Handle(CType val) : m_handle(val) {} // NOLINT(runtime/explicit)
90 
91  Handle(const Handle&) = delete;
92  Handle& operator=(const Handle&) = delete;
93 
94  Handle(Handle&& rhs) : m_handle(rhs.m_handle) { rhs.m_handle = CInvalid; }
95 
96  Handle& operator=(Handle&& rhs) {
97  m_handle = rhs.m_handle;
98  rhs.m_handle = CInvalid;
99  return *this;
100  }
101 
102  operator CType() const { return m_handle; }
103 
104  private:
105  CType m_handle = CInvalid;
106 };
107 
108 } // namespace hal
109 #endif
110 
hal
WPILib Hardware Abstraction Layer (HAL) namespace.
Definition: UnsafeDIO.h:15