/*----------------------------------------------------------------------------*/ /* Copyright (c) 2019 FIRST. All Rights Reserved. */ /* Open Source Software - may be modified and shared by FRC teams. The code */ /* must be accompanied by the FIRST BSD license file in the root directory of */ /* the project. */ /*----------------------------------------------------------------------------*/ #include "frc/DMA.h" #include #include #include #include #include #include #include using namespace frc; DMA::DMA() { int32_t status = 0; dmaHandle = HAL_InitializeDMA(&status); wpi_setErrorWithContext(status, HAL_GetErrorMessage(status)); } DMA::~DMA() { HAL_FreeDMA(dmaHandle); } void DMA::SetPause(bool pause) { int32_t status = 0; HAL_SetDMAPause(dmaHandle, pause, &status); wpi_setErrorWithContext(status, HAL_GetErrorMessage(status)); } void DMA::SetRate(int cycles) { int32_t status = 0; HAL_SetDMARate(dmaHandle, cycles, &status); wpi_setErrorWithContext(status, HAL_GetErrorMessage(status)); } void DMA::AddEncoder(const Encoder* encoder) { int32_t status = 0; HAL_AddDMAEncoder(dmaHandle, encoder->m_encoder, &status); wpi_setErrorWithContext(status, HAL_GetErrorMessage(status)); } void DMA::AddEncoderPeriod(const Encoder* encoder) { int32_t status = 0; HAL_AddDMAEncoderPeriod(dmaHandle, encoder->m_encoder, &status); wpi_setErrorWithContext(status, HAL_GetErrorMessage(status)); } void DMA::AddCounter(const Counter* counter) { int32_t status = 0; HAL_AddDMACounter(dmaHandle, counter->m_counter, &status); wpi_setErrorWithContext(status, HAL_GetErrorMessage(status)); } void DMA::AddCounterPeriod(const Counter* counter) { int32_t status = 0; HAL_AddDMACounterPeriod(dmaHandle, counter->m_counter, &status); wpi_setErrorWithContext(status, HAL_GetErrorMessage(status)); } void DMA::AddDigitalSource(const DigitalSource* digitalSource) { int32_t status = 0; HAL_AddDMADigitalSource(dmaHandle, digitalSource->GetPortHandleForRouting(), &status); wpi_setErrorWithContext(status, HAL_GetErrorMessage(status)); } void DMA::AddDutyCycle(const DutyCycle* dutyCycle) { int32_t status = 0; HAL_AddDMADutyCycle(dmaHandle, dutyCycle->m_handle, &status); wpi_setErrorWithContext(status, HAL_GetErrorMessage(status)); } void DMA::AddAnalogInput(const AnalogInput* analogInput) { int32_t status = 0; HAL_AddDMAAnalogInput(dmaHandle, analogInput->m_port, &status); wpi_setErrorWithContext(status, HAL_GetErrorMessage(status)); } void DMA::AddAveragedAnalogInput(const AnalogInput* analogInput) { int32_t status = 0; HAL_AddDMAAveragedAnalogInput(dmaHandle, analogInput->m_port, &status); wpi_setErrorWithContext(status, HAL_GetErrorMessage(status)); } void DMA::AddAnalogAccumulator(const AnalogInput* analogInput) { int32_t status = 0; HAL_AddDMAAnalogAccumulator(dmaHandle, analogInput->m_port, &status); wpi_setErrorWithContext(status, HAL_GetErrorMessage(status)); } void DMA::SetExternalTrigger(DigitalSource* source, bool rising, bool falling) { int32_t status = 0; HAL_SetDMAExternalTrigger(dmaHandle, source->GetPortHandleForRouting(), static_cast( source->GetAnalogTriggerTypeForRouting()), rising, falling, &status); wpi_setErrorWithContext(status, HAL_GetErrorMessage(status)); } void DMA::StartDMA(int queueDepth) { int32_t status = 0; HAL_StartDMA(dmaHandle, queueDepth, &status); wpi_setErrorWithContext(status, HAL_GetErrorMessage(status)); } void DMA::StopDMA() { int32_t status = 0; HAL_StopDMA(dmaHandle, &status); wpi_setErrorWithContext(status, HAL_GetErrorMessage(status)); }