WPILibC++ 2027.0.0-alpha-2
Loading...
Searching...
No Matches
CAN API Functions

Classes

struct  HAL_CANMessage
 
struct  HAL_CANReceiveMessage
 

Macros

#define HAL_CAN_SEND_PERIOD_NO_REPEAT   0
 Flag for sending a CAN message once.
 
#define HAL_CAN_SEND_PERIOD_STOP_REPEATING   -1
 Flag for stopping periodic CAN message sends.
 
#define HAL_CAN_IS_FRAME_REMOTE   0x40000000
 Mask for "is frame remote" in message ID.
 
#define HAL_CAN_IS_FRAME_11BIT   0x80000000
 Mask for "is frame 11 bits" in message ID.
 

Enumerations

enum  HAL_CANDeviceType : int32_t {
  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_kIOBreakout = 11 ,
  HAL_CAN_Dev_kServoController = 12 , HAL_CAN_Dev_kFirmwareUpdate = 31
}
 The CAN device type. More...
 
enum  HAL_CANManufacturer : int32_t {
  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_kREV = 5 , HAL_CAN_Man_kGrapple = 6 , HAL_CAN_Man_kMS = 7 ,
  HAL_CAN_Man_kTeamUse = 8 , HAL_CAN_Man_kKauaiLabs = 9 , HAL_CAN_Man_kCopperforge = 10 , HAL_CAN_Man_kPWF = 11 ,
  HAL_CAN_Man_kStudica = 12 , HAL_CAN_Man_kTheThriftyBot = 13 , HAL_CAN_Man_kReduxRobotics = 14 , HAL_CAN_Man_kAndyMark = 15 ,
  HAL_CAN_Man_kVividHosting = 16
}
 The CAN manufacturer ID. More...
 
enum  HAL_CANFlags : int32_t { HAL_CAN_NO_FLAGS = 0x0 , HAL_CAN_FD_BITRATESWITCH = 0x1 , HAL_CAN_FD_DATALENGTH = 0x2 }
 

Functions

HAL_CANHandle HAL_InitializeCAN (int32_t busId, HAL_CANManufacturer manufacturer, int32_t deviceId, HAL_CANDeviceType deviceType, int32_t *status)
 Initializes a CAN device.
 
void HAL_CleanCAN (HAL_CANHandle handle)
 Frees a CAN device.
 
void HAL_WriteCANPacket (HAL_CANHandle handle, int32_t apiId, const struct HAL_CANMessage *message, int32_t *status)
 Writes a packet to the CAN device with a specific ID.
 
void HAL_WriteCANPacketRepeating (HAL_CANHandle handle, int32_t apiId, const struct HAL_CANMessage *message, int32_t repeatMs, int32_t *status)
 Writes a repeating packet to the CAN device with a specific ID.
 
void HAL_WriteCANRTRFrame (HAL_CANHandle handle, int32_t apiId, const struct HAL_CANMessage *message, int32_t *status)
 Writes an RTR frame of the specified length to the CAN device with the specific ID.
 
void HAL_StopCANPacketRepeating (HAL_CANHandle handle, int32_t apiId, int32_t *status)
 Stops a repeating packet with a specific ID.
 
void HAL_ReadCANPacketNew (HAL_CANHandle handle, int32_t apiId, struct HAL_CANReceiveMessage *message, int32_t *status)
 Reads a new CAN packet.
 
void HAL_ReadCANPacketLatest (HAL_CANHandle handle, int32_t apiId, struct HAL_CANReceiveMessage *message, int32_t *status)
 Reads a CAN packet.
 
void HAL_ReadCANPacketTimeout (HAL_CANHandle handle, int32_t apiId, struct HAL_CANReceiveMessage *message, int32_t timeoutMs, int32_t *status)
 Reads a CAN packet.
 

Detailed Description

Macro Definition Documentation

◆ HAL_CAN_IS_FRAME_11BIT

#define HAL_CAN_IS_FRAME_11BIT   0x80000000

