From 6d9b3b0aaa49cff4d68ccf80491d8653d32b8f6d Mon Sep 17 00:00:00 2001 From: Thad House Date: Tue, 24 May 2016 00:58:10 -0700 Subject: [PATCH] Splits HAL Digital and Analog Headers into multiple headers (#52) The Digital and Analog headers (and the implementations, but that will be moved over later) are just too big and congested. This splits those headers, and then changes the few things that needed to be changed in WPILib to get the code working again. No function changes were made in this commit. --- hal/include/HAL/Analog.h | 86 ------------ hal/include/HAL/AnalogAccumulator.h | 16 +++ hal/include/HAL/AnalogInput.h | 27 ++++ hal/include/HAL/AnalogOutput.h | 11 ++ hal/include/HAL/AnalogTrigger.h | 28 ++++ hal/include/HAL/Counter.h | 46 +++++++ hal/include/HAL/DIO.h | 29 ++++ hal/include/HAL/Digital.h | 159 ---------------------- hal/include/HAL/Encoder.h | 26 ++++ hal/include/HAL/HAL.h | 14 +- hal/include/HAL/I2C.h | 14 ++ hal/include/HAL/PWM.h | 15 ++ hal/include/HAL/Relay.h | 11 ++ hal/include/HAL/SPI.h | 38 ++++++ hal/include/HAL/SPIAccumulator.h | 20 +++ hal/lib/athena/Analog.cpp | 5 +- hal/lib/athena/Digital.cpp | 9 +- wpilibc/athena/src/I2C.cpp | 1 - wpilibc/athena/src/SPI.cpp | 3 +- wpilibj/src/athena/cpp/lib/AnalogJNI.cpp | 5 +- wpilibj/src/athena/cpp/lib/CounterJNI.cpp | 2 +- wpilibj/src/athena/cpp/lib/DIOJNI.cpp | 3 +- wpilibj/src/athena/cpp/lib/EncoderJNI.cpp | 2 +- wpilibj/src/athena/cpp/lib/I2CJNI.cpp | 2 +- wpilibj/src/athena/cpp/lib/PWMJNI.cpp | 3 +- wpilibj/src/athena/cpp/lib/RelayJNI.cpp | 2 +- wpilibj/src/athena/cpp/lib/SPIJNI.cpp | 3 +- 27 files changed, 320 insertions(+), 260 deletions(-) delete mode 100644 hal/include/HAL/Analog.h create mode 100644 hal/include/HAL/AnalogAccumulator.h create mode 100644 hal/include/HAL/AnalogInput.h create mode 100644 hal/include/HAL/AnalogOutput.h create mode 100644 hal/include/HAL/AnalogTrigger.h create mode 100644 hal/include/HAL/Counter.h create mode 100644 hal/include/HAL/DIO.h delete mode 100644 hal/include/HAL/Digital.h create mode 100644 hal/include/HAL/Encoder.h create mode 100644 hal/include/HAL/I2C.h create mode 100644 hal/include/HAL/PWM.h create mode 100644 hal/include/HAL/Relay.h create mode 100644 hal/include/HAL/SPI.h create mode 100644 hal/include/HAL/SPIAccumulator.h diff --git a/hal/include/HAL/Analog.h b/hal/include/HAL/Analog.h deleted file mode 100644 index a4decebbe6..0000000000 --- a/hal/include/HAL/Analog.h +++ /dev/null @@ -1,86 +0,0 @@ -#pragma once - -#include - -enum AnalogTriggerType { - kInWindow = 0, - kState = 1, - kRisingPulse = 2, - kFallingPulse = 3 -}; - -extern "C" { -// Analog output functions -void* initializeAnalogOutputPort(void* port_pointer, int32_t* status); -void freeAnalogOutputPort(void* analog_port_pointer); -void setAnalogOutput(void* analog_port_pointer, double voltage, - int32_t* status); -double getAnalogOutput(void* analog_port_pointer, int32_t* status); -bool checkAnalogOutputChannel(uint32_t pin); - -// Analog input functions -void* initializeAnalogInputPort(void* port_pointer, int32_t* status); -void freeAnalogInputPort(void* analog_port_pointer); -bool checkAnalogModule(uint8_t module); -bool checkAnalogInputChannel(uint32_t pin); - -void setAnalogSampleRate(double samplesPerSecond, int32_t* status); -float getAnalogSampleRate(int32_t* status); -void setAnalogAverageBits(void* analog_port_pointer, uint32_t bits, - int32_t* status); -uint32_t getAnalogAverageBits(void* analog_port_pointer, int32_t* status); -void setAnalogOversampleBits(void* analog_port_pointer, uint32_t bits, - int32_t* status); -uint32_t getAnalogOversampleBits(void* analog_port_pointer, int32_t* status); -int16_t getAnalogValue(void* analog_port_pointer, int32_t* status); -int32_t getAnalogAverageValue(void* analog_port_pointer, int32_t* status); -int32_t getAnalogVoltsToValue(void* analog_port_pointer, double voltage, - int32_t* status); -float getAnalogVoltage(void* analog_port_pointer, int32_t* status); -float getAnalogAverageVoltage(void* analog_port_pointer, int32_t* status); -uint32_t getAnalogLSBWeight(void* analog_port_pointer, int32_t* status); -int32_t getAnalogOffset(void* analog_port_pointer, int32_t* status); - -bool isAccumulatorChannel(void* analog_port_pointer, int32_t* status); -void initAccumulator(void* analog_port_pointer, int32_t* status); -void resetAccumulator(void* analog_port_pointer, int32_t* status); -void setAccumulatorCenter(void* analog_port_pointer, int32_t center, - int32_t* status); -void setAccumulatorDeadband(void* analog_port_pointer, int32_t deadband, - int32_t* status); -int64_t getAccumulatorValue(void* analog_port_pointer, int32_t* status); -uint32_t getAccumulatorCount(void* analog_port_pointer, int32_t* status); -void getAccumulatorOutput(void* analog_port_pointer, int64_t* value, - uint32_t* count, int32_t* status); - -void* initializeAnalogTrigger(void* port_pointer, uint32_t* index, - int32_t* status); -void cleanAnalogTrigger(void* analog_trigger_pointer, int32_t* status); -void setAnalogTriggerLimitsRaw(void* analog_trigger_pointer, int32_t lower, - int32_t upper, int32_t* status); -void setAnalogTriggerLimitsVoltage(void* analog_trigger_pointer, double lower, - double upper, int32_t* status); -void setAnalogTriggerAveraged(void* analog_trigger_pointer, - bool useAveragedValue, int32_t* status); -void setAnalogTriggerFiltered(void* analog_trigger_pointer, - bool useFilteredValue, int32_t* status); -bool getAnalogTriggerInWindow(void* analog_trigger_pointer, int32_t* status); -bool getAnalogTriggerTriggerState(void* analog_trigger_pointer, - int32_t* status); -bool getAnalogTriggerOutput(void* analog_trigger_pointer, - AnalogTriggerType type, int32_t* status); - -//// Float JNA Hack -// Float -int getAnalogSampleRateIntHack(int32_t* status); -int getAnalogVoltageIntHack(void* analog_port_pointer, int32_t* status); -int getAnalogAverageVoltageIntHack(void* analog_port_pointer, int32_t* status); - -// Doubles -void setAnalogSampleRateIntHack(int samplesPerSecond, int32_t* status); -int32_t getAnalogVoltsToValueIntHack(void* analog_port_pointer, int voltage, - int32_t* status); -void setAnalogTriggerLimitsVoltageIntHack(void* analog_trigger_pointer, - int lower, int upper, - int32_t* status); -} diff --git a/hal/include/HAL/AnalogAccumulator.h b/hal/include/HAL/AnalogAccumulator.h new file mode 100644 index 0000000000..612bd2944c --- /dev/null +++ b/hal/include/HAL/AnalogAccumulator.h @@ -0,0 +1,16 @@ +#pragma once +#include + +extern "C" { +bool isAccumulatorChannel(void* analog_port_pointer, int32_t* status); +void initAccumulator(void* analog_port_pointer, int32_t* status); +void resetAccumulator(void* analog_port_pointer, int32_t* status); +void setAccumulatorCenter(void* analog_port_pointer, int32_t center, + int32_t* status); +void setAccumulatorDeadband(void* analog_port_pointer, int32_t deadband, + int32_t* status); +int64_t getAccumulatorValue(void* analog_port_pointer, int32_t* status); +uint32_t getAccumulatorCount(void* analog_port_pointer, int32_t* status); +void getAccumulatorOutput(void* analog_port_pointer, int64_t* value, + uint32_t* count, int32_t* status); +} diff --git a/hal/include/HAL/AnalogInput.h b/hal/include/HAL/AnalogInput.h new file mode 100644 index 0000000000..1033676a1d --- /dev/null +++ b/hal/include/HAL/AnalogInput.h @@ -0,0 +1,27 @@ +#pragma once +#include + +extern "C" { +// Analog input functions +void* initializeAnalogInputPort(void* port_pointer, int32_t* status); +void freeAnalogInputPort(void* analog_port_pointer); +bool checkAnalogModule(uint8_t module); +bool checkAnalogInputChannel(uint32_t pin); + +void setAnalogSampleRate(double samplesPerSecond, int32_t* status); +float getAnalogSampleRate(int32_t* status); +void setAnalogAverageBits(void* analog_port_pointer, uint32_t bits, + int32_t* status); +uint32_t getAnalogAverageBits(void* analog_port_pointer, int32_t* status); +void setAnalogOversampleBits(void* analog_port_pointer, uint32_t bits, + int32_t* status); +uint32_t getAnalogOversampleBits(void* analog_port_pointer, int32_t* status); +int16_t getAnalogValue(void* analog_port_pointer, int32_t* status); +int32_t getAnalogAverageValue(void* analog_port_pointer, int32_t* status); +int32_t getAnalogVoltsToValue(void* analog_port_pointer, double voltage, + int32_t* status); +float getAnalogVoltage(void* analog_port_pointer, int32_t* status); +float getAnalogAverageVoltage(void* analog_port_pointer, int32_t* status); +uint32_t getAnalogLSBWeight(void* analog_port_pointer, int32_t* status); +int32_t getAnalogOffset(void* analog_port_pointer, int32_t* status); +} diff --git a/hal/include/HAL/AnalogOutput.h b/hal/include/HAL/AnalogOutput.h new file mode 100644 index 0000000000..c6ab590388 --- /dev/null +++ b/hal/include/HAL/AnalogOutput.h @@ -0,0 +1,11 @@ +#pragma once +#include + +extern "C" { +void* initializeAnalogOutputPort(void* port_pointer, int32_t* status); +void freeAnalogOutputPort(void* analog_port_pointer); +void setAnalogOutput(void* analog_port_pointer, double voltage, + int32_t* status); +double getAnalogOutput(void* analog_port_pointer, int32_t* status); +bool checkAnalogOutputChannel(uint32_t pin); +} diff --git a/hal/include/HAL/AnalogTrigger.h b/hal/include/HAL/AnalogTrigger.h new file mode 100644 index 0000000000..38a4143d2d --- /dev/null +++ b/hal/include/HAL/AnalogTrigger.h @@ -0,0 +1,28 @@ +#pragma once +#include + +enum AnalogTriggerType { + kInWindow = 0, + kState = 1, + kRisingPulse = 2, + kFallingPulse = 3 +}; + +extern "C" { +void* initializeAnalogTrigger(void* port_pointer, uint32_t* index, + int32_t* status); +void cleanAnalogTrigger(void* analog_trigger_pointer, int32_t* status); +void setAnalogTriggerLimitsRaw(void* analog_trigger_pointer, int32_t lower, + int32_t upper, int32_t* status); +void setAnalogTriggerLimitsVoltage(void* analog_trigger_pointer, double lower, + double upper, int32_t* status); +void setAnalogTriggerAveraged(void* analog_trigger_pointer, + bool useAveragedValue, int32_t* status); +void setAnalogTriggerFiltered(void* analog_trigger_pointer, + bool useFilteredValue, int32_t* status); +bool getAnalogTriggerInWindow(void* analog_trigger_pointer, int32_t* status); +bool getAnalogTriggerTriggerState(void* analog_trigger_pointer, + int32_t* status); +bool getAnalogTriggerOutput(void* analog_trigger_pointer, + AnalogTriggerType type, int32_t* status); +} diff --git a/hal/include/HAL/Counter.h b/hal/include/HAL/Counter.h new file mode 100644 index 0000000000..2a72bb0cf6 --- /dev/null +++ b/hal/include/HAL/Counter.h @@ -0,0 +1,46 @@ +#pragma once +#include + +enum Mode { + kTwoPulse = 0, + kSemiperiod = 1, + kPulseLength = 2, + kExternalDirection = 3 +}; + +extern "C" { +void* initializeCounter(Mode mode, uint32_t* index, int32_t* status); +void freeCounter(void* counter_pointer, int32_t* status); +void setCounterAverageSize(void* counter_pointer, int32_t size, + int32_t* status); +void setCounterUpSource(void* counter_pointer, uint32_t pin, bool analogTrigger, + int32_t* status); +void setCounterUpSourceEdge(void* counter_pointer, bool risingEdge, + bool fallingEdge, int32_t* status); +void clearCounterUpSource(void* counter_pointer, int32_t* status); +void setCounterDownSource(void* counter_pointer, uint32_t pin, + bool analogTrigger, int32_t* status); +void setCounterDownSourceEdge(void* counter_pointer, bool risingEdge, + bool fallingEdge, int32_t* status); +void clearCounterDownSource(void* counter_pointer, int32_t* status); +void setCounterUpDownMode(void* counter_pointer, int32_t* status); +void setCounterExternalDirectionMode(void* counter_pointer, int32_t* status); +void setCounterSemiPeriodMode(void* counter_pointer, bool highSemiPeriod, + int32_t* status); +void setCounterPulseLengthMode(void* counter_pointer, double threshold, + int32_t* status); +int32_t getCounterSamplesToAverage(void* counter_pointer, int32_t* status); +void setCounterSamplesToAverage(void* counter_pointer, int samplesToAverage, + int32_t* status); +void resetCounter(void* counter_pointer, int32_t* status); +int32_t getCounter(void* counter_pointer, int32_t* status); +double getCounterPeriod(void* counter_pointer, int32_t* status); +void setCounterMaxPeriod(void* counter_pointer, double maxPeriod, + int32_t* status); +void setCounterUpdateWhenEmpty(void* counter_pointer, bool enabled, + int32_t* status); +bool getCounterStopped(void* counter_pointer, int32_t* status); +bool getCounterDirection(void* counter_pointer, int32_t* status); +void setCounterReverseDirection(void* counter_pointer, bool reverseDirection, + int32_t* status); +} diff --git a/hal/include/HAL/DIO.h b/hal/include/HAL/DIO.h new file mode 100644 index 0000000000..d161279673 --- /dev/null +++ b/hal/include/HAL/DIO.h @@ -0,0 +1,29 @@ +#pragma once +#include + +extern "C" { +void* initializeDigitalPort(void* port_pointer, int32_t* status); +void freeDigitalPort(void* digital_port_pointer); + +void* allocatePWM(int32_t* status); +void freePWM(void* pwmGenerator, int32_t* status); +void setPWMRate(double rate, int32_t* status); +void setPWMDutyCycle(void* pwmGenerator, double dutyCycle, int32_t* status); +void setPWMOutputChannel(void* pwmGenerator, uint32_t pin, int32_t* status); + +bool allocateDIO(void* digital_port_pointer, bool input, int32_t* status); +void freeDIO(void* digital_port_pointer, int32_t* status); +void setDIO(void* digital_port_pointer, short value, int32_t* status); +bool getDIO(void* digital_port_pointer, int32_t* status); +bool getDIODirection(void* digital_port_pointer, int32_t* status); +void pulse(void* digital_port_pointer, double pulseLength, int32_t* status); +bool isPulsing(void* digital_port_pointer, int32_t* status); +bool isAnyPulsing(int32_t* status); + +void setFilterSelect(void* digital_port_pointer, int filter_index, + int32_t* status); +int getFilterSelect(void* digital_port_pointer, int32_t* status); + +void setFilterPeriod(int filter_index, uint32_t value, int32_t* status); +uint32_t getFilterPeriod(int filter_index, int32_t* status); +} diff --git a/hal/include/HAL/Digital.h b/hal/include/HAL/Digital.h deleted file mode 100644 index 7f580209da..0000000000 --- a/hal/include/HAL/Digital.h +++ /dev/null @@ -1,159 +0,0 @@ -#pragma once -#include - -#include "HAL/cpp/priority_mutex.h" - -enum Mode { - kTwoPulse = 0, - kSemiperiod = 1, - kPulseLength = 2, - kExternalDirection = 3 -}; - -priority_recursive_mutex& spiGetSemaphore(uint8_t port); - -extern "C" { -void* initializeDigitalPort(void* port_pointer, int32_t* status); -void freeDigitalPort(void* digital_port_pointer); -bool checkPWMChannel(void* digital_port_pointer); -bool checkRelayChannel(void* digital_port_pointer); - -void setPWM(void* digital_port_pointer, unsigned short value, int32_t* status); -bool allocatePWMChannel(void* digital_port_pointer, int32_t* status); -void freePWMChannel(void* digital_port_pointer, int32_t* status); -unsigned short getPWM(void* digital_port_pointer, int32_t* status); -void latchPWMZero(void* digital_port_pointer, int32_t* status); -void setPWMPeriodScale(void* digital_port_pointer, uint32_t squelchMask, - int32_t* status); -void* allocatePWM(int32_t* status); -void freePWM(void* pwmGenerator, int32_t* status); -void setPWMRate(double rate, int32_t* status); -void setPWMDutyCycle(void* pwmGenerator, double dutyCycle, int32_t* status); -void setPWMOutputChannel(void* pwmGenerator, uint32_t pin, int32_t* status); - -void setRelayForward(void* digital_port_pointer, bool on, int32_t* status); -void setRelayReverse(void* digital_port_pointer, bool on, int32_t* status); -bool getRelayForward(void* digital_port_pointer, int32_t* status); -bool getRelayReverse(void* digital_port_pointer, int32_t* status); - -bool allocateDIO(void* digital_port_pointer, bool input, int32_t* status); -void freeDIO(void* digital_port_pointer, int32_t* status); -void setDIO(void* digital_port_pointer, short value, int32_t* status); -bool getDIO(void* digital_port_pointer, int32_t* status); -bool getDIODirection(void* digital_port_pointer, int32_t* status); -void pulse(void* digital_port_pointer, double pulseLength, int32_t* status); -bool isPulsing(void* digital_port_pointer, int32_t* status); -bool isAnyPulsing(int32_t* status); - -void setFilterSelect(void* digital_port_pointer, int filter_index, - int32_t* status); -int getFilterSelect(void* digital_port_pointer, int32_t* status); - -void setFilterPeriod(int filter_index, uint32_t value, int32_t* status); -uint32_t getFilterPeriod(int filter_index, int32_t* status); - -void* initializeCounter(Mode mode, uint32_t* index, int32_t* status); -void freeCounter(void* counter_pointer, int32_t* status); -void setCounterAverageSize(void* counter_pointer, int32_t size, - int32_t* status); -void setCounterUpSource(void* counter_pointer, uint32_t pin, bool analogTrigger, - int32_t* status); -void setCounterUpSourceEdge(void* counter_pointer, bool risingEdge, - bool fallingEdge, int32_t* status); -void clearCounterUpSource(void* counter_pointer, int32_t* status); -void setCounterDownSource(void* counter_pointer, uint32_t pin, - bool analogTrigger, int32_t* status); -void setCounterDownSourceEdge(void* counter_pointer, bool risingEdge, - bool fallingEdge, int32_t* status); -void clearCounterDownSource(void* counter_pointer, int32_t* status); -void setCounterUpDownMode(void* counter_pointer, int32_t* status); -void setCounterExternalDirectionMode(void* counter_pointer, int32_t* status); -void setCounterSemiPeriodMode(void* counter_pointer, bool highSemiPeriod, - int32_t* status); -void setCounterPulseLengthMode(void* counter_pointer, double threshold, - int32_t* status); -int32_t getCounterSamplesToAverage(void* counter_pointer, int32_t* status); -void setCounterSamplesToAverage(void* counter_pointer, int samplesToAverage, - int32_t* status); -void resetCounter(void* counter_pointer, int32_t* status); -int32_t getCounter(void* counter_pointer, int32_t* status); -double getCounterPeriod(void* counter_pointer, int32_t* status); -void setCounterMaxPeriod(void* counter_pointer, double maxPeriod, - int32_t* status); -void setCounterUpdateWhenEmpty(void* counter_pointer, bool enabled, - int32_t* status); -bool getCounterStopped(void* counter_pointer, int32_t* status); -bool getCounterDirection(void* counter_pointer, int32_t* status); -void setCounterReverseDirection(void* counter_pointer, bool reverseDirection, - int32_t* status); - -void* initializeEncoder(uint8_t port_a_module, uint32_t port_a_pin, - bool port_a_analog_trigger, uint8_t port_b_module, - uint32_t port_b_pin, bool port_b_analog_trigger, - bool reverseDirection, int32_t* index, - int32_t* status); // TODO: fix routing -void freeEncoder(void* encoder_pointer, int32_t* status); -void resetEncoder(void* encoder_pointer, int32_t* status); -int32_t getEncoder(void* encoder_pointer, int32_t* status); // Raw value -double getEncoderPeriod(void* encoder_pointer, int32_t* status); -void setEncoderMaxPeriod(void* encoder_pointer, double maxPeriod, - int32_t* status); -bool getEncoderStopped(void* encoder_pointer, int32_t* status); -bool getEncoderDirection(void* encoder_pointer, int32_t* status); -void setEncoderReverseDirection(void* encoder_pointer, bool reverseDirection, - int32_t* status); -void setEncoderSamplesToAverage(void* encoder_pointer, - uint32_t samplesToAverage, int32_t* status); -uint32_t getEncoderSamplesToAverage(void* encoder_pointer, int32_t* status); -void setEncoderIndexSource(void* encoder_pointer, uint32_t pin, - bool analogTrigger, bool activeHigh, - bool edgeSensitive, int32_t* status); - -uint16_t getLoopTiming(int32_t* status); - -void spiInitialize(uint8_t port, int32_t* status); -int32_t spiTransaction(uint8_t port, uint8_t* dataToSend, uint8_t* dataReceived, - uint8_t size); -int32_t spiWrite(uint8_t port, uint8_t* dataToSend, uint8_t sendSize); -int32_t spiRead(uint8_t port, uint8_t* buffer, uint8_t count); -void spiClose(uint8_t port); -void spiSetSpeed(uint8_t port, uint32_t speed); -void spiSetOpts(uint8_t port, int msb_first, int sample_on_trailing, - int clk_idle_high); -void spiSetChipSelectActiveHigh(uint8_t port, int32_t* status); -void spiSetChipSelectActiveLow(uint8_t port, int32_t* status); -int32_t spiGetHandle(uint8_t port); -void spiSetHandle(uint8_t port, int32_t handle); - -void spiInitAccumulator(uint8_t port, uint32_t period, uint32_t cmd, - uint8_t xfer_size, uint32_t valid_mask, - uint32_t valid_value, uint8_t data_shift, - uint8_t data_size, bool is_signed, bool big_endian, - int32_t* status); -void spiFreeAccumulator(uint8_t port, int32_t* status); -void spiResetAccumulator(uint8_t port, int32_t* status); -void spiSetAccumulatorCenter(uint8_t port, int32_t center, int32_t* status); -void spiSetAccumulatorDeadband(uint8_t port, int32_t deadband, int32_t* status); -int32_t spiGetAccumulatorLastValue(uint8_t port, int32_t* status); -int64_t spiGetAccumulatorValue(uint8_t port, int32_t* status); -uint32_t spiGetAccumulatorCount(uint8_t port, int32_t* status); -double spiGetAccumulatorAverage(uint8_t port, int32_t* status); -void spiGetAccumulatorOutput(uint8_t port, int64_t* value, uint32_t* count, - int32_t* status); - -void i2CInitialize(uint8_t port, int32_t* status); -int32_t i2CTransaction(uint8_t port, uint8_t deviceAddress, uint8_t* dataToSend, - uint8_t sendSize, uint8_t* dataReceived, - uint8_t receiveSize); -int32_t i2CWrite(uint8_t port, uint8_t deviceAddress, uint8_t* dataToSend, - uint8_t sendSize); -int32_t i2CRead(uint8_t port, uint8_t deviceAddress, uint8_t* buffer, - uint8_t count); -void i2CClose(uint8_t port); - -//// Float JNA Hack -// double -void setPWMRateIntHack(int rate, int32_t* status); -void setPWMDutyCycleIntHack(void* pwmGenerator, int32_t dutyCycle, - int32_t* status); -} diff --git a/hal/include/HAL/Encoder.h b/hal/include/HAL/Encoder.h new file mode 100644 index 0000000000..8d314c358f --- /dev/null +++ b/hal/include/HAL/Encoder.h @@ -0,0 +1,26 @@ +#pragma once +#include + +extern "C" { +void* initializeEncoder(uint8_t port_a_module, uint32_t port_a_pin, + bool port_a_analog_trigger, uint8_t port_b_module, + uint32_t port_b_pin, bool port_b_analog_trigger, + bool reverseDirection, int32_t* index, + int32_t* status); // TODO: fix routing +void freeEncoder(void* encoder_pointer, int32_t* status); +void resetEncoder(void* encoder_pointer, int32_t* status); +int32_t getEncoder(void* encoder_pointer, int32_t* status); // Raw value +double getEncoderPeriod(void* encoder_pointer, int32_t* status); +void setEncoderMaxPeriod(void* encoder_pointer, double maxPeriod, + int32_t* status); +bool getEncoderStopped(void* encoder_pointer, int32_t* status); +bool getEncoderDirection(void* encoder_pointer, int32_t* status); +void setEncoderReverseDirection(void* encoder_pointer, bool reverseDirection, + int32_t* status); +void setEncoderSamplesToAverage(void* encoder_pointer, + uint32_t samplesToAverage, int32_t* status); +uint32_t getEncoderSamplesToAverage(void* encoder_pointer, int32_t* status); +void setEncoderIndexSource(void* encoder_pointer, uint32_t pin, + bool analogTrigger, bool activeHigh, + bool edgeSensitive, int32_t* status); +} diff --git a/hal/include/HAL/HAL.h b/hal/include/HAL/HAL.h index 4de94aae89..8bd2a4d6a1 100644 --- a/hal/include/HAL/HAL.h +++ b/hal/include/HAL/HAL.h @@ -9,14 +9,24 @@ #include #include "Accelerometer.h" -#include "Analog.h" +#include "AnalogAccumulator.h" +#include "AnalogInput.h" +#include "AnalogOutput.h" +#include "AnalogTrigger.h" #include "Compressor.h" -#include "Digital.h" +#include "Counter.h" +#include "DIO.h" +#include "Encoder.h" #include "Errors.h" +#include "I2C.h" #include "Interrupts.h" #include "Notifier.h" #include "PDP.h" +#include "PWM.h" #include "Power.h" +#include "Relay.h" +#include "SPI.h" +#include "SPIAccumulator.h" #include "SerialPort.h" #include "Solenoid.h" diff --git a/hal/include/HAL/I2C.h b/hal/include/HAL/I2C.h new file mode 100644 index 0000000000..9ebf463d6a --- /dev/null +++ b/hal/include/HAL/I2C.h @@ -0,0 +1,14 @@ +#pragma once +#include + +extern "C" { +void i2CInitialize(uint8_t port, int32_t* status); +int32_t i2CTransaction(uint8_t port, uint8_t deviceAddress, uint8_t* dataToSend, + uint8_t sendSize, uint8_t* dataReceived, + uint8_t receiveSize); +int32_t i2CWrite(uint8_t port, uint8_t deviceAddress, uint8_t* dataToSend, + uint8_t sendSize); +int32_t i2CRead(uint8_t port, uint8_t deviceAddress, uint8_t* buffer, + uint8_t count); +void i2CClose(uint8_t port); +} diff --git a/hal/include/HAL/PWM.h b/hal/include/HAL/PWM.h new file mode 100644 index 0000000000..693386182d --- /dev/null +++ b/hal/include/HAL/PWM.h @@ -0,0 +1,15 @@ +#pragma once +#include + +extern "C" { +bool checkPWMChannel(void* digital_port_pointer); + +void setPWM(void* digital_port_pointer, unsigned short value, int32_t* status); +bool allocatePWMChannel(void* digital_port_pointer, int32_t* status); +void freePWMChannel(void* digital_port_pointer, int32_t* status); +unsigned short getPWM(void* digital_port_pointer, int32_t* status); +void latchPWMZero(void* digital_port_pointer, int32_t* status); +void setPWMPeriodScale(void* digital_port_pointer, uint32_t squelchMask, + int32_t* status); +uint16_t getLoopTiming(int32_t* status); +} diff --git a/hal/include/HAL/Relay.h b/hal/include/HAL/Relay.h new file mode 100644 index 0000000000..b6b4ae59c5 --- /dev/null +++ b/hal/include/HAL/Relay.h @@ -0,0 +1,11 @@ +#pragma once +#include + +extern "C" { +bool checkRelayChannel(void* digital_port_pointer); + +void setRelayForward(void* digital_port_pointer, bool on, int32_t* status); +void setRelayReverse(void* digital_port_pointer, bool on, int32_t* status); +bool getRelayForward(void* digital_port_pointer, int32_t* status); +bool getRelayReverse(void* digital_port_pointer, int32_t* status); +} diff --git a/hal/include/HAL/SPI.h b/hal/include/HAL/SPI.h new file mode 100644 index 0000000000..30f17d8d1f --- /dev/null +++ b/hal/include/HAL/SPI.h @@ -0,0 +1,38 @@ +#pragma once +#include + +#include "HAL/cpp/priority_mutex.h" + +priority_recursive_mutex& spiGetSemaphore(uint8_t port); + +extern "C" { +void spiInitialize(uint8_t port, int32_t* status); +int32_t spiTransaction(uint8_t port, uint8_t* dataToSend, uint8_t* dataReceived, + uint8_t size); +int32_t spiWrite(uint8_t port, uint8_t* dataToSend, uint8_t sendSize); +int32_t spiRead(uint8_t port, uint8_t* buffer, uint8_t count); +void spiClose(uint8_t port); +void spiSetSpeed(uint8_t port, uint32_t speed); +void spiSetOpts(uint8_t port, int msb_first, int sample_on_trailing, + int clk_idle_high); +void spiSetChipSelectActiveHigh(uint8_t port, int32_t* status); +void spiSetChipSelectActiveLow(uint8_t port, int32_t* status); +int32_t spiGetHandle(uint8_t port); +void spiSetHandle(uint8_t port, int32_t handle); + +void spiInitAccumulator(uint8_t port, uint32_t period, uint32_t cmd, + uint8_t xfer_size, uint32_t valid_mask, + uint32_t valid_value, uint8_t data_shift, + uint8_t data_size, bool is_signed, bool big_endian, + int32_t* status); +void spiFreeAccumulator(uint8_t port, int32_t* status); +void spiResetAccumulator(uint8_t port, int32_t* status); +void spiSetAccumulatorCenter(uint8_t port, int32_t center, int32_t* status); +void spiSetAccumulatorDeadband(uint8_t port, int32_t deadband, int32_t* status); +int32_t spiGetAccumulatorLastValue(uint8_t port, int32_t* status); +int64_t spiGetAccumulatorValue(uint8_t port, int32_t* status); +uint32_t spiGetAccumulatorCount(uint8_t port, int32_t* status); +double spiGetAccumulatorAverage(uint8_t port, int32_t* status); +void spiGetAccumulatorOutput(uint8_t port, int64_t* value, uint32_t* count, + int32_t* status); +} diff --git a/hal/include/HAL/SPIAccumulator.h b/hal/include/HAL/SPIAccumulator.h new file mode 100644 index 0000000000..881f1eb11e --- /dev/null +++ b/hal/include/HAL/SPIAccumulator.h @@ -0,0 +1,20 @@ +#pragma once +#include + +extern "C" { +void spiInitAccumulator(uint8_t port, uint32_t period, uint32_t cmd, + uint8_t xfer_size, uint32_t valid_mask, + uint32_t valid_value, uint8_t data_shift, + uint8_t data_size, bool is_signed, bool big_endian, + int32_t* status); +void spiFreeAccumulator(uint8_t port, int32_t* status); +void spiResetAccumulator(uint8_t port, int32_t* status); +void spiSetAccumulatorCenter(uint8_t port, int32_t center, int32_t* status); +void spiSetAccumulatorDeadband(uint8_t port, int32_t deadband, int32_t* status); +int32_t spiGetAccumulatorLastValue(uint8_t port, int32_t* status); +int64_t spiGetAccumulatorValue(uint8_t port, int32_t* status); +uint32_t spiGetAccumulatorCount(uint8_t port, int32_t* status); +double spiGetAccumulatorAverage(uint8_t port, int32_t* status); +void spiGetAccumulatorOutput(uint8_t port, int64_t* value, uint32_t* count, + int32_t* status); +} diff --git a/hal/lib/athena/Analog.cpp b/hal/lib/athena/Analog.cpp index 1e56f536b1..1f27c92968 100644 --- a/hal/lib/athena/Analog.cpp +++ b/hal/lib/athena/Analog.cpp @@ -5,7 +5,10 @@ /* the project. */ /*----------------------------------------------------------------------------*/ -#include "HAL/Analog.h" +#include "HAL/AnalogAccumulator.h" +#include "HAL/AnalogInput.h" +#include "HAL/AnalogOutput.h" +#include "HAL/AnalogTrigger.h" #include "ChipObject.h" #include "FRC_NetworkCommunication/AICalibration.h" diff --git a/hal/lib/athena/Digital.cpp b/hal/lib/athena/Digital.cpp index 33f1793b2f..7097a61164 100644 --- a/hal/lib/athena/Digital.cpp +++ b/hal/lib/athena/Digital.cpp @@ -5,7 +5,14 @@ /* the project. */ /*----------------------------------------------------------------------------*/ -#include "HAL/Digital.h" +#include "HAL/Counter.h" +#include "HAL/DIO.h" +#include "HAL/Encoder.h" +#include "HAL/I2C.h" +#include "HAL/PWM.h" +#include "HAL/Relay.h" +#include "HAL/SPI.h" +#include "HAL/SPIAccumulator.h" #include #include diff --git a/wpilibc/athena/src/I2C.cpp b/wpilibc/athena/src/I2C.cpp index a356d0a70e..7faa1d2cbe 100644 --- a/wpilibc/athena/src/I2C.cpp +++ b/wpilibc/athena/src/I2C.cpp @@ -6,7 +6,6 @@ /*----------------------------------------------------------------------------*/ #include "I2C.h" -#include "HAL/Digital.h" #include "HAL/HAL.h" #include "WPIErrors.h" diff --git a/wpilibc/athena/src/SPI.cpp b/wpilibc/athena/src/SPI.cpp index b639c0d207..5a6f37c180 100644 --- a/wpilibc/athena/src/SPI.cpp +++ b/wpilibc/athena/src/SPI.cpp @@ -6,8 +6,7 @@ /*----------------------------------------------------------------------------*/ #include "SPI.h" - -#include "HAL/Digital.h" +#include "HAL/HAL.h" #include "WPIErrors.h" #include diff --git a/wpilibj/src/athena/cpp/lib/AnalogJNI.cpp b/wpilibj/src/athena/cpp/lib/AnalogJNI.cpp index 22033fb7e8..7db511c7c7 100644 --- a/wpilibj/src/athena/cpp/lib/AnalogJNI.cpp +++ b/wpilibj/src/athena/cpp/lib/AnalogJNI.cpp @@ -11,7 +11,10 @@ #include "edu_wpi_first_wpilibj_hal_AnalogJNI.h" -#include "HAL/Analog.h" +#include "HAL/AnalogInput.h" +#include "HAL/AnalogOutput.h" +#include "HAL/AnalogAccumulator.h" +#include "HAL/AnalogTrigger.h" #include "HALUtil.h" // set the logging level diff --git a/wpilibj/src/athena/cpp/lib/CounterJNI.cpp b/wpilibj/src/athena/cpp/lib/CounterJNI.cpp index 6b9705bba9..0833b49a20 100644 --- a/wpilibj/src/athena/cpp/lib/CounterJNI.cpp +++ b/wpilibj/src/athena/cpp/lib/CounterJNI.cpp @@ -11,7 +11,7 @@ #include "edu_wpi_first_wpilibj_hal_CounterJNI.h" -#include "HAL/Digital.h" +#include "HAL/Counter.h" #include "HAL/Errors.h" #include "HALUtil.h" diff --git a/wpilibj/src/athena/cpp/lib/DIOJNI.cpp b/wpilibj/src/athena/cpp/lib/DIOJNI.cpp index 7d307c4de0..7ec7acba75 100644 --- a/wpilibj/src/athena/cpp/lib/DIOJNI.cpp +++ b/wpilibj/src/athena/cpp/lib/DIOJNI.cpp @@ -11,7 +11,8 @@ #include "edu_wpi_first_wpilibj_hal_DIOJNI.h" -#include "HAL/Digital.h" +#include "HAL/DIO.h" +#include "HAL/PWM.h" #include "HALUtil.h" // set the logging level diff --git a/wpilibj/src/athena/cpp/lib/EncoderJNI.cpp b/wpilibj/src/athena/cpp/lib/EncoderJNI.cpp index a4e194b86f..d222ed50d0 100644 --- a/wpilibj/src/athena/cpp/lib/EncoderJNI.cpp +++ b/wpilibj/src/athena/cpp/lib/EncoderJNI.cpp @@ -11,7 +11,7 @@ #include "edu_wpi_first_wpilibj_hal_EncoderJNI.h" -#include "HAL/Digital.h" +#include "HAL/Encoder.h" #include "HAL/Errors.h" #include "HALUtil.h" diff --git a/wpilibj/src/athena/cpp/lib/I2CJNI.cpp b/wpilibj/src/athena/cpp/lib/I2CJNI.cpp index 00e071ce31..7d8a9e0174 100644 --- a/wpilibj/src/athena/cpp/lib/I2CJNI.cpp +++ b/wpilibj/src/athena/cpp/lib/I2CJNI.cpp @@ -11,7 +11,7 @@ #include "edu_wpi_first_wpilibj_hal_I2CJNI.h" -#include "HAL/Digital.h" +#include "HAL/I2C.h" #include "HALUtil.h" // set the logging level diff --git a/wpilibj/src/athena/cpp/lib/PWMJNI.cpp b/wpilibj/src/athena/cpp/lib/PWMJNI.cpp index 3bcce97bf9..6ca72e952b 100644 --- a/wpilibj/src/athena/cpp/lib/PWMJNI.cpp +++ b/wpilibj/src/athena/cpp/lib/PWMJNI.cpp @@ -11,7 +11,8 @@ #include "edu_wpi_first_wpilibj_hal_PWMJNI.h" -#include "HAL/Digital.h" +#include "HAL/DIO.h" +#include "HAL/PWM.h" #include "HALUtil.h" // set the logging level diff --git a/wpilibj/src/athena/cpp/lib/RelayJNI.cpp b/wpilibj/src/athena/cpp/lib/RelayJNI.cpp index 88c03b6ba1..7a8d343b6a 100644 --- a/wpilibj/src/athena/cpp/lib/RelayJNI.cpp +++ b/wpilibj/src/athena/cpp/lib/RelayJNI.cpp @@ -11,7 +11,7 @@ #include "edu_wpi_first_wpilibj_hal_RelayJNI.h" -#include "HAL/Digital.h" +#include "HAL/Relay.h" #include "HALUtil.h" // set the logging level diff --git a/wpilibj/src/athena/cpp/lib/SPIJNI.cpp b/wpilibj/src/athena/cpp/lib/SPIJNI.cpp index 8fb00ec70b..e252eb6214 100644 --- a/wpilibj/src/athena/cpp/lib/SPIJNI.cpp +++ b/wpilibj/src/athena/cpp/lib/SPIJNI.cpp @@ -11,7 +11,8 @@ #include "edu_wpi_first_wpilibj_hal_SPIJNI.h" -#include "HAL/Digital.h" +#include "HAL/SPI.h" +#include "HAL/SPIAccumulator.h" #include "HALUtil.h" // set the logging level