WPILibC++  unspecified
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Pages
Digital.hpp
1 #pragma once
2 #include <stdint.h>
3 
4 #include "HAL/cpp/priority_mutex.h"
5 
6 enum Mode
7 {
8  kTwoPulse = 0,
9  kSemiperiod = 1,
10  kPulseLength = 2,
11  kExternalDirection = 3
12 };
13 
14 priority_recursive_mutex& spiGetSemaphore(uint8_t port);
15 
16 extern "C"
17 {
18  void* initializeDigitalPort(void* port_pointer, int32_t *status);
19  void freeDigitalPort(void* digital_port_pointer);
20  bool checkPWMChannel(void* digital_port_pointer);
21  bool checkRelayChannel(void* digital_port_pointer);
22 
23  void setPWM(void* digital_port_pointer, unsigned short value, int32_t *status);
24  bool allocatePWMChannel(void* digital_port_pointer, int32_t *status);
25  void freePWMChannel(void* digital_port_pointer, int32_t *status);
26  unsigned short getPWM(void* digital_port_pointer, int32_t *status);
27  void latchPWMZero(void* digital_port_pointer, int32_t *status);
28  void setPWMPeriodScale(void* digital_port_pointer, uint32_t squelchMask, int32_t *status);
29  void* allocatePWM(int32_t *status);
30  void freePWM(void* pwmGenerator, int32_t *status);
31  void setPWMRate(double rate, int32_t *status);
32  void setPWMDutyCycle(void* pwmGenerator, double dutyCycle, int32_t *status);
33  void setPWMOutputChannel(void* pwmGenerator, uint32_t pin, int32_t *status);
34 
35  void setRelayForward(void* digital_port_pointer, bool on, int32_t *status);
36  void setRelayReverse(void* digital_port_pointer, bool on, int32_t *status);
37  bool getRelayForward(void* digital_port_pointer, int32_t *status);
38  bool getRelayReverse(void* digital_port_pointer, int32_t *status);
39 
40  bool allocateDIO(void* digital_port_pointer, bool input, int32_t *status);
41  void freeDIO(void* digital_port_pointer, int32_t *status);
42  void setDIO(void* digital_port_pointer, short value, int32_t *status);
43  bool getDIO(void* digital_port_pointer, int32_t *status);
44  bool getDIODirection(void* digital_port_pointer, int32_t *status);
45  void pulse(void* digital_port_pointer, double pulseLength, int32_t *status);
46  bool isPulsing(void* digital_port_pointer, int32_t *status);
47  bool isAnyPulsing(int32_t *status);
48 
49  void setFilterSelect(void* digital_port_pointer, int filter_index,
50  int32_t* status);
51  int getFilterSelect(void* digital_port_pointer, int32_t* status);
52 
53  void setFilterPeriod(int filter_index, uint32_t value, int32_t* status);
54  uint32_t getFilterPeriod(int filter_index, int32_t* status);
55 
56  void* initializeCounter(Mode mode, uint32_t *index, int32_t *status);
57  void freeCounter(void* counter_pointer, int32_t *status);
58  void setCounterAverageSize(void* counter_pointer, int32_t size, int32_t *status);
59  void setCounterUpSource(void* counter_pointer, uint32_t pin, bool analogTrigger, int32_t *status);
60  void setCounterUpSourceEdge(void* counter_pointer, bool risingEdge, bool fallingEdge,
61  int32_t *status);
62  void clearCounterUpSource(void* counter_pointer, int32_t *status);
63  void setCounterDownSource(void* counter_pointer, uint32_t pin, bool analogTrigger, int32_t *status);
64  void setCounterDownSourceEdge(void* counter_pointer, bool risingEdge, bool fallingEdge,
65  int32_t *status);
66  void clearCounterDownSource(void* counter_pointer, int32_t *status);
67  void setCounterUpDownMode(void* counter_pointer, int32_t *status);
68  void setCounterExternalDirectionMode(void* counter_pointer, int32_t *status);
69  void setCounterSemiPeriodMode(void* counter_pointer, bool highSemiPeriod, int32_t *status);
70  void setCounterPulseLengthMode(void* counter_pointer, double threshold, int32_t *status);
71  int32_t getCounterSamplesToAverage(void* counter_pointer, int32_t *status);
72  void setCounterSamplesToAverage(void* counter_pointer, int samplesToAverage, int32_t *status);
73  void resetCounter(void* counter_pointer, int32_t *status);
74  int32_t getCounter(void* counter_pointer, int32_t *status);
75  double getCounterPeriod(void* counter_pointer, int32_t *status);
76  void setCounterMaxPeriod(void* counter_pointer, double maxPeriod, int32_t *status);
77  void setCounterUpdateWhenEmpty(void* counter_pointer, bool enabled, int32_t *status);
78  bool getCounterStopped(void* counter_pointer, int32_t *status);
79  bool getCounterDirection(void* counter_pointer, int32_t *status);
80  void setCounterReverseDirection(void* counter_pointer, bool reverseDirection, int32_t *status);
81 
82  void* initializeEncoder(uint8_t port_a_module, uint32_t port_a_pin, bool port_a_analog_trigger,
83  uint8_t port_b_module, uint32_t port_b_pin, bool port_b_analog_trigger,
84  bool reverseDirection, int32_t *index, int32_t *status); // TODO: fix routing
85  void freeEncoder(void* encoder_pointer, int32_t *status);
86  void resetEncoder(void* encoder_pointer, int32_t *status);
87  int32_t getEncoder(void* encoder_pointer, int32_t *status); // Raw value
88  double getEncoderPeriod(void* encoder_pointer, int32_t *status);
89  void setEncoderMaxPeriod(void* encoder_pointer, double maxPeriod, int32_t *status);
90  bool getEncoderStopped(void* encoder_pointer, int32_t *status);
91  bool getEncoderDirection(void* encoder_pointer, int32_t *status);
92  void setEncoderReverseDirection(void* encoder_pointer, bool reverseDirection, int32_t *status);
93  void setEncoderSamplesToAverage(void* encoder_pointer, uint32_t samplesToAverage,
94  int32_t *status);
95  uint32_t getEncoderSamplesToAverage(void* encoder_pointer, int32_t *status);
96  void setEncoderIndexSource(void *encoder_pointer, uint32_t pin, bool analogTrigger, bool activeHigh,
97  bool edgeSensitive, int32_t *status);
98 
99  uint16_t getLoopTiming(int32_t *status);
100 
101  void spiInitialize(uint8_t port, int32_t *status);
102  int32_t spiTransaction(uint8_t port, uint8_t *dataToSend, uint8_t *dataReceived, uint8_t size);
103  int32_t spiWrite(uint8_t port, uint8_t* dataToSend, uint8_t sendSize);
104  int32_t spiRead(uint8_t port, uint8_t *buffer, uint8_t count);
105  void spiClose(uint8_t port);
106  void spiSetSpeed(uint8_t port, uint32_t speed);
107  void spiSetOpts(uint8_t port, int msb_first, int sample_on_trailing, int clk_idle_high);
108  void spiSetChipSelectActiveHigh(uint8_t port, int32_t *status);
109  void spiSetChipSelectActiveLow(uint8_t port, int32_t *status);
110  int32_t spiGetHandle(uint8_t port);
111  void spiSetHandle(uint8_t port, int32_t handle);
112 
113  void spiInitAccumulator(uint8_t port, uint32_t period, uint32_t cmd,
114  uint8_t xfer_size, uint32_t valid_mask,
115  uint32_t valid_value, uint8_t data_shift,
116  uint8_t data_size, bool is_signed, bool big_endian,
117  int32_t *status);
118  void spiFreeAccumulator(uint8_t port, int32_t *status);
119  void spiResetAccumulator(uint8_t port, int32_t *status);
120  void spiSetAccumulatorCenter(uint8_t port, int32_t center, int32_t *status);
121  void spiSetAccumulatorDeadband(uint8_t port, int32_t deadband, int32_t *status);
122  int32_t spiGetAccumulatorLastValue(uint8_t port, int32_t *status);
123  int64_t spiGetAccumulatorValue(uint8_t port, int32_t *status);
124  uint32_t spiGetAccumulatorCount(uint8_t port, int32_t *status);
125  double spiGetAccumulatorAverage(uint8_t port, int32_t *status);
126  void spiGetAccumulatorOutput(uint8_t port, int64_t *value, uint32_t *count,
127  int32_t *status);
128 
129  void i2CInitialize(uint8_t port, int32_t *status);
130  int32_t i2CTransaction(uint8_t port, uint8_t deviceAddress, uint8_t *dataToSend, uint8_t sendSize, uint8_t *dataReceived, uint8_t receiveSize);
131  int32_t i2CWrite(uint8_t port, uint8_t deviceAddress, uint8_t *dataToSend, uint8_t sendSize);
132  int32_t i2CRead(uint8_t port, uint8_t deviceAddress, uint8_t *buffer, uint8_t count);
133  void i2CClose(uint8_t port);
134 
136  // double
137  void setPWMRateIntHack(int rate, int32_t *status);
138  void setPWMDutyCycleIntHack(void* pwmGenerator, int32_t dutyCycle, int32_t *status);
139 }
Definition: priority_mutex.h:22