mirror of
https://github.com/wpilibsuite/allwpilib
synced 2026-06-19 00:41:43 +00:00
Subsections are alphabetized according to lexographic ordering. Also, HAL includes were moved from headers to source files where possible. This change may cause user code which uses HAL functionality and does not include the relevant HAL header (since it may have been provided by another WPILib header) to fail to compile.
275 lines
7.9 KiB
C++
275 lines
7.9 KiB
C++
/*----------------------------------------------------------------------------*/
|
|
/* Copyright (c) FIRST 2013-2016. 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 the root directory of */
|
|
/* the project. */
|
|
/*----------------------------------------------------------------------------*/
|
|
|
|
#pragma once
|
|
|
|
#include <math.h>
|
|
#include <stdint.h>
|
|
|
|
#include "Accelerometer.h"
|
|
#include "AnalogAccumulator.h"
|
|
#include "AnalogInput.h"
|
|
#include "AnalogOutput.h"
|
|
#include "AnalogTrigger.h"
|
|
#include "Compressor.h"
|
|
#include "Counter.h"
|
|
#include "DIO.h"
|
|
#include "Encoder.h"
|
|
#include "Errors.h"
|
|
#include "I2C.h"
|
|
#include "Interrupts.h"
|
|
#include "Notifier.h"
|
|
#include "PDP.h"
|
|
#include "PWM.h"
|
|
#include "Power.h"
|
|
#include "Relay.h"
|
|
#include "SPI.h"
|
|
#include "SPIAccumulator.h"
|
|
#include "Semaphore.h"
|
|
#include "SerialPort.h"
|
|
#include "Solenoid.h"
|
|
#include "Task.h"
|
|
#include "Utilities.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 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;
|
|
float 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 HALSendError(int isError, int32_t errorCode, int isLVCode,
|
|
const char* details, const char* location,
|
|
const char* callStack, int printMsg);
|
|
|
|
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();
|
|
}
|