Mask for "is frame 11 bits" in message ID.

◆ HAL_CAN_IS_FRAME_REMOTE

#define HAL_CAN_IS_FRAME_REMOTE   0x40000000

Mask for "is frame remote" in message ID.

◆ HAL_CAN_SEND_PERIOD_NO_REPEAT

#define HAL_CAN_SEND_PERIOD_NO_REPEAT   0

Flag for sending a CAN message once.

◆ HAL_CAN_SEND_PERIOD_STOP_REPEATING

#define HAL_CAN_SEND_PERIOD_STOP_REPEATING   -1

Flag for stopping periodic CAN message sends.

Enumeration Type Documentation

◆ HAL_CANDeviceType

enum HAL_CANDeviceType : int32_t

The CAN device type.

Teams should use HAL_CAN_Dev_kMiscellaneous

Enumerator
HAL_CAN_Dev_kBroadcast 

Broadcast.

HAL_CAN_Dev_kRobotController 

Robot controller.

HAL_CAN_Dev_kMotorController 

Motor controller.

HAL_CAN_Dev_kRelayController 

Relay controller.

HAL_CAN_Dev_kGyroSensor 

Gyro sensor.

HAL_CAN_Dev_kAccelerometer 

Accelerometer.

HAL_CAN_Dev_kUltrasonicSensor 

Ultrasonic sensor.

HAL_CAN_Dev_kGearToothSensor 

Gear tooth sensor.

HAL_CAN_Dev_kPowerDistribution 

Power distribution.

HAL_CAN_Dev_kPneumatics 

Pneumatics.

HAL_CAN_Dev_kMiscellaneous 

Miscellaneous.

HAL_CAN_Dev_kIOBreakout 

IO breakout.

HAL_CAN_Dev_kServoController 
HAL_CAN_Dev_kFirmwareUpdate 

Firmware update.

◆ HAL_CANFlags

enum HAL_CANFlags : int32_t
Enumerator
HAL_CAN_NO_FLAGS 

Placeholder for no flags.

HAL_CAN_FD_BITRATESWITCH 

Mask for if frame will do FD bit rate switching.

Only matters to send.

HAL_CAN_FD_DATALENGTH 

Mask for is frame will contain an FD length.

◆ HAL_CANManufacturer

enum HAL_CANManufacturer : int32_t

The CAN manufacturer ID.

Teams should use HAL_CAN_Man_kTeamUse.

Enumerator
HAL_CAN_Man_kBroadcast 

Broadcast.

HAL_CAN_Man_kNI 

National Instruments.

HAL_CAN_Man_kLM 

Luminary Micro.

HAL_CAN_Man_kDEKA 

DEKA Research and Development Corp.

HAL_CAN_Man_kCTRE 

Cross the Road Electronics.

HAL_CAN_Man_kREV 

REV robotics.

HAL_CAN_Man_kGrapple 

Grapple.

HAL_CAN_Man_kMS 

MindSensors.

HAL_CAN_Man_kTeamUse 

Team use.

HAL_CAN_Man_kKauaiLabs 

Kauai Labs.

HAL_CAN_Man_kCopperforge 

Copperforge.

HAL_CAN_Man_kPWF 

Playing With Fusion.

HAL_CAN_Man_kStudica 

Studica.

HAL_CAN_Man_kTheThriftyBot 

TheThriftyBot.

HAL_CAN_Man_kReduxRobotics 

Redux Robotics.

HAL_CAN_Man_kAndyMark 

AndyMark.

HAL_CAN_Man_kVividHosting 

Vivid-Hosting.

Function Documentation

◆ HAL_CleanCAN()

void HAL_CleanCAN ( HAL_CANHandle handle)

Frees a CAN device.

Parameters
handlethe CAN handle

◆ HAL_InitializeCAN()

HAL_CANHandle HAL_InitializeCAN ( int32_t busId,
HAL_CANManufacturer manufacturer,
int32_t deviceId,
HAL_CANDeviceType deviceType,
int32_t * status )

