diff --git a/hal/include/HAL/Digital.hpp b/hal/include/HAL/Digital.hpp
new file mode 100644
index 0000000..64851f1
--- /dev/null
+++ b/hal/include/HAL/Digital.hpp
@@ -0,0 +1,139 @@
+#pragma once
+#include <stdint.h>
+
+#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);
+}
