Squashed 'third_party/allwpilib_2016/' content from commit 7f61816

Change-Id: If9d9245880859cdf580f5d7f77045135d0521ce7
git-subtree-dir: third_party/allwpilib_2016
git-subtree-split: 7f618166ed253a24629934fcf89c3decb0528a3b
diff --git a/hal/include/HAL/Analog.hpp b/hal/include/HAL/Analog.hpp
new file mode 100644
index 0000000..2aa5e43
--- /dev/null
+++ b/hal/include/HAL/Analog.hpp
@@ -0,0 +1,78 @@
+#pragma once
+
+#include <stdint.h>
+
+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);
+}