// Copyright (c) FIRST and other WPILib contributors. // Open Source Software; you can modify and/or share it under the terms of // the WPILib BSD license file in the root directory of this project. #pragma once #include #include #include namespace hlt { struct InterruptHandle : hal::Handle { public: explicit InterruptHandle(int32_t* status) : Handle{HAL_InitializeInterrupts(status)} {} }; struct DMAHandle : hal::Handle { public: explicit DMAHandle(int32_t* status) : Handle{HAL_InitializeDMA(status)} {} }; struct AnalogInputHandle : hal::Handle { public: AnalogInputHandle(int32_t port, int32_t* status) : Handle{HAL_InitializeAnalogInputPort(HAL_GetPort(port), nullptr, status)} {} }; struct AnalogOutputHandle : hal::Handle { public: AnalogOutputHandle(int32_t port, int32_t* status) : Handle{HAL_InitializeAnalogOutputPort(HAL_GetPort(port), nullptr, status)} {} }; struct AnalogTriggerHandle : hal::Handle { public: explicit AnalogTriggerHandle(HAL_AnalogInputHandle port, int32_t* status) : Handle{HAL_InitializeAnalogTrigger(port, status)} {} }; struct DutyCycleHandle : hal::Handle { public: DutyCycleHandle(HAL_DigitalHandle port, int32_t* status) : Handle{HAL_InitializeDutyCycle( port, HAL_AnalogTriggerType::HAL_Trigger_kInWindow, status)} {} }; struct DIOHandle : hal::Handle { public: DIOHandle() {} DIOHandle(int32_t port, HAL_Bool input, int32_t* status) : Handle{ HAL_InitializeDIOPort(HAL_GetPort(port), input, nullptr, status)} {} }; struct PWMHandle : hal::Handle { public: PWMHandle() {} PWMHandle(int32_t port, int32_t* status) : Handle{HAL_InitializePWMPort(HAL_GetPort(port), nullptr, status)} {} }; struct RelayHandle : hal::Handle { public: RelayHandle(int32_t port, HAL_Bool fwd, int32_t* status) : Handle{ HAL_InitializeRelayPort(HAL_GetPort(port), fwd, nullptr, status)} {} }; #define ASSERT_LAST_ERROR_STATUS(status, x) \ do { \ ASSERT_EQ(status, HAL_USE_LAST_ERROR); \ [[maybe_unused]] \ const char* lastErrorMessageInMacro = HAL_GetLastError(&status); \ ASSERT_EQ(status, x); \ } while (0) } // namespace hlt