diff --git a/hal/src/main/native/athena/AnalogInput.cpp b/hal/src/main/native/athena/AnalogInput.cpp index d352887cea..b11280d0f1 100644 --- a/hal/src/main/native/athena/AnalogInput.cpp +++ b/hal/src/main/native/athena/AnalogInput.cpp @@ -14,7 +14,6 @@ #include "HALInitializer.h" #include "PortsInternal.h" #include "hal/AnalogAccumulator.h" -#include "hal/HAL.h" #include "hal/handles/HandlesInternal.h" namespace hal { diff --git a/hal/src/main/native/include/hal/CANAPI.h b/hal/src/main/native/include/hal/CANAPI.h index 5b4b260c1b..48c254dde7 100644 --- a/hal/src/main/native/include/hal/CANAPI.h +++ b/hal/src/main/native/include/hal/CANAPI.h @@ -9,6 +9,7 @@ #include +#include "hal/CANAPITypes.h" #include "hal/Types.h" /** @@ -17,43 +18,6 @@ * @{ */ -// clang-format off -/** - * The CAN device type. - * - * Teams should use HAL_CAN_Dev_kMiscellaneous - */ -HAL_ENUM(HAL_CANDeviceType) { - HAL_CAN_Dev_kBroadcast = 0, - HAL_CAN_Dev_kRobotController = 1, - HAL_CAN_Dev_kMotorController = 2, - HAL_CAN_Dev_kRelayController = 3, - HAL_CAN_Dev_kGyroSensor = 4, - HAL_CAN_Dev_kAccelerometer = 5, - HAL_CAN_Dev_kUltrasonicSensor = 6, - HAL_CAN_Dev_kGearToothSensor = 7, - HAL_CAN_Dev_kPowerDistribution = 8, - HAL_CAN_Dev_kPneumatics = 9, - HAL_CAN_Dev_kMiscellaneous = 10, - HAL_CAN_Dev_kFirmwareUpdate = 31 -}; - -/** - * The CAN manufacturer ID. - * - * Teams should use HAL_CAN_Man_kTeamUse. - */ -HAL_ENUM(HAL_CANManufacturer) { - HAL_CAN_Man_kBroadcast = 0, - HAL_CAN_Man_kNI = 1, - HAL_CAN_Man_kLM = 2, - HAL_CAN_Man_kDEKA = 3, - HAL_CAN_Man_kCTRE = 4, - HAL_CAN_Man_kMS = 7, - HAL_CAN_Man_kTeamUse = 8, -}; -// clang-format on - #ifdef __cplusplus extern "C" { #endif diff --git a/hal/src/main/native/include/hal/CANAPITypes.h b/hal/src/main/native/include/hal/CANAPITypes.h new file mode 100644 index 0000000000..4bf98bd5dd --- /dev/null +++ b/hal/src/main/native/include/hal/CANAPITypes.h @@ -0,0 +1,56 @@ +/*----------------------------------------------------------------------------*/ +/* Copyright (c) 2018 FIRST. 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 + +#include "hal/Types.h" + +/** + * @defgroup hal_canapi CAN API Functions + * @ingroup hal_capi + * @{ + */ + +// clang-format off +/** + * The CAN device type. + * + * Teams should use HAL_CAN_Dev_kMiscellaneous + */ +HAL_ENUM(HAL_CANDeviceType) { + HAL_CAN_Dev_kBroadcast = 0, + HAL_CAN_Dev_kRobotController = 1, + HAL_CAN_Dev_kMotorController = 2, + HAL_CAN_Dev_kRelayController = 3, + HAL_CAN_Dev_kGyroSensor = 4, + HAL_CAN_Dev_kAccelerometer = 5, + HAL_CAN_Dev_kUltrasonicSensor = 6, + HAL_CAN_Dev_kGearToothSensor = 7, + HAL_CAN_Dev_kPowerDistribution = 8, + HAL_CAN_Dev_kPneumatics = 9, + HAL_CAN_Dev_kMiscellaneous = 10, + HAL_CAN_Dev_kFirmwareUpdate = 31 +}; + +/** + * The CAN manufacturer ID. + * + * Teams should use HAL_CAN_Man_kTeamUse. + */ +HAL_ENUM(HAL_CANManufacturer) { + HAL_CAN_Man_kBroadcast = 0, + HAL_CAN_Man_kNI = 1, + HAL_CAN_Man_kLM = 2, + HAL_CAN_Man_kDEKA = 3, + HAL_CAN_Man_kCTRE = 4, + HAL_CAN_Man_kMS = 7, + HAL_CAN_Man_kTeamUse = 8, +}; +// clang-format on +/** @} */ diff --git a/hal/src/main/native/include/hal/DriverStation.h b/hal/src/main/native/include/hal/DriverStation.h index 34113fba27..1c18681049 100644 --- a/hal/src/main/native/include/hal/DriverStation.h +++ b/hal/src/main/native/include/hal/DriverStation.h @@ -9,6 +9,7 @@ #include +#include "hal/DriverStationTypes.h" #include "hal/Types.h" /** @@ -17,97 +18,6 @@ * @{ */ -#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 - -struct HAL_ControlWord { - 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; -}; -typedef struct HAL_ControlWord HAL_ControlWord; - -// clang-format off -HAL_ENUM(HAL_AllianceStationID) { - HAL_AllianceStationID_kRed1, - HAL_AllianceStationID_kRed2, - HAL_AllianceStationID_kRed3, - HAL_AllianceStationID_kBlue1, - HAL_AllianceStationID_kBlue2, - HAL_AllianceStationID_kBlue3, -}; - -HAL_ENUM(HAL_MatchType) { - HAL_kMatchType_none, - HAL_kMatchType_practice, - HAL_kMatchType_qualification, - HAL_kMatchType_elimination, -}; -// clang-format on - -/* 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. - */ -#define HAL_kMaxJoystickAxes 12 -#define HAL_kMaxJoystickPOVs 12 -#define HAL_kMaxJoysticks 6 - -struct HAL_JoystickAxes { - int16_t count; - float axes[HAL_kMaxJoystickAxes]; -}; -typedef struct HAL_JoystickAxes HAL_JoystickAxes; - -struct HAL_JoystickPOVs { - int16_t count; - int16_t povs[HAL_kMaxJoystickPOVs]; -}; -typedef struct HAL_JoystickPOVs HAL_JoystickPOVs; - -struct HAL_JoystickButtons { - uint32_t buttons; - uint8_t count; -}; -typedef struct HAL_JoystickButtons HAL_JoystickButtons; - -struct HAL_JoystickDescriptor { - uint8_t isXbox; - uint8_t type; - char name[256]; - uint8_t axisCount; - uint8_t axisTypes[HAL_kMaxJoystickAxes]; - uint8_t buttonCount; - uint8_t povCount; -}; -typedef struct HAL_JoystickDescriptor HAL_JoystickDescriptor; - -struct HAL_MatchInfo { - char eventName[64]; - HAL_MatchType matchType; - uint16_t matchNumber; - uint8_t replayNumber; - uint8_t gameSpecificMessage[64]; - uint16_t gameSpecificMessageSize; -}; -typedef struct HAL_MatchInfo HAL_MatchInfo; - #ifdef __cplusplus extern "C" { #endif diff --git a/hal/src/main/native/include/hal/DriverStationTypes.h b/hal/src/main/native/include/hal/DriverStationTypes.h new file mode 100644 index 0000000000..7c5d6f6686 --- /dev/null +++ b/hal/src/main/native/include/hal/DriverStationTypes.h @@ -0,0 +1,110 @@ +/*----------------------------------------------------------------------------*/ +/* Copyright (c) 2018 FIRST. 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 + +#include "hal/Types.h" + +/** + * @defgroup hal_driverstation Driver Station Functions + * @ingroup hal_capi + * @{ + */ + +#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 + +struct HAL_ControlWord { + 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; +}; +typedef struct HAL_ControlWord HAL_ControlWord; + +// clang-format off +HAL_ENUM(HAL_AllianceStationID) { + HAL_AllianceStationID_kRed1, + HAL_AllianceStationID_kRed2, + HAL_AllianceStationID_kRed3, + HAL_AllianceStationID_kBlue1, + HAL_AllianceStationID_kBlue2, + HAL_AllianceStationID_kBlue3, +}; + +HAL_ENUM(HAL_MatchType) { + HAL_kMatchType_none, + HAL_kMatchType_practice, + HAL_kMatchType_qualification, + HAL_kMatchType_elimination, +}; +// clang-format on + +/* 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. + */ +#define HAL_kMaxJoystickAxes 12 +#define HAL_kMaxJoystickPOVs 12 +#define HAL_kMaxJoysticks 6 + +struct HAL_JoystickAxes { + int16_t count; + float axes[HAL_kMaxJoystickAxes]; +}; +typedef struct HAL_JoystickAxes HAL_JoystickAxes; + +struct HAL_JoystickPOVs { + int16_t count; + int16_t povs[HAL_kMaxJoystickPOVs]; +}; +typedef struct HAL_JoystickPOVs HAL_JoystickPOVs; + +struct HAL_JoystickButtons { + uint32_t buttons; + uint8_t count; +}; +typedef struct HAL_JoystickButtons HAL_JoystickButtons; + +struct HAL_JoystickDescriptor { + uint8_t isXbox; + uint8_t type; + char name[256]; + uint8_t axisCount; + uint8_t axisTypes[HAL_kMaxJoystickAxes]; + uint8_t buttonCount; + uint8_t povCount; +}; +typedef struct HAL_JoystickDescriptor HAL_JoystickDescriptor; + +struct HAL_MatchInfo { + char eventName[64]; + HAL_MatchType matchType; + uint16_t matchNumber; + uint8_t replayNumber; + uint8_t gameSpecificMessage[64]; + uint16_t gameSpecificMessageSize; +}; +typedef struct HAL_MatchInfo HAL_MatchInfo; +/** @} */ diff --git a/hal/src/main/native/include/hal/HAL.h b/hal/src/main/native/include/hal/HAL.h index eafe7885ed..f0da13f4d0 100644 --- a/hal/src/main/native/include/hal/HAL.h +++ b/hal/src/main/native/include/hal/HAL.h @@ -39,177 +39,8 @@ #endif // HAL_USE_LABVIEW #include "hal/Types.h" +#include "hal/HALBase.h" #ifdef __cplusplus #include "hal/FRCUsageReporting.h" #endif - -/** - * @defgroup hal_capi WPILib HAL API - * Hardware Abstraction Layer to hardware or simulator - * @{ - */ - -// clang-format off -HAL_ENUM(HAL_RuntimeType) { HAL_Athena, HAL_Mock }; -// clang-format on - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * Gets the error message for a specific status code. - * - * @param code the status code - * @return the error message for the code. This does not need to be freed. - */ -const char* HAL_GetErrorMessage(int32_t code); - -/** - * Returns the FPGA Version number. - * - * For now, expect this to be competition year. - * - * @return FPGA Version number. - */ -int32_t HAL_GetFPGAVersion(int32_t* status); - -/** - * Returns the FPGA Revision number. - * - * The format of the revision is 3 numbers. - * The 12 most significant bits are the Major Revision. - * the next 8 bits are the Minor Revision. - * The 12 least significant bits are the Build Number. - * - * @return FPGA Revision number. - */ -int64_t HAL_GetFPGARevision(int32_t* status); - -HAL_RuntimeType HAL_GetRuntimeType(void); - -/** - * Gets the state of the "USER" button on the roboRIO. - * - * @return true if the button is currently pressed down - */ -HAL_Bool HAL_GetFPGAButton(int32_t* status); - -/** - * Gets if the system outputs are currently active - * - * @return true if the system outputs are active, false if disabled - */ -HAL_Bool HAL_GetSystemActive(int32_t* status); - -/** - * Gets if the system is in a browned out state. - * - * @return true if the system is in a low voltage brown out, false otherwise - */ -HAL_Bool HAL_GetBrownedOut(int32_t* status); - -/** - * The base HAL initialize function. Useful if you need to ensure the DS and - * base HAL functions (the ones above this declaration in HAL.h) are properly - * initialized. For normal programs and executables, please use HAL_Initialize. - * - * This is mainly expected to be use from libraries that are expected to be used - * from LabVIEW, as it handles its own initialization for objects. - */ -void HAL_BaseInitialize(int32_t* status); - -#ifndef HAL_USE_LABVIEW - -/** - * Gets a port handle for a specific channel. - * - * The created handle does not need to be freed. - * - * @param channel the channel number - * @return the created port - */ -HAL_PortHandle HAL_GetPort(int32_t channel); - -/** - * Gets a port handle for a specific channel and module. - * - * This is expected to be used for PCMs, as the roboRIO does not work with - * modules anymore. - * - * The created handle does not need to be freed. - * - * @param module the module number - * @param channel the channel number - * @return the created port - */ -HAL_PortHandle HAL_GetPortWithModule(int32_t module, int32_t channel); - -/** - * Reads the microsecond-resolution timer on the FPGA. - * - * @return The current time in microseconds according to the FPGA (since FPGA - * reset). - */ -uint64_t HAL_GetFPGATime(int32_t* status); - -/** - * Call this to start up HAL. This is required for robot programs. - * - * This must be called before any other HAL functions. Failure to do so will - * result in undefined behavior, and likely segmentation faults. This means that - * any statically initialized variables in a program MUST call this function in - * their constructors if they want to use other HAL calls. - * - * The common parameters are 500 for timeout and 0 for mode. - * - * This function is safe to call from any thread, and as many times as you wish. - * It internally guards from any reentrancy. - * - * The applicable modes are: - * 0: Try to kill an existing HAL from another program, if not successful, - * error. - * 1: Force kill a HAL from another program. - * 2: Just warn if another hal exists and cannot be killed. Will likely result - * in undefined behavior. - * - * @param timeout the initialization timeout (ms) - * @param mode the initialization mode (see remarks) - * @return true if initialization was successful, otherwise false. - */ -HAL_Bool HAL_Initialize(int32_t timeout, int32_t mode); - -// ifdef's definition is to allow for default parameters in C++. -#ifdef __cplusplus -/** - * Reports a hardware usage to the HAL. - * - * @param resource the used resource - * @param instanceNumber the instance of the resource - * @param context a user specified context index - * @param feature a user specified feature string - * @return the index of the added value in NetComm - */ -int64_t HAL_Report(int32_t resource, int32_t instanceNumber, - int32_t context = 0, const char* feature = nullptr); -#else - -/** - * Reports a hardware usage to the HAL. - * - * @param resource the used resource - * @param instanceNumber the instance of the resource - * @param context a user specified context index - * @param feature a user specified feature string - * @return the index of the added value in NetComm - */ -int64_t HAL_Report(int32_t resource, int32_t instanceNumber, int32_t context, - const char* feature); -#endif - -#endif // HAL_USE_LABVIEW -#ifdef __cplusplus -} // extern "C" -#endif -/** @} */ diff --git a/hal/src/main/native/include/hal/HALBase.h b/hal/src/main/native/include/hal/HALBase.h new file mode 100644 index 0000000000..fd22c0c8b4 --- /dev/null +++ b/hal/src/main/native/include/hal/HALBase.h @@ -0,0 +1,182 @@ +/*----------------------------------------------------------------------------*/ +/* Copyright (c) 2008-2018 FIRST. 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 + +#include "hal/Types.h" + +/** + * @defgroup hal_capi WPILib HAL API + * Hardware Abstraction Layer to hardware or simulator + * @{ + */ + +// clang-format off +HAL_ENUM(HAL_RuntimeType) { HAL_Athena, HAL_Mock }; +// clang-format on + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Gets the error message for a specific status code. + * + * @param code the status code + * @return the error message for the code. This does not need to be freed. + */ +const char* HAL_GetErrorMessage(int32_t code); + +/** + * Returns the FPGA Version number. + * + * For now, expect this to be competition year. + * + * @return FPGA Version number. + */ +int32_t HAL_GetFPGAVersion(int32_t* status); + +/** + * Returns the FPGA Revision number. + * + * The format of the revision is 3 numbers. + * The 12 most significant bits are the Major Revision. + * the next 8 bits are the Minor Revision. + * The 12 least significant bits are the Build Number. + * + * @return FPGA Revision number. + */ +int64_t HAL_GetFPGARevision(int32_t* status); + +HAL_RuntimeType HAL_GetRuntimeType(void); + +/** + * Gets the state of the "USER" button on the roboRIO. + * + * @return true if the button is currently pressed down + */ +HAL_Bool HAL_GetFPGAButton(int32_t* status); + +/** + * Gets if the system outputs are currently active + * + * @return true if the system outputs are active, false if disabled + */ +HAL_Bool HAL_GetSystemActive(int32_t* status); + +/** + * Gets if the system is in a browned out state. + * + * @return true if the system is in a low voltage brown out, false otherwise + */ +HAL_Bool HAL_GetBrownedOut(int32_t* status); + +/** + * The base HAL initialize function. Useful if you need to ensure the DS and + * base HAL functions (the ones above this declaration in HAL.h) are properly + * initialized. For normal programs and executables, please use HAL_Initialize. + * + * This is mainly expected to be use from libraries that are expected to be used + * from LabVIEW, as it handles its own initialization for objects. + */ +void HAL_BaseInitialize(int32_t* status); + +#ifndef HAL_USE_LABVIEW + +/** + * Gets a port handle for a specific channel. + * + * The created handle does not need to be freed. + * + * @param channel the channel number + * @return the created port + */ +HAL_PortHandle HAL_GetPort(int32_t channel); + +/** + * Gets a port handle for a specific channel and module. + * + * This is expected to be used for PCMs, as the roboRIO does not work with + * modules anymore. + * + * The created handle does not need to be freed. + * + * @param module the module number + * @param channel the channel number + * @return the created port + */ +HAL_PortHandle HAL_GetPortWithModule(int32_t module, int32_t channel); + +/** + * Reads the microsecond-resolution timer on the FPGA. + * + * @return The current time in microseconds according to the FPGA (since FPGA + * reset). + */ +uint64_t HAL_GetFPGATime(int32_t* status); + +/** + * Call this to start up HAL. This is required for robot programs. + * + * This must be called before any other HAL functions. Failure to do so will + * result in undefined behavior, and likely segmentation faults. This means that + * any statically initialized variables in a program MUST call this function in + * their constructors if they want to use other HAL calls. + * + * The common parameters are 500 for timeout and 0 for mode. + * + * This function is safe to call from any thread, and as many times as you wish. + * It internally guards from any reentrancy. + * + * The applicable modes are: + * 0: Try to kill an existing HAL from another program, if not successful, + * error. + * 1: Force kill a HAL from another program. + * 2: Just warn if another hal exists and cannot be killed. Will likely result + * in undefined behavior. + * + * @param timeout the initialization timeout (ms) + * @param mode the initialization mode (see remarks) + * @return true if initialization was successful, otherwise false. + */ +HAL_Bool HAL_Initialize(int32_t timeout, int32_t mode); + +// ifdef's definition is to allow for default parameters in C++. +#ifdef __cplusplus +/** + * Reports a hardware usage to the HAL. + * + * @param resource the used resource + * @param instanceNumber the instance of the resource + * @param context a user specified context index + * @param feature a user specified feature string + * @return the index of the added value in NetComm + */ +int64_t HAL_Report(int32_t resource, int32_t instanceNumber, + int32_t context = 0, const char* feature = nullptr); +#else + +/** + * Reports a hardware usage to the HAL. + * + * @param resource the used resource + * @param instanceNumber the instance of the resource + * @param context a user specified context index + * @param feature a user specified feature string + * @return the index of the added value in NetComm + */ +int64_t HAL_Report(int32_t resource, int32_t instanceNumber, int32_t context, + const char* feature); +#endif + +#endif // HAL_USE_LABVIEW +#ifdef __cplusplus +} // extern "C" +#endif +/** @} */ diff --git a/hal/src/main/native/include/hal/I2C.h b/hal/src/main/native/include/hal/I2C.h index 51a7135028..fc8b5c8f63 100644 --- a/hal/src/main/native/include/hal/I2C.h +++ b/hal/src/main/native/include/hal/I2C.h @@ -9,6 +9,7 @@ #include +#include "hal/I2CTypes.h" #include "hal/Types.h" /** @@ -17,10 +18,6 @@ * @{ */ -// clang-format off -HAL_ENUM(HAL_I2CPort) { HAL_I2C_kInvalid = -1, HAL_I2C_kOnboard, HAL_I2C_kMXP }; -// clang-format on - #ifdef __cplusplus extern "C" { #endif diff --git a/hal/src/main/native/include/hal/I2CTypes.h b/hal/src/main/native/include/hal/I2CTypes.h new file mode 100644 index 0000000000..d0b269fd59 --- /dev/null +++ b/hal/src/main/native/include/hal/I2CTypes.h @@ -0,0 +1,24 @@ +/*----------------------------------------------------------------------------*/ +/* Copyright (c) 2018 FIRST. 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 + +#include "hal/Types.h" + +/** + * @defgroup hal_i2c I2C Functions + * @ingroup hal_capi + * @{ + */ + +// clang-format off +HAL_ENUM(HAL_I2CPort) { HAL_I2C_kInvalid = -1, HAL_I2C_kOnboard, HAL_I2C_kMXP }; +// clang-format on + +/** @} */ diff --git a/hal/src/main/native/include/hal/SPI.h b/hal/src/main/native/include/hal/SPI.h index 36eb83c663..657b20e7f2 100644 --- a/hal/src/main/native/include/hal/SPI.h +++ b/hal/src/main/native/include/hal/SPI.h @@ -10,6 +10,7 @@ #include #include "hal/AnalogTrigger.h" +#include "hal/SPITypes.h" #include "hal/Types.h" /** @@ -18,17 +19,6 @@ * @{ */ -// clang-format off -HAL_ENUM(HAL_SPIPort) { - HAL_SPI_kInvalid = -1, - HAL_SPI_kOnboardCS0, - HAL_SPI_kOnboardCS1, - HAL_SPI_kOnboardCS2, - HAL_SPI_kOnboardCS3, - HAL_SPI_kMXP -}; -// clang-format on - #ifdef __cplusplus extern "C" { #endif diff --git a/hal/src/main/native/include/hal/SPITypes.h b/hal/src/main/native/include/hal/SPITypes.h new file mode 100644 index 0000000000..907623c94a --- /dev/null +++ b/hal/src/main/native/include/hal/SPITypes.h @@ -0,0 +1,30 @@ +/*----------------------------------------------------------------------------*/ +/* Copyright (c) 2018 FIRST. 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 + +#include "hal/Types.h" + +/** + * @defgroup hal_spi SPI Functions + * @ingroup hal_capi + * @{ + */ + +// clang-format off +HAL_ENUM(HAL_SPIPort) { + HAL_SPI_kInvalid = -1, + HAL_SPI_kOnboardCS0, + HAL_SPI_kOnboardCS1, + HAL_SPI_kOnboardCS2, + HAL_SPI_kOnboardCS3, + HAL_SPI_kMXP +}; +// clang-format on +/** @} */ diff --git a/hal/src/main/native/include/mockdata/AccelerometerData.h b/hal/src/main/native/include/mockdata/AccelerometerData.h index 7591fbda85..79f151dd07 100644 --- a/hal/src/main/native/include/mockdata/AccelerometerData.h +++ b/hal/src/main/native/include/mockdata/AccelerometerData.h @@ -10,7 +10,8 @@ #ifndef __FRC_ROBORIO__ #include "NotifyListener.h" -#include "hal/HAL.h" +#include "hal/Accelerometer.h" +#include "hal/Types.h" #ifdef __cplusplus extern "C" { diff --git a/hal/src/main/native/include/mockdata/AnalogGyroData.h b/hal/src/main/native/include/mockdata/AnalogGyroData.h index 15a35a2f95..5b648eef8b 100644 --- a/hal/src/main/native/include/mockdata/AnalogGyroData.h +++ b/hal/src/main/native/include/mockdata/AnalogGyroData.h @@ -10,7 +10,7 @@ #ifndef __FRC_ROBORIO__ #include "NotifyListener.h" -#include "hal/HAL.h" +#include "hal/Types.h" #ifdef __cplusplus extern "C" { diff --git a/hal/src/main/native/include/mockdata/AnalogInData.h b/hal/src/main/native/include/mockdata/AnalogInData.h index 0eb6f44a74..7a95164a28 100644 --- a/hal/src/main/native/include/mockdata/AnalogInData.h +++ b/hal/src/main/native/include/mockdata/AnalogInData.h @@ -10,7 +10,7 @@ #ifndef __FRC_ROBORIO__ #include "NotifyListener.h" -#include "hal/HAL.h" +#include "hal/Types.h" #ifdef __cplusplus extern "C" { diff --git a/hal/src/main/native/include/mockdata/AnalogOutData.h b/hal/src/main/native/include/mockdata/AnalogOutData.h index 8ffa86b02a..48046ecce7 100644 --- a/hal/src/main/native/include/mockdata/AnalogOutData.h +++ b/hal/src/main/native/include/mockdata/AnalogOutData.h @@ -10,7 +10,7 @@ #ifndef __FRC_ROBORIO__ #include "NotifyListener.h" -#include "hal/HAL.h" +#include "hal/Types.h" #ifdef __cplusplus extern "C" { diff --git a/hal/src/main/native/include/mockdata/AnalogTriggerData.h b/hal/src/main/native/include/mockdata/AnalogTriggerData.h index cc2201efc9..8146b8fe8e 100644 --- a/hal/src/main/native/include/mockdata/AnalogTriggerData.h +++ b/hal/src/main/native/include/mockdata/AnalogTriggerData.h @@ -10,7 +10,7 @@ #ifndef __FRC_ROBORIO__ #include "NotifyListener.h" -#include "hal/HAL.h" +#include "hal/Types.h" enum HALSIM_AnalogTriggerMode : int32_t { HALSIM_AnalogTriggerUnassigned, diff --git a/hal/src/main/native/include/mockdata/CanData.h b/hal/src/main/native/include/mockdata/CanData.h index 95568541dd..4d76dcaf9f 100644 --- a/hal/src/main/native/include/mockdata/CanData.h +++ b/hal/src/main/native/include/mockdata/CanData.h @@ -11,7 +11,7 @@ #include "HAL_Value.h" #include "NotifyListener.h" -#include "hal/HAL.h" +#include "hal/Types.h" typedef void (*HAL_CAN_SendMessageCallback)(const char* name, void* param, uint32_t messageID, diff --git a/hal/src/main/native/include/mockdata/DIOData.h b/hal/src/main/native/include/mockdata/DIOData.h index 7fc0825483..b3bd9f238e 100644 --- a/hal/src/main/native/include/mockdata/DIOData.h +++ b/hal/src/main/native/include/mockdata/DIOData.h @@ -10,7 +10,7 @@ #ifndef __FRC_ROBORIO__ #include "NotifyListener.h" -#include "hal/HAL.h" +#include "hal/Types.h" #ifdef __cplusplus extern "C" { diff --git a/hal/src/main/native/include/mockdata/DigitalPWMData.h b/hal/src/main/native/include/mockdata/DigitalPWMData.h index 130d829839..d35e313ba9 100644 --- a/hal/src/main/native/include/mockdata/DigitalPWMData.h +++ b/hal/src/main/native/include/mockdata/DigitalPWMData.h @@ -10,7 +10,7 @@ #ifndef __FRC_ROBORIO__ #include "NotifyListener.h" -#include "hal/HAL.h" +#include "hal/Types.h" #ifdef __cplusplus extern "C" { diff --git a/hal/src/main/native/include/mockdata/DriverStationData.h b/hal/src/main/native/include/mockdata/DriverStationData.h index 06099735ae..57ca4e019b 100644 --- a/hal/src/main/native/include/mockdata/DriverStationData.h +++ b/hal/src/main/native/include/mockdata/DriverStationData.h @@ -10,8 +10,8 @@ #ifndef __FRC_ROBORIO__ #include "NotifyListener.h" -#include "hal/DriverStation.h" -#include "hal/HAL.h" +#include "hal/DriverStationTypes.h" +#include "hal/Types.h" #ifdef __cplusplus extern "C" { diff --git a/hal/src/main/native/include/mockdata/EncoderData.h b/hal/src/main/native/include/mockdata/EncoderData.h index eac1f7f826..bcd00a7469 100644 --- a/hal/src/main/native/include/mockdata/EncoderData.h +++ b/hal/src/main/native/include/mockdata/EncoderData.h @@ -10,7 +10,7 @@ #ifndef __FRC_ROBORIO__ #include "NotifyListener.h" -#include "hal/HAL.h" +#include "hal/Types.h" #ifdef __cplusplus extern "C" { diff --git a/hal/src/main/native/include/mockdata/I2CData.h b/hal/src/main/native/include/mockdata/I2CData.h index a7027d4edb..8565fdb436 100644 --- a/hal/src/main/native/include/mockdata/I2CData.h +++ b/hal/src/main/native/include/mockdata/I2CData.h @@ -10,7 +10,7 @@ #ifndef __FRC_ROBORIO__ #include "NotifyListener.h" -#include "hal/HAL.h" +#include "hal/Types.h" #ifdef __cplusplus extern "C" { diff --git a/hal/src/main/native/include/mockdata/PCMData.h b/hal/src/main/native/include/mockdata/PCMData.h index 057fb1e63f..d919cc9125 100644 --- a/hal/src/main/native/include/mockdata/PCMData.h +++ b/hal/src/main/native/include/mockdata/PCMData.h @@ -10,7 +10,7 @@ #ifndef __FRC_ROBORIO__ #include "NotifyListener.h" -#include "hal/HAL.h" +#include "hal/Types.h" #ifdef __cplusplus extern "C" { diff --git a/hal/src/main/native/include/mockdata/PDPData.h b/hal/src/main/native/include/mockdata/PDPData.h index d05f0e9004..be24da87c1 100644 --- a/hal/src/main/native/include/mockdata/PDPData.h +++ b/hal/src/main/native/include/mockdata/PDPData.h @@ -10,7 +10,7 @@ #ifndef __FRC_ROBORIO__ #include "NotifyListener.h" -#include "hal/HAL.h" +#include "hal/Types.h" #ifdef __cplusplus extern "C" { diff --git a/hal/src/main/native/include/mockdata/PWMData.h b/hal/src/main/native/include/mockdata/PWMData.h index f64a6b2157..08ba3571d7 100644 --- a/hal/src/main/native/include/mockdata/PWMData.h +++ b/hal/src/main/native/include/mockdata/PWMData.h @@ -10,7 +10,7 @@ #ifndef __FRC_ROBORIO__ #include "NotifyListener.h" -#include "hal/HAL.h" +#include "hal/Types.h" #ifdef __cplusplus extern "C" { diff --git a/hal/src/main/native/include/mockdata/RelayData.h b/hal/src/main/native/include/mockdata/RelayData.h index eb123c7fef..6fdac7f2a1 100644 --- a/hal/src/main/native/include/mockdata/RelayData.h +++ b/hal/src/main/native/include/mockdata/RelayData.h @@ -10,7 +10,7 @@ #ifndef __FRC_ROBORIO__ #include "NotifyListener.h" -#include "hal/HAL.h" +#include "hal/Types.h" #ifdef __cplusplus extern "C" { diff --git a/hal/src/main/native/include/mockdata/RoboRioData.h b/hal/src/main/native/include/mockdata/RoboRioData.h index 0d8ff167f0..88b6ece387 100644 --- a/hal/src/main/native/include/mockdata/RoboRioData.h +++ b/hal/src/main/native/include/mockdata/RoboRioData.h @@ -10,7 +10,7 @@ #ifndef __FRC_ROBORIO__ #include "NotifyListener.h" -#include "hal/HAL.h" +#include "hal/Types.h" #ifdef __cplusplus extern "C" { diff --git a/hal/src/main/native/include/mockdata/SPIAccelerometerData.h b/hal/src/main/native/include/mockdata/SPIAccelerometerData.h index 52affe464f..6e37f4066e 100644 --- a/hal/src/main/native/include/mockdata/SPIAccelerometerData.h +++ b/hal/src/main/native/include/mockdata/SPIAccelerometerData.h @@ -10,7 +10,7 @@ #ifndef __FRC_ROBORIO__ #include "NotifyListener.h" -#include "hal/HAL.h" +#include "hal/Types.h" #ifdef __cplusplus extern "C" { diff --git a/hal/src/main/native/include/mockdata/SPIData.h b/hal/src/main/native/include/mockdata/SPIData.h index 519b029332..4f0cc75870 100644 --- a/hal/src/main/native/include/mockdata/SPIData.h +++ b/hal/src/main/native/include/mockdata/SPIData.h @@ -10,7 +10,7 @@ #ifndef __FRC_ROBORIO__ #include "NotifyListener.h" -#include "hal/HAL.h" +#include "hal/Types.h" typedef void (*HAL_SpiReadAutoReceiveBufferCallback)(const char* name, void* param, diff --git a/hal/src/main/native/sim/AnalogInput.cpp b/hal/src/main/native/sim/AnalogInput.cpp index 2ef33064a4..a0f44a77b4 100644 --- a/hal/src/main/native/sim/AnalogInput.cpp +++ b/hal/src/main/native/sim/AnalogInput.cpp @@ -10,6 +10,7 @@ #include "AnalogInternal.h" #include "HALInitializer.h" #include "PortsInternal.h" +#include "hal/AnalogAccumulator.h" #include "hal/handles/HandlesInternal.h" #include "mockdata/AnalogInDataInternal.h" diff --git a/hal/src/main/native/sim/mockdata/DriverStationData.cpp b/hal/src/main/native/sim/mockdata/DriverStationData.cpp index dffb9c5512..7ddb8cf2ae 100644 --- a/hal/src/main/native/sim/mockdata/DriverStationData.cpp +++ b/hal/src/main/native/sim/mockdata/DriverStationData.cpp @@ -10,6 +10,7 @@ #include #include "DriverStationDataInternal.h" +#include "hal/DriverStation.h" namespace hal { struct JoystickOutputStore { diff --git a/simulation/halsim_ds_socket/src/main/native/include/DSCommJoystickPacket.h b/simulation/halsim_ds_socket/src/main/native/include/DSCommJoystickPacket.h index 4d34b8ff64..6f7e0bf714 100644 --- a/simulation/halsim_ds_socket/src/main/native/include/DSCommJoystickPacket.h +++ b/simulation/halsim_ds_socket/src/main/native/include/DSCommJoystickPacket.h @@ -9,7 +9,7 @@ #include -#include +#include namespace halsim { diff --git a/wpilibc/src/main/native/cpp/CAN.cpp b/wpilibc/src/main/native/cpp/CAN.cpp index 8798b42504..f01eb3f687 100644 --- a/wpilibc/src/main/native/cpp/CAN.cpp +++ b/wpilibc/src/main/native/cpp/CAN.cpp @@ -9,7 +9,11 @@ #include -#include +#include +#include +#include +#include +#include using namespace frc; diff --git a/wpilibc/src/main/native/cpp/Encoder.cpp b/wpilibc/src/main/native/cpp/Encoder.cpp index 194ba8d7af..77e7a2a99e 100644 --- a/wpilibc/src/main/native/cpp/Encoder.cpp +++ b/wpilibc/src/main/native/cpp/Encoder.cpp @@ -9,7 +9,9 @@ #include -#include +#include +#include +#include #include "frc/DigitalInput.h" #include "frc/WPIErrors.h" diff --git a/wpilibc/src/main/native/cpp/RobotBase.cpp b/wpilibc/src/main/native/cpp/RobotBase.cpp index 6d1654e886..da30c03612 100644 --- a/wpilibc/src/main/native/cpp/RobotBase.cpp +++ b/wpilibc/src/main/native/cpp/RobotBase.cpp @@ -23,6 +23,17 @@ using namespace frc; +int frc::RunHALInitialization() { + if (!HAL_Initialize(500, 0)) { + wpi::errs() << "FATAL ERROR: HAL could not be initialized\n"; + return -1; + } + HAL_Report(HALUsageReporting::kResourceType_Language, + HALUsageReporting::kLanguage_CPlusPlus); + wpi::outs() << "\n********** Robot program starting **********\n"; + return 0; +} + std::thread::id RobotBase::m_threadId; namespace { diff --git a/wpilibc/src/main/native/cpp/SampleRobot.cpp b/wpilibc/src/main/native/cpp/SampleRobot.cpp index 2ab60fe54f..338f7beeb1 100644 --- a/wpilibc/src/main/native/cpp/SampleRobot.cpp +++ b/wpilibc/src/main/native/cpp/SampleRobot.cpp @@ -7,6 +7,9 @@ #include "frc/SampleRobot.h" +#include +#include +#include #include #include diff --git a/wpilibc/src/main/native/include/frc/AnalogOutput.h b/wpilibc/src/main/native/include/frc/AnalogOutput.h index 372d0ab3b2..3c7b44e5a9 100644 --- a/wpilibc/src/main/native/include/frc/AnalogOutput.h +++ b/wpilibc/src/main/native/include/frc/AnalogOutput.h @@ -7,7 +7,7 @@ #pragma once -#include +#include #include "frc/ErrorBase.h" #include "frc/smartdashboard/SendableBase.h" diff --git a/wpilibc/src/main/native/include/frc/AnalogTriggerOutput.h b/wpilibc/src/main/native/include/frc/AnalogTriggerOutput.h index eae7aef203..fc3d8f252d 100644 --- a/wpilibc/src/main/native/include/frc/AnalogTriggerOutput.h +++ b/wpilibc/src/main/native/include/frc/AnalogTriggerOutput.h @@ -7,8 +7,6 @@ #pragma once -#include - #include "frc/DigitalSource.h" namespace frc { diff --git a/wpilibc/src/main/native/include/frc/CAN.h b/wpilibc/src/main/native/include/frc/CAN.h index edb708e834..4cd06e9d7f 100644 --- a/wpilibc/src/main/native/include/frc/CAN.h +++ b/wpilibc/src/main/native/include/frc/CAN.h @@ -9,7 +9,7 @@ #include -#include +#include #include #include "frc/ErrorBase.h" diff --git a/wpilibc/src/main/native/include/frc/Counter.h b/wpilibc/src/main/native/include/frc/Counter.h index dff19a9a52..2705a39413 100644 --- a/wpilibc/src/main/native/include/frc/Counter.h +++ b/wpilibc/src/main/native/include/frc/Counter.h @@ -9,7 +9,6 @@ #include -#include #include #include "frc/AnalogTrigger.h" diff --git a/wpilibc/src/main/native/include/frc/DriverStation.h b/wpilibc/src/main/native/include/frc/DriverStation.h index d98754b563..366100658b 100644 --- a/wpilibc/src/main/native/include/frc/DriverStation.h +++ b/wpilibc/src/main/native/include/frc/DriverStation.h @@ -13,7 +13,7 @@ #include #include -#include +#include #include #include #include diff --git a/wpilibc/src/main/native/include/frc/Encoder.h b/wpilibc/src/main/native/include/frc/Encoder.h index 02592473cc..7096eeb061 100644 --- a/wpilibc/src/main/native/include/frc/Encoder.h +++ b/wpilibc/src/main/native/include/frc/Encoder.h @@ -9,7 +9,7 @@ #include -#include +#include #include "frc/Counter.h" #include "frc/CounterBase.h" diff --git a/wpilibc/src/main/native/include/frc/I2C.h b/wpilibc/src/main/native/include/frc/I2C.h index 81d13dc2e2..4623c44be3 100644 --- a/wpilibc/src/main/native/include/frc/I2C.h +++ b/wpilibc/src/main/native/include/frc/I2C.h @@ -9,7 +9,7 @@ #include -#include +#include #include "frc/ErrorBase.h" diff --git a/wpilibc/src/main/native/include/frc/Notifier.h b/wpilibc/src/main/native/include/frc/Notifier.h index 399f742c58..47380bce09 100644 --- a/wpilibc/src/main/native/include/frc/Notifier.h +++ b/wpilibc/src/main/native/include/frc/Notifier.h @@ -14,7 +14,7 @@ #include #include -#include +#include #include #include "frc/ErrorBase.h" diff --git a/wpilibc/src/main/native/include/frc/PowerDistributionPanel.h b/wpilibc/src/main/native/include/frc/PowerDistributionPanel.h index 3be25513fb..2d7f65cda6 100644 --- a/wpilibc/src/main/native/include/frc/PowerDistributionPanel.h +++ b/wpilibc/src/main/native/include/frc/PowerDistributionPanel.h @@ -7,7 +7,7 @@ #pragma once -#include +#include #include "frc/ErrorBase.h" #include "frc/smartdashboard/SendableBase.h" diff --git a/wpilibc/src/main/native/include/frc/RobotBase.h b/wpilibc/src/main/native/include/frc/RobotBase.h index 62e685846f..45433f9e0e 100644 --- a/wpilibc/src/main/native/include/frc/RobotBase.h +++ b/wpilibc/src/main/native/include/frc/RobotBase.h @@ -9,7 +9,6 @@ #include -#include #include #include "frc/Base.h" @@ -18,15 +17,14 @@ namespace frc { class DriverStation; +int RunHALInitialization(); + template int StartRobot() { - if (!HAL_Initialize(500, 0)) { - wpi::errs() << "FATAL ERROR: HAL could not be initialized\n"; - return -1; + int halInit = RunHALInitialization(); + if (halInit != 0) { + return halInit; } - HAL_Report(HALUsageReporting::kResourceType_Language, - HALUsageReporting::kLanguage_CPlusPlus); - wpi::outs() << "\n********** Robot program starting **********\n"; static Robot robot; robot.StartCompetition(); diff --git a/wpilibc/src/main/native/include/frc/SPI.h b/wpilibc/src/main/native/include/frc/SPI.h index f03a91a861..c5963df984 100644 --- a/wpilibc/src/main/native/include/frc/SPI.h +++ b/wpilibc/src/main/native/include/frc/SPI.h @@ -11,7 +11,7 @@ #include -#include +#include #include #include diff --git a/wpilibc/src/main/native/include/frc/TimedRobot.h b/wpilibc/src/main/native/include/frc/TimedRobot.h index c0f087fc3c..a6da5ee299 100644 --- a/wpilibc/src/main/native/include/frc/TimedRobot.h +++ b/wpilibc/src/main/native/include/frc/TimedRobot.h @@ -7,7 +7,7 @@ #pragma once -#include +#include #include "frc/ErrorBase.h" #include "frc/IterativeRobotBase.h"