From 9f2f301fa4d3fee7eca15997a84399971b6a70b1 Mon Sep 17 00:00:00 2001 From: Tyler Veness Date: Thu, 26 May 2016 20:20:58 -0700 Subject: [PATCH] Deduplicated FRC network communication headers (#71) The network communication headers were moved to the include directory of the HAL and their copies were removed from wpilibc. Also, symModuleLink.h was removed because the function which it prototypes hasn't been used in WPILib since the roboRIO switch. --- .../FRC_NetworkCommunication/AICalibration.h | 0 .../CANInterfacePlugin.h | 0 .../FRC_NetworkCommunication/CANSessionMux.h | 0 .../FRC_NetworkCommunication/FRCComm.h | 0 .../FRC_NetworkCommunication/LoadOut.h | 0 wpilibc/athena/include/CANJaguar.h | 2 +- .../NetworkCommunication/AICalibration.h | 20 --- .../NetworkCommunication/CANInterfacePlugin.h | 109 --------------- .../NetworkCommunication/CANSessionMux.h | 81 ----------- .../include/NetworkCommunication/FRCComm.h | 130 ------------------ .../include/NetworkCommunication/LoadOut.h | 57 -------- .../NetworkCommunication/symModuleLink.h | 19 --- wpilibc/athena/src/CANJaguar.cpp | 2 +- wpilibc/athena/src/DriverStation.cpp | 2 +- wpilibc/athena/src/SensorBase.cpp | 2 +- 15 files changed, 4 insertions(+), 420 deletions(-) rename hal/{lib/athena => include}/FRC_NetworkCommunication/AICalibration.h (100%) rename hal/{lib/athena => include}/FRC_NetworkCommunication/CANInterfacePlugin.h (100%) rename hal/{lib/athena => include}/FRC_NetworkCommunication/CANSessionMux.h (100%) rename hal/{lib/athena => include}/FRC_NetworkCommunication/FRCComm.h (100%) rename hal/{lib/athena => include}/FRC_NetworkCommunication/LoadOut.h (100%) delete mode 100644 wpilibc/athena/include/NetworkCommunication/AICalibration.h delete mode 100644 wpilibc/athena/include/NetworkCommunication/CANInterfacePlugin.h delete mode 100644 wpilibc/athena/include/NetworkCommunication/CANSessionMux.h delete mode 100644 wpilibc/athena/include/NetworkCommunication/FRCComm.h delete mode 100644 wpilibc/athena/include/NetworkCommunication/LoadOut.h delete mode 100644 wpilibc/athena/include/NetworkCommunication/symModuleLink.h diff --git a/hal/lib/athena/FRC_NetworkCommunication/AICalibration.h b/hal/include/FRC_NetworkCommunication/AICalibration.h similarity index 100% rename from hal/lib/athena/FRC_NetworkCommunication/AICalibration.h rename to hal/include/FRC_NetworkCommunication/AICalibration.h diff --git a/hal/lib/athena/FRC_NetworkCommunication/CANInterfacePlugin.h b/hal/include/FRC_NetworkCommunication/CANInterfacePlugin.h similarity index 100% rename from hal/lib/athena/FRC_NetworkCommunication/CANInterfacePlugin.h rename to hal/include/FRC_NetworkCommunication/CANInterfacePlugin.h diff --git a/hal/lib/athena/FRC_NetworkCommunication/CANSessionMux.h b/hal/include/FRC_NetworkCommunication/CANSessionMux.h similarity index 100% rename from hal/lib/athena/FRC_NetworkCommunication/CANSessionMux.h rename to hal/include/FRC_NetworkCommunication/CANSessionMux.h diff --git a/hal/lib/athena/FRC_NetworkCommunication/FRCComm.h b/hal/include/FRC_NetworkCommunication/FRCComm.h similarity index 100% rename from hal/lib/athena/FRC_NetworkCommunication/FRCComm.h rename to hal/include/FRC_NetworkCommunication/FRCComm.h diff --git a/hal/lib/athena/FRC_NetworkCommunication/LoadOut.h b/hal/include/FRC_NetworkCommunication/LoadOut.h similarity index 100% rename from hal/lib/athena/FRC_NetworkCommunication/LoadOut.h rename to hal/include/FRC_NetworkCommunication/LoadOut.h diff --git a/wpilibc/athena/include/CANJaguar.h b/wpilibc/athena/include/CANJaguar.h index 7ac25ce301..41f8c17b23 100644 --- a/wpilibc/athena/include/CANJaguar.h +++ b/wpilibc/athena/include/CANJaguar.h @@ -15,12 +15,12 @@ #include "CAN/can_proto.h" #include "CANSpeedController.h" #include "ErrorBase.h" +#include "FRC_NetworkCommunication/CANSessionMux.h" #include "HAL/cpp/Semaphore.h" #include "HAL/cpp/priority_mutex.h" #include "LiveWindow/LiveWindowSendable.h" #include "MotorSafety.h" #include "MotorSafetyHelper.h" -#include "NetworkCommunication/CANSessionMux.h" #include "PIDOutput.h" #include "Resource.h" #include "tables/ITableListener.h" diff --git a/wpilibc/athena/include/NetworkCommunication/AICalibration.h b/wpilibc/athena/include/NetworkCommunication/AICalibration.h deleted file mode 100644 index c4a8f75965..0000000000 --- a/wpilibc/athena/include/NetworkCommunication/AICalibration.h +++ /dev/null @@ -1,20 +0,0 @@ - -#ifndef __AICalibration_h__ -#define __AICalibration_h__ - -#include - -#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 deleted file mode 100644 index 18759804fc..0000000000 --- a/wpilibc/athena/include/NetworkCommunication/CANInterfacePlugin.h +++ /dev/null @@ -1,109 +0,0 @@ -// 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 - -#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 deleted file mode 100644 index 9cd9a3ff7f..0000000000 --- a/wpilibc/athena/include/NetworkCommunication/CANSessionMux.h +++ /dev/null @@ -1,81 +0,0 @@ -// 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 - -#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 deleted file mode 100644 index 588c8ca62b..0000000000 --- a/wpilibc/athena/include/NetworkCommunication/FRCComm.h +++ /dev/null @@ -1,130 +0,0 @@ -/************************************************************* - * 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 -#ifdef USE_THRIFT -#define EXPORT_FUNC -#else -#define EXPORT_FUNC __declspec(dllexport) __cdecl -#endif -#else -#include -#include -#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 deleted file mode 100644 index 5a1174913c..0000000000 --- a/wpilibc/athena/include/NetworkCommunication/LoadOut.h +++ /dev/null @@ -1,57 +0,0 @@ - -#ifndef __LoadOut_h__ -#define __LoadOut_h__ - -#ifdef SIMULATION -#include -#define EXPORT_FUNC __declspec(dllexport) __cdecl -#else -#include -#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 deleted file mode 100644 index 621cbb6dc6..0000000000 --- a/wpilibc/athena/include/NetworkCommunication/symModuleLink.h +++ /dev/null @@ -1,19 +0,0 @@ -#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 diff --git a/wpilibc/athena/src/CANJaguar.cpp b/wpilibc/athena/src/CANJaguar.cpp index dd32123e7c..5aa961245f 100644 --- a/wpilibc/athena/src/CANJaguar.cpp +++ b/wpilibc/athena/src/CANJaguar.cpp @@ -10,9 +10,9 @@ #include #include +#include "FRC_NetworkCommunication/CANSessionMux.h" #include "HAL/HAL.h" #include "LiveWindow/LiveWindow.h" -#include "NetworkCommunication/CANSessionMux.h" #include "Timer.h" #include "WPIErrors.h" diff --git a/wpilibc/athena/src/DriverStation.cpp b/wpilibc/athena/src/DriverStation.cpp index fa582dabbb..1822d6e8bc 100644 --- a/wpilibc/athena/src/DriverStation.cpp +++ b/wpilibc/athena/src/DriverStation.cpp @@ -8,9 +8,9 @@ #include "DriverStation.h" #include #include "AnalogInput.h" +#include "FRC_NetworkCommunication/FRCComm.h" #include "Log.h" #include "MotorSafetyHelper.h" -#include "NetworkCommunication/FRCComm.h" #include "Timer.h" #include "Utility.h" #include "WPIErrors.h" diff --git a/wpilibc/athena/src/SensorBase.cpp b/wpilibc/athena/src/SensorBase.cpp index 41075e002c..a55c60b5e6 100644 --- a/wpilibc/athena/src/SensorBase.cpp +++ b/wpilibc/athena/src/SensorBase.cpp @@ -7,9 +7,9 @@ #include "SensorBase.h" +#include "FRC_NetworkCommunication/LoadOut.h" #include "HAL/HAL.h" #include "HAL/Port.h" -#include "NetworkCommunication/LoadOut.h" #include "WPIErrors.h" const uint32_t SensorBase::kDigitalChannels;