10 #include <type_traits>
12 #include <hal/AnalogInput.h>
14 #include <units/units.h>
16 #include "frc/AnalogInput.h"
17 #include "frc/Counter.h"
19 #include "frc/DutyCycle.h"
20 #include "frc/Encoder.h"
25 HAL_DMAReadStatus Update(
const DMA* dma, units::second_t timeout,
26 int32_t* remaining, int32_t* status) {
27 units::millisecond_t ms = timeout;
28 auto timeoutMs = ms.to<int32_t>();
29 return HAL_ReadDMA(dma->dmaHandle,
this, timeoutMs, remaining, status);
32 uint64_t GetTime()
const {
return timeStamp; }
34 units::second_t GetTimeStamp()
const {
35 return units::second_t{static_cast<double>(GetTime()) * 1.0e-6};
38 int32_t GetEncoderRaw(
const Encoder* encoder, int32_t* status)
const {
39 return HAL_GetDMASampleEncoderRaw(
this, encoder->m_encoder, status);
42 double GetEncoderDistance(
const Encoder* encoder, int32_t* status)
const {
43 double val = GetEncoderRaw(encoder, status);
44 val *= encoder->DecodingScaleFactor();
49 int32_t GetEncoderPeriodRaw(
const Encoder* encoder, int32_t* status)
const {
50 return HAL_GetDMASampleEncoderPeriodRaw(
this, encoder->m_encoder, status);
53 int32_t GetCounter(
const Counter* counter, int32_t* status)
const {
54 return HAL_GetDMASampleCounter(
this, counter->m_counter, status);
57 int32_t GetCounterPeriod(
const Counter* counter, int32_t* status)
const {
58 return HAL_GetDMASampleCounterPeriod(
this, counter->m_counter, status);
62 int32_t* status)
const {
63 return HAL_GetDMASampleDigitalSource(
64 this, digitalSource->GetPortHandleForRouting(), status);
67 int32_t GetAnalogInputRaw(
const AnalogInput* analogInput,
68 int32_t* status)
const {
69 return HAL_GetDMASampleAnalogInputRaw(
this, analogInput->m_port, status);
72 double GetAnalogInputVoltage(
const AnalogInput* analogInput,
75 analogInput->m_port, GetAnalogInputRaw(analogInput, status), status);
78 int32_t GetAveragedAnalogInputRaw(
const AnalogInput* analogInput,
79 int32_t* status)
const {
80 return HAL_GetDMASampleAveragedAnalogInputRaw(
this, analogInput->m_port,
84 double GetAveragedAnalogInputVoltage(
const AnalogInput* analogInput,
87 analogInput->m_port, GetAveragedAnalogInputRaw(analogInput, status),
91 void GetAnalogAccumulator(
const AnalogInput* analogInput, int64_t* count,
92 int64_t* value, int32_t* status)
const {
93 return HAL_GetDMASampleAnalogAccumulator(
this, analogInput->m_port, count,
97 int32_t GetDutyCycleOutputRaw(
const DutyCycle* dutyCycle,
98 int32_t* status)
const {
99 return HAL_GetDMASampleDutyCycleOutputRaw(
this, dutyCycle->m_handle,
103 double GetDutyCycleOutput(
const DutyCycle* dutyCycle, int32_t* status) {
104 return GetDutyCycleOutputRaw(dutyCycle, status) /
109 static_assert(std::is_standard_layout_v<frc::DMASample>,
110 "frc::DMASample must have standard layout");