269 lines
7.4 KiB
C++
269 lines
7.4 KiB
C++
/*----------------------------------------------------------------------------*/
|
|
/* 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. */
|
|
/*----------------------------------------------------------------------------*/
|
|
#pragma once
|
|
|
|
#include <stdint.h>
|
|
#include <cmath>
|
|
|
|
#include "Accelerometer.hpp"
|
|
#include "Analog.hpp"
|
|
#include "Compressor.hpp"
|
|
#include "Digital.hpp"
|
|
#include "Solenoid.hpp"
|
|
#include "Notifier.hpp"
|
|
#include "Interrupts.hpp"
|
|
#include "Errors.hpp"
|
|
#include "PDP.hpp"
|
|
#include "Power.hpp"
|
|
#include "SerialPort.hpp"
|
|
|
|
#include "Utilities.hpp"
|
|
#include "Semaphore.hpp"
|
|
#include "Task.hpp"
|
|
|
|
#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 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
|
|
{
|
|
enum tResourceType
|
|
{
|
|
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,
|
|
kResourceType_AnalogOutput,
|
|
kResourceType_VictorSP,
|
|
kResourceType_TalonSRX,
|
|
kResourceType_CANTalonSRX,
|
|
kResourceType_ADXL362,
|
|
kResourceType_ADXRS450,
|
|
kResourceType_RevSPARK,
|
|
kResourceType_MindsensorsSD540,
|
|
kResourceType_DigitalFilter,
|
|
};
|
|
|
|
enum tInstances
|
|
{
|
|
kLanguage_LabVIEW = 1,
|
|
kLanguage_CPlusPlus = 2,
|
|
kLanguage_Java = 3,
|
|
kLanguage_Python = 4,
|
|
|
|
kCANPlugin_BlackJagBridge = 1,
|
|
kCANPlugin_2CAN = 2,
|
|
|
|
kFramework_Iterative = 1,
|
|
kFramework_Sample = 2,
|
|
kFramework_CommandControl = 3,
|
|
|
|
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,
|
|
};
|
|
}
|
|
|
|
struct HALControlWord {
|
|
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;
|
|
};
|
|
|
|
enum HALAllianceStationID {
|
|
kHALAllianceStationID_red1,
|
|
kHALAllianceStationID_red2,
|
|
kHALAllianceStationID_red3,
|
|
kHALAllianceStationID_blue1,
|
|
kHALAllianceStationID_blue2,
|
|
kHALAllianceStationID_blue3,
|
|
};
|
|
|
|
/* The maximum number of axes that will be stored in a single HALJoystickAxes
|
|
struct. This is used for allocating buffers, not bounds checking, since
|
|
there are usually less axes in practice. */
|
|
static const size_t kMaxJoystickAxes = 12;
|
|
static const size_t kMaxJoystickPOVs = 12;
|
|
|
|
struct HALJoystickAxes {
|
|
uint16_t count;
|
|
int16_t axes[kMaxJoystickAxes];
|
|
};
|
|
|
|
struct HALJoystickPOVs {
|
|
uint16_t count;
|
|
int16_t povs[kMaxJoystickPOVs];
|
|
};
|
|
|
|
struct HALJoystickButtons {
|
|
uint32_t buttons;
|
|
uint8_t count;
|
|
};
|
|
|
|
struct HALJoystickDescriptor {
|
|
uint8_t isXbox;
|
|
uint8_t type;
|
|
char name[256];
|
|
uint8_t axisCount;
|
|
uint8_t axisTypes[kMaxJoystickAxes];
|
|
uint8_t buttonCount;
|
|
uint8_t povCount;
|
|
};
|
|
|
|
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);
|
|
void freePort(void* port);
|
|
const char* getHALErrorMessage(int32_t code);
|
|
|
|
uint16_t getFPGAVersion(int32_t *status);
|
|
uint32_t getFPGARevision(int32_t *status);
|
|
uint64_t getFPGATime(int32_t *status);
|
|
|
|
bool getFPGAButton(int32_t *status);
|
|
|
|
int HALSetErrorData(const char *errors, int errorsLength, int wait_ms);
|
|
|
|
int HALGetControlWord(HALControlWord *data);
|
|
int HALGetAllianceStation(enum HALAllianceStationID *allianceStation);
|
|
int HALGetJoystickAxes(uint8_t joystickNum, HALJoystickAxes *axes);
|
|
int HALGetJoystickPOVs(uint8_t joystickNum, HALJoystickPOVs *povs);
|
|
int HALGetJoystickButtons(uint8_t joystickNum, HALJoystickButtons *buttons);
|
|
int HALGetJoystickDescriptor(uint8_t joystickNum, HALJoystickDescriptor *desc);
|
|
int HALGetJoystickIsXbox(uint8_t joystickNum);
|
|
int HALGetJoystickType(uint8_t joystickNum);
|
|
char* HALGetJoystickName(uint8_t joystickNum);
|
|
int HALGetJoystickAxisType(uint8_t joystickNum, uint8_t axis);
|
|
int HALSetJoystickOutputs(uint8_t joystickNum, uint32_t outputs, uint16_t leftRumble, uint16_t rightRumble);
|
|
int HALGetMatchTime(float *matchTime);
|
|
|
|
void HALSetNewDataSem(MULTIWAIT_ID sem);
|
|
|
|
bool HALGetSystemActive(int32_t *status);
|
|
bool HALGetBrownedOut(int32_t *status);
|
|
|
|
int HALInitialize(int mode = 0);
|
|
void HALNetworkCommunicationObserveUserProgramStarting();
|
|
void HALNetworkCommunicationObserveUserProgramDisabled();
|
|
void HALNetworkCommunicationObserveUserProgramAutonomous();
|
|
void HALNetworkCommunicationObserveUserProgramTeleop();
|
|
void HALNetworkCommunicationObserveUserProgramTest();
|
|
|
|
uint32_t HALReport(uint8_t resource, uint8_t instanceNumber, uint8_t context = 0,
|
|
const char *feature = NULL);
|
|
}
|
|
|
|
// TODO: HACKS for now...
|
|
extern "C"
|
|
{
|
|
|
|
void NumericArrayResize();
|
|
void RTSetCleanupProc();
|
|
void EDVR_CreateReference();
|
|
void Occur();
|
|
}
|