Brian Silverman | 26e4e52 | 2015-12-17 01:56:40 -0500 | [diff] [blame^] | 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 | |
| 135 | //// Float JNA Hack |
| 136 | // double |
| 137 | void setPWMRateIntHack(int rate, int32_t *status); |
| 138 | void setPWMDutyCycleIntHack(void* pwmGenerator, int32_t dutyCycle, int32_t *status); |
| 139 | } |