Initializes a CAN device.

These follow the FIRST standard CAN layout. https://docs.wpilib.org/en/stable/docs/software/can-devices/can-addressing.html

Parameters
[in]busIdthe bus id
[in]manufacturerthe can manufacturer
[in]deviceIdthe device ID (0-63)
[in]deviceTypethe device type
[out]statusError status variable. 0 on success.
Returns
the created CAN handle

◆ HAL_ReadCANPacketLatest()

void HAL_ReadCANPacketLatest ( HAL_CANHandle handle,
int32_t apiId,
struct HAL_CANReceiveMessage * message,
int32_t * status )

Reads a CAN packet.

The will continuously return the last packet received, without accounting for packet age.

Parameters
[in]handlethe CAN handle
[in]apiIdthe ID to read (0-1023)
[out]messagethe message received.
[out]statusError status variable. 0 on success.

◆ HAL_ReadCANPacketNew()

void HAL_ReadCANPacketNew ( HAL_CANHandle handle,
int32_t apiId,
struct HAL_CANReceiveMessage * message,
int32_t * status )

Reads a new CAN packet.

This will only return properly once per packet received. Multiple calls without receiving another packet will return an error code.

Parameters
[in]handlethe CAN handle
[in]apiIdthe ID to read (0-1023)
[out]messagethe message received.
[out]statusError status variable. 0 on success.

◆ HAL_ReadCANPacketTimeout()

void HAL_ReadCANPacketTimeout ( HAL_CANHandle handle,
int32_t apiId,
struct HAL_CANReceiveMessage * message,
int32_t timeoutMs,
int32_t * status )

Reads a CAN packet.

The will return the last packet received until the packet is older then the requested timeout. Then it will return an error code.

Parameters
[in]handlethe CAN handle
[in]apiIdthe ID to read (0-1023)
[out]messagethe message received.
[out]timeoutMsthe timeout time for the packet
[out]statusError status variable. 0 on success.

◆ HAL_StopCANPacketRepeating()

void HAL_StopCANPacketRepeating ( HAL_CANHandle handle,
int32_t apiId,
int32_t * status )

Stops a repeating packet with a specific ID.

This ID is 10 bits.

Parameters
[in]handlethe CAN handle
[in]apiIdthe ID to stop repeating (0-1023)
[out]statusError status variable. 0 on success.

◆ HAL_WriteCANPacket()

void HAL_WriteCANPacket ( HAL_CANHandle handle,
int32_t apiId,
const struct HAL_CANMessage * message,
int32_t * status )

Writes a packet to the CAN device with a specific ID.

This ID is 10 bits.

Parameters
[in]handlethe CAN handle
[in]apiIdthe ID to write (0-1023)
[in]messagethe message
[out]statusError status variable. 0 on success.

◆ HAL_WriteCANPacketRepeating()

void HAL_WriteCANPacketRepeating ( HAL_CANHandle handle,
int32_t apiId,
const struct HAL_CANMessage * message,
int32_t repeatMs,
int32_t * status )

Writes a repeating packet to the CAN device with a specific ID.

This ID is 10 bits.

The device will automatically repeat the packet at the specified interval

Parameters
[in]handlethe CAN handle
[in]apiIdthe ID to write (0-1023)
[in]messagethe message
[in]repeatMsthe period to repeat in ms
[out]statusError status variable. 0 on success.

◆ HAL_WriteCANRTRFrame()

void HAL_WriteCANRTRFrame ( HAL_CANHandle handle,
int32_t apiId,
const struct HAL_CANMessage * message,
int32_t * status )

Writes an RTR frame of the specified length to the CAN device with the specific ID.

By spec, the length must be equal to the length sent by the other device, otherwise behavior is unspecified.

Parameters
[in]handlethe CAN handle
[in]apiIdthe ID to write (0-1023)
[in]messagethe message
[out]statusError status variable. 0 on success.