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/lib/Shared/HAL.cpp b/hal/lib/Shared/HAL.cpp
new file mode 100644
index 0000000..9781278
--- /dev/null
+++ b/hal/lib/Shared/HAL.cpp
@@ -0,0 +1,128 @@
+//This file must compile on ALL PLATFORMS. Be very careful what you put in here.
+#include "HAL/HAL.hpp"
+#include "FRC_NetworkCommunication/FRCComm.h"
+#include <cstring>
+
+int HALGetControlWord(HALControlWord *data)
+{
+ return FRC_NetworkCommunication_getControlWord((ControlWord_t*) data);
+}
+
+void HALSetNewDataSem(MULTIWAIT_ID sem)
+{
+ setNewDataSem(sem->native_handle());
+}
+
+int HALGetAllianceStation(enum HALAllianceStationID *allianceStation)
+{
+ return FRC_NetworkCommunication_getAllianceStation((AllianceStationID_t*) allianceStation);
+}
+
+int HALGetJoystickAxes(uint8_t joystickNum, HALJoystickAxes *axes)
+{
+ return FRC_NetworkCommunication_getJoystickAxes(joystickNum, (JoystickAxes_t*) axes, kMaxJoystickAxes);
+}
+
+int HALGetJoystickPOVs(uint8_t joystickNum, HALJoystickPOVs *povs)
+{
+ return FRC_NetworkCommunication_getJoystickPOVs(joystickNum, (JoystickPOV_t*) povs, kMaxJoystickPOVs);
+}
+
+int HALGetJoystickButtons(uint8_t joystickNum, HALJoystickButtons *buttons)
+{
+ return FRC_NetworkCommunication_getJoystickButtons(joystickNum, &buttons->buttons, &buttons->count);
+}
+
+int HALGetJoystickDescriptor(uint8_t joystickNum, HALJoystickDescriptor *desc)
+{
+ return FRC_NetworkCommunication_getJoystickDesc(joystickNum, &desc->isXbox, &desc->type, (char *)(&desc->name),
+ &desc->axisCount, (uint8_t *)&desc->axisTypes, &desc->buttonCount, &desc->povCount);
+}
+
+int HALGetJoystickIsXbox(uint8_t joystickNum)
+{
+ HALJoystickDescriptor joystickDesc;
+ if(HALGetJoystickDescriptor(joystickNum, &joystickDesc)<0)
+ {
+ return 0;
+ }else
+ {
+ return joystickDesc.isXbox;
+ }
+}
+
+int HALGetJoystickType(uint8_t joystickNum)
+{
+ HALJoystickDescriptor joystickDesc;
+ if(HALGetJoystickDescriptor(joystickNum, &joystickDesc)<0)
+ {
+ return -1;
+ } else
+ {
+ return joystickDesc.type;
+ }
+}
+
+char* HALGetJoystickName(uint8_t joystickNum)
+{
+ HALJoystickDescriptor joystickDesc;
+ if(HALGetJoystickDescriptor(joystickNum, &joystickDesc)<0)
+ {
+ char* name = (char*)std::malloc(1);
+ name[0] = '\0';
+ return name;
+ } else
+ {
+ size_t len = std::strlen(joystickDesc.name);
+ char* name = (char*)std::malloc(len+1);
+ std::strcpy(name, joystickDesc.name);
+ return name;
+ }
+}
+
+int HALGetJoystickAxisType(uint8_t joystickNum, uint8_t axis)
+{
+ HALJoystickDescriptor joystickDesc;
+ if(HALGetJoystickDescriptor(joystickNum, &joystickDesc)<0)
+ {
+ return -1;
+ } else
+ {
+ return joystickDesc.axisTypes[axis];
+ }
+}
+
+int HALSetJoystickOutputs(uint8_t joystickNum, uint32_t outputs, uint16_t leftRumble, uint16_t rightRumble)
+{
+ return FRC_NetworkCommunication_setJoystickOutputs(joystickNum, outputs, leftRumble, rightRumble);
+}
+
+int HALGetMatchTime(float *matchTime)
+{
+ return FRC_NetworkCommunication_getMatchTime(matchTime);
+}
+
+void HALNetworkCommunicationObserveUserProgramStarting(void)
+{
+ FRC_NetworkCommunication_observeUserProgramStarting();
+}
+
+void HALNetworkCommunicationObserveUserProgramDisabled(void)
+{
+ FRC_NetworkCommunication_observeUserProgramDisabled();
+}
+
+void HALNetworkCommunicationObserveUserProgramAutonomous(void)
+{
+ FRC_NetworkCommunication_observeUserProgramAutonomous();
+}
+
+void HALNetworkCommunicationObserveUserProgramTeleop(void)
+{
+ FRC_NetworkCommunication_observeUserProgramTeleop();
+}
+
+void HALNetworkCommunicationObserveUserProgramTest(void)
+{
+ FRC_NetworkCommunication_observeUserProgramTest();
+}