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/wpilibc/Athena/include/NetworkCommunication/AICalibration.h b/wpilibc/Athena/include/NetworkCommunication/AICalibration.h
new file mode 100644
index 0000000..c4a8f75
--- /dev/null
+++ b/wpilibc/Athena/include/NetworkCommunication/AICalibration.h
@@ -0,0 +1,20 @@
+
+#ifndef __AICalibration_h__
+#define __AICalibration_h__
+
+#include <stdint.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+uint32_t FRC_NetworkCommunication_nAICalibration_getLSBWeight(
+ const uint32_t aiSystemIndex, const uint32_t channel, int32_t *status);
+int32_t FRC_NetworkCommunication_nAICalibration_getOffset(
+ const uint32_t aiSystemIndex, const uint32_t channel, int32_t *status);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // __AICalibration_h__
diff --git a/wpilibc/Athena/include/NetworkCommunication/CANInterfacePlugin.h b/wpilibc/Athena/include/NetworkCommunication/CANInterfacePlugin.h
new file mode 100644
index 0000000..1875980
--- /dev/null
+++ b/wpilibc/Athena/include/NetworkCommunication/CANInterfacePlugin.h
@@ -0,0 +1,109 @@
+// CANInterfacePlugin.h
+//
+// Defines the API for building a CAN Interface Plugin to support
+// PWM-cable-free CAN motor control on FRC robots. This allows you
+// to connect any CAN interface to the secure Jaguar CAN driver.
+//
+
+#ifndef __CANInterfacePlugin_h__
+#define __CANInterfacePlugin_h__
+
+#include <stdint.h>
+
+#define CAN_IS_FRAME_REMOTE 0x80000000
+#define CAN_IS_FRAME_11BIT 0x40000000
+#define CAN_29BIT_MESSAGE_ID_MASK 0x1FFFFFFF
+#define CAN_11BIT_MESSAGE_ID_MASK 0x000007FF
+
+class CANInterfacePlugin {
+ public:
+ CANInterfacePlugin() {}
+ virtual ~CANInterfacePlugin() {}
+
+ /**
+ * This entry-point of the CANInterfacePlugin is passed a message that the
+ * driver needs to send to
+ * a device on the CAN bus.
+ *
+ * This function may be called from multiple contexts and must therefore be
+ * reentrant.
+ *
+ * @param messageID The 29-bit CAN message ID in the lsbs. The msb can
+ * indicate a remote frame.
+ * @param data A pointer to a buffer containing between 0 and 8 bytes to send
+ * with the message. May be nullptr if dataSize is 0.
+ * @param dataSize The number of bytes to send with the message.
+ * @return Return any error code. On success return 0.
+ */
+ virtual int32_t sendMessage(uint32_t messageID, const uint8_t *data,
+ uint8_t dataSize) = 0;
+
+ /**
+ * This entry-point of the CANInterfacePlugin is passed buffers which should
+ * be populated with
+ * any received messages from devices on the CAN bus.
+ *
+ * This function is always called by a single task in the Jaguar driver, so it
+ * need not be reentrant.
+ *
+ * This function is expected to block for some period of time waiting for a
+ * message from the CAN bus.
+ * It may timeout periodically (returning non-zero to indicate no message was
+ * populated) to allow for
+ * shutdown and unloading of the plugin.
+ *
+ * @param messageID A reference to be populated with a received 29-bit CAN
+ * message ID in the lsbs.
+ * @param data A pointer to a buffer of 8 bytes to be populated with data
+ * received with the message.
+ * @param dataSize A reference to be populated with the size of the data
+ * received (0 - 8 bytes).
+ * @return This should return 0 if a message was populated, non-0 if no
+ * message was not populated.
+ */
+ virtual int32_t receiveMessage(uint32_t &messageID, uint8_t *data,
+ uint8_t &dataSize) = 0;
+
+#if defined(__linux)
+ /**
+ * This entry-point of the CANInterfacePlugin returns status of the CAN bus.
+ *
+ * This function may be called from multiple contexts and must therefore be
+ * reentrant.
+ *
+ * This function will return detailed hardware status if available for
+ * diagnostics of the CAN interface.
+ *
+ * @param busOffCount The number of times that sendMessage failed with a
+ * busOff error indicating that messages
+ * are not successfully transmitted on the bus.
+ * @param txFullCount The number of times that sendMessage failed with a
+ * txFifoFull error indicating that messages
+ * are not successfully received by any CAN device.
+ * @param receiveErrorCount The count of receive errors as reported by the CAN
+ * driver.
+ * @param transmitErrorCount The count of transmit errors as reported by the
+ * CAN driver.
+ * @return This should return 0 if all status was retrieved successfully or an
+ * error code if not.
+ */
+ virtual int32_t getStatus(uint32_t &busOffCount, uint32_t &txFullCount,
+ uint32_t &receiveErrorCount,
+ uint32_t &transmitErrorCount) {
+ return 0;
+ }
+#endif
+};
+
+/**
+ * This function allows you to register a CANInterfacePlugin to provide access a
+ * CAN bus.
+ *
+ * @param interface A pointer to an object that inherits from CANInterfacePlugin
+ * and implements
+ * the pure virtual interface. If nullptr, unregister the current plugin.
+ */
+void FRC_NetworkCommunication_CANSessionMux_registerInterface(
+ CANInterfacePlugin *interface);
+
+#endif // __CANInterfacePlugin_h__
diff --git a/wpilibc/Athena/include/NetworkCommunication/CANSessionMux.h b/wpilibc/Athena/include/NetworkCommunication/CANSessionMux.h
new file mode 100644
index 0000000..9cd9a3f
--- /dev/null
+++ b/wpilibc/Athena/include/NetworkCommunication/CANSessionMux.h
@@ -0,0 +1,81 @@
+// CANSessionMux.h
+//
+// Defines the API for building a CAN Interface Plugin to support
+// PWM-cable-free CAN motor control on FRC robots. This allows you
+// to connect any CAN interface to the secure Jaguar CAN driver.
+//
+
+#ifndef __CANSessionMux_h__
+#define __CANSessionMux_h__
+
+#include <stdint.h>
+
+#define CAN_SEND_PERIOD_NO_REPEAT 0
+#define CAN_SEND_PERIOD_STOP_REPEATING -1
+
+/* Flags in the upper bits of the messageID */
+#define CAN_IS_FRAME_REMOTE 0x80000000
+#define CAN_IS_FRAME_11BIT 0x40000000
+
+#define ERR_CANSessionMux_InvalidBuffer -44086
+#define ERR_CANSessionMux_MessageNotFound -44087
+#define WARN_CANSessionMux_NoToken 44087
+#define ERR_CANSessionMux_NotAllowed -44088
+#define ERR_CANSessionMux_NotInitialized -44089
+#define ERR_CANSessionMux_SessionOverrun 44050
+
+struct tCANStreamMessage {
+ uint32_t messageID;
+ uint32_t timeStamp;
+ uint8_t data[8];
+ uint8_t dataSize;
+};
+
+namespace nCANSessionMux {
+void sendMessage_wrapper(uint32_t messageID, const uint8_t *data,
+ uint8_t dataSize, int32_t periodMs, int32_t *status);
+void receiveMessage_wrapper(uint32_t *messageID, uint32_t messageIDMask,
+ uint8_t *data, uint8_t *dataSize,
+ uint32_t *timeStamp, int32_t *status);
+void openStreamSession(uint32_t *sessionHandle, uint32_t messageID,
+ uint32_t messageIDMask, uint32_t maxMessages,
+ int32_t *status);
+void closeStreamSession(uint32_t sessionHandle);
+void readStreamSession(uint32_t sessionHandle,
+ struct tCANStreamMessage *messages,
+ uint32_t messagesToRead, uint32_t *messagesRead,
+ int32_t *status);
+void getCANStatus(float *percentBusUtilization, uint32_t *busOffCount,
+ uint32_t *txFullCount, uint32_t *receiveErrorCount,
+ uint32_t *transmitErrorCount, int32_t *status);
+}
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void FRC_NetworkCommunication_CANSessionMux_sendMessage(uint32_t messageID,
+ const uint8_t *data,
+ uint8_t dataSize,
+ int32_t periodMs,
+ int32_t *status);
+void FRC_NetworkCommunication_CANSessionMux_receiveMessage(
+ uint32_t *messageID, uint32_t messageIDMask, uint8_t *data,
+ uint8_t *dataSize, uint32_t *timeStamp, int32_t *status);
+void FRC_NetworkCommunication_CANSessionMux_openStreamSession(
+ uint32_t *sessionHandle, uint32_t messageID, uint32_t messageIDMask,
+ uint32_t maxMessages, int32_t *status);
+void FRC_NetworkCommunication_CANSessionMux_closeStreamSession(
+ uint32_t sessionHandle);
+void FRC_NetworkCommunication_CANSessionMux_readStreamSession(
+ uint32_t sessionHandle, struct tCANStreamMessage *messages,
+ uint32_t messagesToRead, uint32_t *messagesRead, int32_t *status);
+void FRC_NetworkCommunication_CANSessionMux_getCANStatus(
+ float *percentBusUtilization, uint32_t *busOffCount, uint32_t *txFullCount,
+ uint32_t *receiveErrorCount, uint32_t *transmitErrorCount, int32_t *status);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // __CANSessionMux_h__
diff --git a/wpilibc/Athena/include/NetworkCommunication/FRCComm.h b/wpilibc/Athena/include/NetworkCommunication/FRCComm.h
new file mode 100644
index 0000000..588c8ca
--- /dev/null
+++ b/wpilibc/Athena/include/NetworkCommunication/FRCComm.h
@@ -0,0 +1,130 @@
+/*************************************************************
+ * NOTICE
+ *
+ * These are the only externally exposed functions to the
+ * NetworkCommunication library
+ *
+ * This is an implementation of FRC Spec for Comm Protocol
+ * Revision 4.5, June 30, 2008
+ *
+ * Copyright (c) National Instruments 2008. All Rights Reserved.
+ *
+ *************************************************************/
+
+#ifndef __FRC_COMM_H__
+#define __FRC_COMM_H__
+
+#ifdef SIMULATION
+#include <vxWorks_compat.h>
+#ifdef USE_THRIFT
+#define EXPORT_FUNC
+#else
+#define EXPORT_FUNC __declspec(dllexport) __cdecl
+#endif
+#else
+#include <stdint.h>
+#include <pthread.h>
+#define EXPORT_FUNC
+#endif
+
+#define ERR_FRCSystem_NetCommNotResponding -44049
+#define ERR_FRCSystem_NoDSConnection -44018
+
+enum AllianceStationID_t {
+ kAllianceStationID_red1,
+ kAllianceStationID_red2,
+ kAllianceStationID_red3,
+ kAllianceStationID_blue1,
+ kAllianceStationID_blue2,
+ kAllianceStationID_blue3,
+};
+
+enum MatchType_t {
+ kMatchType_none,
+ kMatchType_practice,
+ kMatchType_qualification,
+ kMatchType_elimination,
+};
+
+struct ControlWord_t {
+ uint32_t enabled : 1;
+ uint32_t autonomous : 1;
+ uint32_t test : 1;
+ uint32_t eStop : 1;
+ uint32_t fmsAttached : 1;
+ uint32_t dsAttached : 1;
+ uint32_t control_reserved : 26;
+};
+
+struct JoystickAxes_t {
+ uint16_t count;
+ int16_t axes[1];
+};
+
+struct JoystickPOV_t {
+ uint16_t count;
+ int16_t povs[1];
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+int EXPORT_FUNC FRC_NetworkCommunication_Reserve(void *instance);
+#ifndef SIMULATION
+void EXPORT_FUNC
+getFPGAHardwareVersion(uint16_t *fpgaVersion, uint32_t *fpgaRevision);
+#endif
+int EXPORT_FUNC setStatusData(float battery, uint8_t dsDigitalOut,
+ uint8_t updateNumber, const char *userDataHigh,
+ int userDataHighLength, const char *userDataLow,
+ int userDataLowLength, int wait_ms);
+int EXPORT_FUNC setErrorData(const char *errors, int errorsLength, int wait_ms);
+
+#ifdef SIMULATION
+void EXPORT_FUNC setNewDataSem(HANDLE);
+#else
+void EXPORT_FUNC setNewDataSem(pthread_cond_t *);
+#endif
+
+// this uint32_t is really a LVRefNum
+int EXPORT_FUNC setNewDataOccurRef(uint32_t refnum);
+
+int EXPORT_FUNC
+FRC_NetworkCommunication_getControlWord(struct ControlWord_t *controlWord);
+int EXPORT_FUNC FRC_NetworkCommunication_getAllianceStation(
+ enum AllianceStationID_t *allianceStation);
+int EXPORT_FUNC FRC_NetworkCommunication_getMatchTime(float *matchTime);
+int EXPORT_FUNC
+FRC_NetworkCommunication_getJoystickAxes(uint8_t joystickNum,
+ struct JoystickAxes_t *axes,
+ uint8_t maxAxes);
+int EXPORT_FUNC FRC_NetworkCommunication_getJoystickButtons(uint8_t joystickNum,
+ uint32_t *buttons,
+ uint8_t *count);
+int EXPORT_FUNC
+FRC_NetworkCommunication_getJoystickPOVs(uint8_t joystickNum,
+ struct JoystickPOV_t *povs,
+ uint8_t maxPOVs);
+int EXPORT_FUNC
+FRC_NetworkCommunication_setJoystickOutputs(uint8_t joystickNum,
+ uint32_t hidOutputs,
+ uint16_t leftRumble,
+ uint16_t rightRumble);
+int EXPORT_FUNC
+FRC_NetworkCommunication_getJoystickDesc(uint8_t joystickNum, uint8_t *isXBox,
+ uint8_t *type, char *name,
+ uint8_t *axisCount, uint8_t *axisTypes,
+ uint8_t *buttonCount,
+ uint8_t *povCount);
+
+void EXPORT_FUNC FRC_NetworkCommunication_getVersionString(char *version);
+int EXPORT_FUNC FRC_NetworkCommunication_observeUserProgramStarting(void);
+void EXPORT_FUNC FRC_NetworkCommunication_observeUserProgramDisabled(void);
+void EXPORT_FUNC FRC_NetworkCommunication_observeUserProgramAutonomous(void);
+void EXPORT_FUNC FRC_NetworkCommunication_observeUserProgramTeleop(void);
+void EXPORT_FUNC FRC_NetworkCommunication_observeUserProgramTest(void);
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/wpilibc/Athena/include/NetworkCommunication/LoadOut.h b/wpilibc/Athena/include/NetworkCommunication/LoadOut.h
new file mode 100644
index 0000000..5a11749
--- /dev/null
+++ b/wpilibc/Athena/include/NetworkCommunication/LoadOut.h
@@ -0,0 +1,57 @@
+
+#ifndef __LoadOut_h__
+#define __LoadOut_h__
+
+#ifdef SIMULATION
+#include <vxWorks_compat.h>
+#define EXPORT_FUNC __declspec(dllexport) __cdecl
+#else
+#include <stdint.h>
+#define EXPORT_FUNC
+#endif
+
+#define kMaxModuleNumber 2
+namespace nLoadOut {
+#if defined(SIMULATION)
+typedef enum {
+ kModuleType_Unknown = 0x00,
+ kModuleType_Analog = 0x01,
+ kModuleType_Digital = 0x02,
+ kModuleType_Solenoid = 0x03,
+} tModuleType;
+bool EXPORT_FUNC
+getModulePresence(tModuleType moduleType, uint8_t moduleNumber);
+#endif
+typedef enum {
+ kTargetClass_Unknown = 0x00,
+ kTargetClass_FRC1 = 0x10,
+ kTargetClass_FRC2 = 0x20,
+ kTargetClass_FRC3 = 0x30,
+ kTargetClass_RoboRIO = 0x40,
+#if defined(SIMULATION)
+ kTargetClass_FRC2_Analog = kTargetClass_FRC2 | kModuleType_Analog,
+ kTargetClass_FRC2_Digital = kTargetClass_FRC2 | kModuleType_Digital,
+ kTargetClass_FRC2_Solenoid = kTargetClass_FRC2 | kModuleType_Solenoid,
+#endif
+ kTargetClass_FamilyMask = 0xF0,
+ kTargetClass_ModuleMask = 0x0F,
+} tTargetClass;
+tTargetClass EXPORT_FUNC getTargetClass();
+}
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if defined(SIMULATION)
+uint32_t EXPORT_FUNC
+FRC_NetworkCommunication_nLoadOut_getModulePresence(uint32_t moduleType,
+ uint8_t moduleNumber);
+#endif
+uint32_t EXPORT_FUNC FRC_NetworkCommunication_nLoadOut_getTargetClass();
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // __LoadOut_h__
diff --git a/wpilibc/Athena/include/NetworkCommunication/symModuleLink.h b/wpilibc/Athena/include/NetworkCommunication/symModuleLink.h
new file mode 100644
index 0000000..621cbb6
--- /dev/null
+++ b/wpilibc/Athena/include/NetworkCommunication/symModuleLink.h
@@ -0,0 +1,19 @@
+#ifndef __SYM_MODULE_LINK_H__
+#define __SYM_MODULE_LINK_H__
+
+#include "HAL/HAL.hpp"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern STATUS moduleNameFindBySymbolName(
+ const char* symbol, /* symbol name to look for */
+ char* module /* where to return module name */
+ );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif