7 #include "AnalogTrigger.h"
9 #include "AnalogChannel.h"
10 #include "AnalogModule.h"
11 #include "NetworkCommunication/UsageReporting.h"
13 #include "WPIErrors.h"
21 void AnalogTrigger::InitTrigger(uint8_t moduleNumber, uint32_t channel)
24 uint32_t index = triggers->
Allocate(
"Analog Trigger");
30 m_index = (uint8_t)index;
34 tRioStatusCode localStatus = NiFpga_Status_Success;
35 m_trigger = tAnalogTrigger::create(m_index, &localStatus);
36 m_trigger->writeSourceSelect_Channel(m_channel - 1, &localStatus);
37 m_trigger->writeSourceSelect_Module(moduleNumber - 1, &localStatus);
38 wpi_setError(localStatus);
40 nUsageReporting::report(nUsageReporting::kResourceType_AnalogTrigger, m_channel, moduleNumber - 1);
51 InitTrigger(GetDefaultAnalogModule(), channel);
62 InitTrigger(moduleNumber, channel);
75 AnalogTrigger::~AnalogTrigger()
77 triggers->
Free(m_index);
91 wpi_setWPIError(AnalogTriggerLimitOrderError);
93 tRioStatusCode localStatus = NiFpga_Status_Success;
94 m_trigger->writeLowerLimit(lower, &localStatus);
95 m_trigger->writeUpperLimit(upper, &localStatus);
96 wpi_setError(localStatus);
108 wpi_setWPIError(AnalogTriggerLimitOrderError);
111 tRioStatusCode localStatus = NiFpga_Status_Success;
112 m_trigger->writeLowerLimit(m_analogModule->
VoltsToValue(m_channel, lower), &localStatus);
113 m_trigger->writeUpperLimit(m_analogModule->
VoltsToValue(m_channel, upper), &localStatus);
114 wpi_setError(localStatus);
125 tRioStatusCode localStatus = NiFpga_Status_Success;
126 if (m_trigger->readSourceSelect_Filter(&localStatus) != 0)
127 wpi_setWPIErrorWithContext(IncompatibleMode,
"Hardware does not support average and filtering at the same time.");
128 m_trigger->writeSourceSelect_Averaged(useAveragedValue, &localStatus);
129 wpi_setError(localStatus);
140 tRioStatusCode localStatus = NiFpga_Status_Success;
141 if (m_trigger->readSourceSelect_Averaged(&localStatus) != 0)
142 wpi_setWPIErrorWithContext(IncompatibleMode,
"Hardware does not support average and filtering at the same time.");
143 m_trigger->writeSourceSelect_Filter(useFilteredValue, &localStatus);
144 wpi_setError(localStatus);
166 tRioStatusCode localStatus = NiFpga_Status_Success;
167 bool result = m_trigger->readOutput_InHysteresis(m_index, &localStatus) != 0;
168 wpi_setError(localStatus);
182 tRioStatusCode localStatus = NiFpga_Status_Success;
183 bool result = m_trigger->readOutput_OverLimit(m_index, &localStatus) != 0;
184 wpi_setError(localStatus);
AnalogTriggerOutput * CreateOutput(AnalogTriggerOutput::Type type)
void SetFiltered(bool useFilteredValue)
void SetLimitsVoltage(float lower, float upper)
uint8_t GetModuleNumber()
static AnalogModule * GetInstance(uint8_t moduleNumber)
void Free(uint32_t index)
uint32_t Allocate(const char *resourceDesc)
virtual bool StatusIsFatal() const
Check if the current error code represents a fatal error.
void SetAveraged(bool useAveragedValue)
static void CreateResourceObject(Resource **r, uint32_t elements)
void SetLimitsRaw(int32_t lower, int32_t upper)
AnalogTrigger(uint8_t moduleNumber, uint32_t channel)
int32_t VoltsToValue(int32_t channel, float voltage)