12 #include "hal/Types.h"
35 virtual void ResetHandles();
36 static void ResetGlobalHandles();
42 constexpr int16_t InvalidHandleIndex = -1;
76 static inline int16_t getHandleIndex(HAL_Handle handle) {
78 return static_cast<int16_t
>(handle & 0xffff);
99 static inline bool isHandleType(HAL_Handle handle,
HAL_HandleEnum handleType) {
100 return handleType == getHandleType(handle);
112 static inline bool isHandleCorrectVersion(HAL_Handle handle, int16_t version) {
113 return (((handle & 0xFF0000) >> 16) & version) == version;
127 static inline int16_t getHandleTypedIndex(HAL_Handle handle,
130 if (!isHandleType(handle, enumType))
return InvalidHandleIndex;
131 #if !defined(__FRC_ROBORIO__)
132 if (!isHandleCorrectVersion(handle, version))
return InvalidHandleIndex;
134 return getHandleIndex(handle);
153 static inline int16_t getPortHandleChannel(HAL_PortHandle handle) {
154 if (!isHandleType(handle, HAL_HandleEnum::Port))
return InvalidHandleIndex;
155 return static_cast<uint8_t
>(handle & 0xff);
165 static inline int16_t getPortHandleModule(HAL_PortHandle handle) {
166 if (!isHandleType(handle, HAL_HandleEnum::Port))
return InvalidHandleIndex;
167 return static_cast<uint8_t
>((handle >> 8) & 0xff);
177 static inline int16_t getPortHandleSPIEnable(HAL_PortHandle handle) {
178 if (!isHandleType(handle, HAL_HandleEnum::Port))
return InvalidHandleIndex;
179 return static_cast<uint8_t
>((handle >> 16) & 0xff);
HAL_PortHandle createPortHandle(uint8_t channel, uint8_t module)
Create a port handle.
HAL_HandleEnum
Enum of HAL handle types.
Definition: HandlesInternal.h:47
Base for all HAL Handles.
Definition: HandlesInternal.h:29
WPILib Hardware Abstraction Layer (HAL) namespace.
Definition: SimDataValue.h:19
HAL_PortHandle createPortHandleForSPI(uint8_t channel)
Create a port handle for SPI.
HAL_Handle createHandle(int16_t index, HAL_HandleEnum handleType, int16_t version)
Create a handle for a specific index, type and version.