From 447cec4df86b3cc4d9d52ecff2f2e037d38fb443 Mon Sep 17 00:00:00 2001 From: thomasclark Date: Thu, 29 May 2014 15:01:07 -0400 Subject: [PATCH] Support for the CAN pneumatics module in C++ and Java Change-Id: Iba66f8b51d7471a60ec33d38354a2f0853cc31df --- .../HAL/{Compressor.h => Compressor.hpp} | 0 hal/include/HAL/HAL.h | 301 ------------------ hal/include/HAL/HAL.hpp | 1 + hal/lib/Athena/Compressor.cpp | 2 +- hal/lib/Athena/ctre/PCM.cpp | 2 + wpilibc/include/PCMCompressor.h | 2 +- 6 files changed, 5 insertions(+), 303 deletions(-) rename hal/include/HAL/{Compressor.h => Compressor.hpp} (100%) delete mode 100644 hal/include/HAL/HAL.h diff --git a/hal/include/HAL/Compressor.h b/hal/include/HAL/Compressor.hpp similarity index 100% rename from hal/include/HAL/Compressor.h rename to hal/include/HAL/Compressor.hpp diff --git a/hal/include/HAL/HAL.h b/hal/include/HAL/HAL.h deleted file mode 100644 index 7093b768b3..0000000000 --- a/hal/include/HAL/HAL.h +++ /dev/null @@ -1,301 +0,0 @@ -/*----------------------------------------------------------------------------*/ -/* Copyright (c) FIRST 2013. All Rights Reserved. */ -/* Open Source Software - may be modified and shared by FRC teams. The code */ -/* must be accompanied by the FIRST BSD license file in $(WIND_BASE)/WPILib. */ -/*----------------------------------------------------------------------------*/ - -#ifdef __vxworks -#include -#else -#include -#endif -#include - -#include "Analog.h" -#include "Compressor.h" -#include "Digital.h" -#include "Solenoid.h" -#include "Notifier.h" -#include "Interrupts.h" -#include "Errors.h" - -#include "Utilities.h" -#include "Semaphore.h" -#include "Task.h" - -#ifndef HAL_H -#define HAL_H - -#define HAL_IO_CONFIG_DATA_SIZE 32 -#define HAL_SYS_STATUS_DATA_SIZE 44 -#define HAL_USER_STATUS_DATA_SIZE (984 - HAL_IO_CONFIG_DATA_SIZE - HAL_SYS_STATUS_DATA_SIZE) -#define HAL_USER_DS_LCD_DATA_SIZE 128 - - -#define HALFRC_NetworkCommunication_DynamicType_DSEnhancedIO_Input 17 -#define HALFRC_NetworkCommunication_DynamicType_DSEnhancedIO_Output 18 -#define HALFRC_NetworkCommunication_DynamicType_Kinect_Header 19 -#define HALFRC_NetworkCommunication_DynamicType_Kinect_Extra1 20 -#define HALFRC_NetworkCommunication_DynamicType_Kinect_Vertices1 21 -#define HALFRC_NetworkCommunication_DynamicType_Kinect_Extra2 22 -#define HALFRC_NetworkCommunication_DynamicType_Kinect_Vertices2 23 -#define HALFRC_NetworkCommunication_DynamicType_Kinect_Joystick 24 -#define HALFRC_NetworkCommunication_DynamicType_Kinect_Custom 25 - -namespace HALUsageReporting -{ - typedef enum - { - kResourceType_Controller, - kResourceType_Module, - kResourceType_Language, - kResourceType_CANPlugin, - kResourceType_Accelerometer, - kResourceType_ADXL345, - kResourceType_AnalogChannel, - kResourceType_AnalogTrigger, - kResourceType_AnalogTriggerOutput, - kResourceType_CANJaguar, - kResourceType_Compressor, - kResourceType_Counter, - kResourceType_Dashboard, - kResourceType_DigitalInput, - kResourceType_DigitalOutput, - kResourceType_DriverStationCIO, - kResourceType_DriverStationEIO, - kResourceType_DriverStationLCD, - kResourceType_Encoder, - kResourceType_GearTooth, - kResourceType_Gyro, - kResourceType_I2C, - kResourceType_Framework, - kResourceType_Jaguar, - kResourceType_Joystick, - kResourceType_Kinect, - kResourceType_KinectStick, - kResourceType_PIDController, - kResourceType_Preferences, - kResourceType_PWM, - kResourceType_Relay, - kResourceType_RobotDrive, - kResourceType_SerialPort, - kResourceType_Servo, - kResourceType_Solenoid, - kResourceType_SPI, - kResourceType_Task, - kResourceType_Ultrasonic, - kResourceType_Victor, - kResourceType_Button, - kResourceType_Command, - kResourceType_AxisCamera, - kResourceType_PCVideoServer, - kResourceType_SmartDashboard, - kResourceType_Talon, - kResourceType_HiTechnicColorSensor, - kResourceType_HiTechnicAccel, - kResourceType_HiTechnicCompass, - kResourceType_SRF08, - } tResourceType; - - typedef enum - { - kLanguage_LabVIEW = 1, - kLanguage_CPlusPlus = 2, - kLanguage_Java = 3, - kLanguage_Python = 4, - - kCANPlugin_BlackJagBridge = 1, - kCANPlugin_2CAN = 2, - - kFramework_Iterative = 1, - kFramework_Simple = 2, - - kRobotDrive_ArcadeStandard = 1, - kRobotDrive_ArcadeButtonSpin = 2, - kRobotDrive_ArcadeRatioCurve = 3, - kRobotDrive_Tank = 4, - kRobotDrive_MecanumPolar = 5, - kRobotDrive_MecanumCartesian = 6, - - kDriverStationCIO_Analog = 1, - kDriverStationCIO_DigitalIn = 2, - kDriverStationCIO_DigitalOut = 3, - - kDriverStationEIO_Acceleration = 1, - kDriverStationEIO_AnalogIn = 2, - kDriverStationEIO_AnalogOut = 3, - kDriverStationEIO_Button = 4, - kDriverStationEIO_LED = 5, - kDriverStationEIO_DigitalIn = 6, - kDriverStationEIO_DigitalOut = 7, - kDriverStationEIO_FixedDigitalOut = 8, - kDriverStationEIO_PWM = 9, - kDriverStationEIO_Encoder = 10, - kDriverStationEIO_TouchSlider = 11, - - kADXL345_SPI = 1, - kADXL345_I2C = 2, - - kCommand_Scheduler = 1, - - kSmartDashboard_Instance = 1, - } tInstances; -} - -struct HALCommonControlData{ - uint16_t packetIndex; - union { - uint8_t control; -#ifndef __vxworks - struct { - uint8_t checkVersions :1; - uint8_t test :1; - uint8_t resync : 1; - uint8_t fmsAttached:1; - uint8_t autonomous : 1; - uint8_t enabled : 1; - uint8_t notEStop : 1; - uint8_t reset : 1; - }; -#else - struct { - uint8_t reset : 1; - uint8_t notEStop : 1; - uint8_t enabled : 1; - uint8_t autonomous : 1; - uint8_t fmsAttached:1; - uint8_t resync : 1; - uint8_t test :1; - uint8_t checkVersions :1; - }; -#endif - }; - uint8_t dsDigitalIn; - uint16_t teamID; - - char dsID_Alliance; - char dsID_Position; - - union { - int8_t stick0Axes[6]; - struct { - int8_t stick0Axis1; - int8_t stick0Axis2; - int8_t stick0Axis3; - int8_t stick0Axis4; - int8_t stick0Axis5; - int8_t stick0Axis6; - }; - }; - uint16_t stick0Buttons; // Left-most 4 bits are unused - - union { - int8_t stick1Axes[6]; - struct { - int8_t stick1Axis1; - int8_t stick1Axis2; - int8_t stick1Axis3; - int8_t stick1Axis4; - int8_t stick1Axis5; - int8_t stick1Axis6; - }; - }; - uint16_t stick1Buttons; // Left-most 4 bits are unused - - union { - int8_t stick2Axes[6]; - struct { - int8_t stick2Axis1; - int8_t stick2Axis2; - int8_t stick2Axis3; - int8_t stick2Axis4; - int8_t stick2Axis5; - int8_t stick2Axis6; - }; - }; - uint16_t stick2Buttons; // Left-most 4 bits are unused - - union { - int8_t stick3Axes[6]; - struct { - int8_t stick3Axis1; - int8_t stick3Axis2; - int8_t stick3Axis3; - int8_t stick3Axis4; - int8_t stick3Axis5; - int8_t stick3Axis6; - }; - }; - uint16_t stick3Buttons; // Left-most 4 bits are unused - - //Analog inputs are 10 bit right-justified - uint16_t analog1; - uint16_t analog2; - uint16_t analog3; - uint16_t analog4; - - uint64_t cRIOChecksum; - uint32_t FPGAChecksum0; - uint32_t FPGAChecksum1; - uint32_t FPGAChecksum2; - uint32_t FPGAChecksum3; - - char versionData[8]; -}; - - -inline float intToFloat(int value) { - return (float)value; -} - -inline int floatToInt(float value) { - return round(value); -} - -extern "C" { - extern const uint32_t dio_kNumSystems; - extern const uint32_t solenoid_kNumDO7_0Elements; - extern const uint32_t interrupt_kNumSystems; - extern const uint32_t kSystemClockTicksPerMicrosecond; - - void* getPort(uint8_t pin); - void* getPortWithModule(uint8_t module, uint8_t pin); - const char* getHALErrorMessage(int32_t code); - - uint16_t getFPGAVersion(int32_t *status); - uint32_t getFPGARevision(int32_t *status); - uint32_t getFPGATime(int32_t *status); - - void setFPGALED(uint32_t state, int32_t *status); - int32_t getFPGALED(int32_t *status); - - int HALSetErrorData(const char *errors, int errorsLength, int wait_ms); - int HALSetUserDsLcdData(const char *userDsLcdData, int userDsLcdDataLength, int wait_ms); - int HALOverrideIOConfig(const char *ioConfig, int wait_ms); - int HALGetDynamicControlData(uint8_t type, char *dynamicData, int32_t maxLength, int wait_ms); - int HALGetCommonControlData(HALCommonControlData *data, int wait_ms); - void HALSetNewDataSem(pthread_mutex_t *); - int HALSetStatusData(float battery, uint8_t dsDigitalOut, uint8_t updateNumber, - const char *userDataHigh, int userDataHighLength, - const char *userDataLow, int userDataLowLength, int wait_ms); - - void HALNetworkCommunicationReserve(); - void HALNetworkCommunicationObserveUserProgramStarting(void); - void HALNetworkCommunicationObserveUserProgramDisabled(void); - void HALNetworkCommunicationObserveUserProgramAutonomous(void); - void HALNetworkCommunicationObserveUserProgramTeleop(void); - void HALNetworkCommunicationObserveUserProgramTest(void); - - uint32_t HALReport(uint8_t resource, uint8_t instanceNumber, uint8_t context = 0, const char *feature = NULL); -} - -// TODO: HACKS for now... -extern "C" { - //void FRC_NetworkCommunication_Reserve(); - - void NumericArrayResize(); - void RTSetCleanupProc(); - void EDVR_CreateReference(); - void Occur(); -} -#endif diff --git a/hal/include/HAL/HAL.hpp b/hal/include/HAL/HAL.hpp index 88741b7843..697d7a3887 100644 --- a/hal/include/HAL/HAL.hpp +++ b/hal/include/HAL/HAL.hpp @@ -13,6 +13,7 @@ #include #include "Analog.hpp" +#include "Compressor.hpp" #include "Digital.hpp" #include "Solenoid.hpp" #include "Notifier.hpp" diff --git a/hal/lib/Athena/Compressor.cpp b/hal/lib/Athena/Compressor.cpp index f0cf18b1cf..7df4103180 100644 --- a/hal/lib/Athena/Compressor.cpp +++ b/hal/lib/Athena/Compressor.cpp @@ -1,4 +1,4 @@ -#include "HAL/Compressor.h" +#include "HAL/Compressor.hpp" #include "ctre/PCM.h" #include diff --git a/hal/lib/Athena/ctre/PCM.cpp b/hal/lib/Athena/ctre/PCM.cpp index 21ba26730a..2e7ed41413 100644 --- a/hal/lib/Athena/ctre/PCM.cpp +++ b/hal/lib/Athena/ctre/PCM.cpp @@ -1,3 +1,5 @@ +#pragma GCC diagnostic ignored "-Wmissing-field-initializers" + #include "PCM.h" #include "NetworkCommunication/JaguarCANDriver.h" #include // memset diff --git a/wpilibc/include/PCMCompressor.h b/wpilibc/include/PCMCompressor.h index 01ca118296..5c4dd33103 100644 --- a/wpilibc/include/PCMCompressor.h +++ b/wpilibc/include/PCMCompressor.h @@ -5,7 +5,7 @@ #ifndef PCMCOMPRESSOR_H_ #define PCMCOMPRESSOR_H_ -#include "HAL/HAL.h" +#include "HAL/HAL.hpp" #include "SensorBase.h" #include "tables/ITableListener.h" #include "LiveWindow/LiveWindowSendable.h"