WPILibC++  2018.4.1-20180924001740-1197-g467c9fd
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Modules Pages
Encoder.h
1 /*----------------------------------------------------------------------------*/
2 /* Copyright (c) 2016-2018 FIRST. All Rights Reserved. */
3 /* Open Source Software - may be modified and shared by FRC teams. The code */
4 /* must be accompanied by the FIRST BSD license file in the root directory of */
5 /* the project. */
6 /*----------------------------------------------------------------------------*/
7 
8 #pragma once
9 
10 #include <stdint.h>
11 
12 #include "hal/AnalogTrigger.h"
13 #include "hal/Types.h"
14 
21 // clang-format off
25 HAL_ENUM(HAL_EncoderIndexingType) {
26  HAL_kResetWhileHigh,
27  HAL_kResetWhileLow,
28  HAL_kResetOnFallingEdge,
29  HAL_kResetOnRisingEdge
30 };
31 
35 HAL_ENUM(HAL_EncoderEncodingType) {
36  HAL_Encoder_k1X,
37  HAL_Encoder_k2X,
38  HAL_Encoder_k4X
39 };
40 // clang-format on
41 
42 #ifdef __cplusplus
43 extern "C" {
44 #endif
45 
62 HAL_EncoderHandle HAL_InitializeEncoder(
63  HAL_Handle digitalSourceHandleA, HAL_AnalogTriggerType analogTriggerTypeA,
64  HAL_Handle digitalSourceHandleB, HAL_AnalogTriggerType analogTriggerTypeB,
65  HAL_Bool reverseDirection, HAL_EncoderEncodingType encodingType,
66  int32_t* status);
67 
73 void HAL_FreeEncoder(HAL_EncoderHandle encoderHandle, int32_t* status);
74 
83 int32_t HAL_GetEncoder(HAL_EncoderHandle encoderHandle, int32_t* status);
84 
93 int32_t HAL_GetEncoderRaw(HAL_EncoderHandle encoderHandle, int32_t* status);
94 
103 int32_t HAL_GetEncoderEncodingScale(HAL_EncoderHandle encoderHandle,
104  int32_t* status);
105 
115 void HAL_ResetEncoder(HAL_EncoderHandle encoderHandle, int32_t* status);
116 
117 /*
118  * Gets the Period of the most recent count.
119  *
120  * Returns the time interval of the most recent count. This can be used for
121  * velocity calculations to determine shaft speed.
122  *
123  * @param encoderHandle the encoder handle
124  * @returns the period of the last two pulses in units of seconds
125  */
126 double HAL_GetEncoderPeriod(HAL_EncoderHandle encoderHandle, int32_t* status);
127 
139 void HAL_SetEncoderMaxPeriod(HAL_EncoderHandle encoderHandle, double maxPeriod,
140  int32_t* status);
141 
153 HAL_Bool HAL_GetEncoderStopped(HAL_EncoderHandle encoderHandle,
154  int32_t* status);
155 
162 HAL_Bool HAL_GetEncoderDirection(HAL_EncoderHandle encoderHandle,
163  int32_t* status);
164 
175 double HAL_GetEncoderDistance(HAL_EncoderHandle encoderHandle, int32_t* status);
176 
187 double HAL_GetEncoderRate(HAL_EncoderHandle encoderHandle, int32_t* status);
188 
200 void HAL_SetEncoderMinRate(HAL_EncoderHandle encoderHandle, double minRate,
201  int32_t* status);
202 
211 void HAL_SetEncoderDistancePerPulse(HAL_EncoderHandle encoderHandle,
212  double distancePerPulse, int32_t* status);
213 
222 void HAL_SetEncoderReverseDirection(HAL_EncoderHandle encoderHandle,
223  HAL_Bool reverseDirection, int32_t* status);
224 
231 void HAL_SetEncoderSamplesToAverage(HAL_EncoderHandle encoderHandle,
232  int32_t samplesToAverage, int32_t* status);
233 
240 int32_t HAL_GetEncoderSamplesToAverage(HAL_EncoderHandle encoderHandle,
241  int32_t* status);
242 
256 void HAL_SetEncoderIndexSource(HAL_EncoderHandle encoderHandle,
257  HAL_Handle digitalSourceHandle,
258  HAL_AnalogTriggerType analogTriggerType,
259  HAL_EncoderIndexingType type, int32_t* status);
260 
267 int32_t HAL_GetEncoderFPGAIndex(HAL_EncoderHandle encoderHandle,
268  int32_t* status);
269 
278 double HAL_GetEncoderDecodingScaleFactor(HAL_EncoderHandle encoderHandle,
279  int32_t* status);
280 
287 double HAL_GetEncoderDistancePerPulse(HAL_EncoderHandle encoderHandle,
288  int32_t* status);
289 
296 HAL_EncoderEncodingType HAL_GetEncoderEncodingType(
297  HAL_EncoderHandle encoderHandle, int32_t* status);
298 #ifdef __cplusplus
299 } // extern "C"
300 #endif
301 
HAL_ENUM(HAL_EncoderIndexingType)
The type of index pulse for the encoder.
Definition: Encoder.h:25
void HAL_SetEncoderMaxPeriod(HAL_EncoderHandle encoderHandle, double maxPeriod, int32_t *status)
Sets the maximum period where the device is still considered "moving".
HAL_EncoderHandle HAL_InitializeEncoder(HAL_Handle digitalSourceHandleA, HAL_AnalogTriggerType analogTriggerTypeA, HAL_Handle digitalSourceHandleB, HAL_AnalogTriggerType analogTriggerTypeB, HAL_Bool reverseDirection, HAL_EncoderEncodingType encodingType, int32_t *status)
Initializes an encoder.
double HAL_GetEncoderDecodingScaleFactor(HAL_EncoderHandle encoderHandle, int32_t *status)
Gets the decoding scale factor of the encoder.
void HAL_SetEncoderSamplesToAverage(HAL_EncoderHandle encoderHandle, int32_t samplesToAverage, int32_t *status)
Sets the number of encoder samples to average when calculating encoder rate.
double HAL_GetEncoderRate(HAL_EncoderHandle encoderHandle, int32_t *status)
Gets the current rate of the encoder.
double HAL_GetEncoderDistancePerPulse(HAL_EncoderHandle encoderHandle, int32_t *status)
Gets the user set distance per pulse of the encoder.
void HAL_SetEncoderIndexSource(HAL_EncoderHandle encoderHandle, HAL_Handle digitalSourceHandle, HAL_AnalogTriggerType analogTriggerType, HAL_EncoderIndexingType type, int32_t *status)
Sets the source for an index pulse on the encoder.
int32_t HAL_GetEncoderEncodingScale(HAL_EncoderHandle encoderHandle, int32_t *status)
Gets the encoder scale value.
int32_t HAL_GetEncoderRaw(HAL_EncoderHandle encoderHandle, int32_t *status)
Gets the raw counts of the encoder.
HAL_EncoderEncodingType HAL_GetEncoderEncodingType(HAL_EncoderHandle encoderHandle, int32_t *status)
Gets the encoding type of the encoder.
void HAL_SetEncoderReverseDirection(HAL_EncoderHandle encoderHandle, HAL_Bool reverseDirection, int32_t *status)
Sets if to reverse the direction of the encoder.
void HAL_ResetEncoder(HAL_EncoderHandle encoderHandle, int32_t *status)
Reads the current encoder value.
HAL_Bool HAL_GetEncoderStopped(HAL_EncoderHandle encoderHandle, int32_t *status)
Determines if the clock is stopped.
HAL_Bool HAL_GetEncoderDirection(HAL_EncoderHandle encoderHandle, int32_t *status)
Gets the last direction the encoder value changed.
int32_t HAL_GetEncoderFPGAIndex(HAL_EncoderHandle encoderHandle, int32_t *status)
Gets the FPGA index of the encoder.
int32_t HAL_GetEncoder(HAL_EncoderHandle encoderHandle, int32_t *status)
Gets the current counts of the encoder after encoding type scaling.
int32_t HAL_GetEncoderSamplesToAverage(HAL_EncoderHandle encoderHandle, int32_t *status)
Gets the current samples to average value.
void HAL_SetEncoderDistancePerPulse(HAL_EncoderHandle encoderHandle, double distancePerPulse, int32_t *status)
Sets the distance traveled per encoder pulse.
void HAL_FreeEncoder(HAL_EncoderHandle encoderHandle, int32_t *status)
Frees an encoder.
double HAL_GetEncoderDistance(HAL_EncoderHandle encoderHandle, int32_t *status)
Gets the current distance traveled by the encoder.
void HAL_SetEncoderMinRate(HAL_EncoderHandle encoderHandle, double minRate, int32_t *status)
Sets the minimum rate to be considered moving by the encoder.