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