WPILibC++ 2023.4.3-108-ge5452e3
CAN API Functions

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_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
}
 The CAN manufacturer ID. More...
 

Functions

uint32_t HAL_GetCANPacketBaseTime (void)
 Reads the current value of the millisecond-resolution timer that the CAN API functions use as a time base. More...
 
HAL_CANHandle HAL_InitializeCAN (HAL_CANManufacturer manufacturer, int32_t deviceId, HAL_CANDeviceType deviceType, int32_t *status)
 Initializes a CAN device. More...
 
void HAL_CleanCAN (HAL_CANHandle handle)
 Frees a CAN device. More...
 
void HAL_WriteCANPacket (HAL_CANHandle handle, const uint8_t *data, int32_t length, int32_t apiId, int32_t *status)
 Writes a packet to the CAN device with a specific ID. More...
 
void HAL_WriteCANPacketRepeating (HAL_CANHandle handle, const uint8_t *data, int32_t length, int32_t apiId, int32_t repeatMs, int32_t *status)
 Writes a repeating packet to the CAN device with a specific ID. More...
 
void HAL_WriteCANRTRFrame (HAL_CANHandle handle, int32_t length, int32_t apiId, int32_t *status)
 Writes an RTR frame of the specified length to the CAN device with the specific ID. More...
 
void HAL_StopCANPacketRepeating (HAL_CANHandle handle, int32_t apiId, int32_t *status)
 Stops a repeating packet with a specific ID. More...
 
void HAL_ReadCANPacketNew (HAL_CANHandle handle, int32_t apiId, uint8_t *data, int32_t *length, uint64_t *receivedTimestamp, int32_t *status)
 Reads a new CAN packet. More...
 
void HAL_ReadCANPacketLatest (HAL_CANHandle handle, int32_t apiId, uint8_t *data, int32_t *length, uint64_t *receivedTimestamp, int32_t *status)
 Reads a CAN packet. More...
 
void HAL_ReadCANPacketTimeout (HAL_CANHandle handle, int32_t apiId, uint8_t *data, int32_t *length, uint64_t *receivedTimestamp, int32_t timeoutMs, int32_t *status)
 Reads a CAN packet. More...
 

Detailed Description

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 
HAL_CAN_Dev_kRobotController 
HAL_CAN_Dev_kMotorController 
HAL_CAN_Dev_kRelayController 
HAL_CAN_Dev_kGyroSensor 
HAL_CAN_Dev_kAccelerometer 
HAL_CAN_Dev_kUltrasonicSensor 
HAL_CAN_Dev_kGearToothSensor 
HAL_CAN_Dev_kPowerDistribution 
HAL_CAN_Dev_kPneumatics 
HAL_CAN_Dev_kMiscellaneous 
HAL_CAN_Dev_kIOBreakout 
HAL_CAN_Dev_kFirmwareUpdate 

◆ HAL_CANManufacturer

enum HAL_CANManufacturer : int32_t

The CAN manufacturer ID.

Teams should use HAL_CAN_Man_kTeamUse.

Enumerator
HAL_CAN_Man_kBroadcast 
HAL_CAN_Man_kNI 
HAL_CAN_Man_kLM 
HAL_CAN_Man_kDEKA 
HAL_CAN_Man_kCTRE 
HAL_CAN_Man_kREV 
HAL_CAN_Man_kGrapple 
HAL_CAN_Man_kMS 
HAL_CAN_Man_kTeamUse 
HAL_CAN_Man_kKauaiLabs 
HAL_CAN_Man_kCopperforge 
HAL_CAN_Man_kPWF 
HAL_CAN_Man_kStudica 
HAL_CAN_Man_kTheThriftyBot 
HAL_CAN_Man_kReduxRobotics 

Function Documentation

◆ HAL_CleanCAN()

void HAL_CleanCAN ( HAL_CANHandle  handle)

Frees a CAN device.

Parameters
[in,out]handlethe CAN handle

◆ HAL_GetCANPacketBaseTime()

uint32_t HAL_GetCANPacketBaseTime ( void  )

Reads the current value of the millisecond-resolution timer that the CAN API functions use as a time base.

Returns
Current value of timer used as a base time by the CAN API in milliseconds.

◆ HAL_InitializeCAN()

HAL_CANHandle HAL_InitializeCAN ( 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]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,
uint8_t *  data,
int32_t *  length,
uint64_t *  receivedTimestamp,
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]datathe packet data (8 bytes)
[out]lengththe received length (0-8 bytes)
[out]receivedTimestampthe packet received timestamp in ms (based off of CLOCK_MONOTONIC)
[out]statusError status variable. 0 on success.

◆ HAL_ReadCANPacketNew()

void HAL_ReadCANPacketNew ( HAL_CANHandle  handle,
int32_t  apiId,
uint8_t *  data,
int32_t *  length,
uint64_t *  receivedTimestamp,
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]datathe packet data (8 bytes)
[out]lengththe received length (0-8 bytes)
[out]receivedTimestampthe packet received timestamp in ms (based off of CLOCK_MONOTONIC)
[out]statusError status variable. 0 on success.

◆ HAL_ReadCANPacketTimeout()

void HAL_ReadCANPacketTimeout ( HAL_CANHandle  handle,
int32_t  apiId,
uint8_t *  data,
int32_t *  length,
uint64_t *  receivedTimestamp,
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]datathe packet data (8 bytes)
[out]lengththe received length (0-8 bytes)
[out]receivedTimestampthe packet received timestamp in ms (based off of CLOCK_MONOTONIC)
[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,
const uint8_t *  data,
int32_t  length,
int32_t  apiId,
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]datathe data to write (0-8 bytes)
[in]lengththe length of data (0-8)
[in]apiIdthe ID to write (0-1023 bits)
[out]statusError status variable. 0 on success.

◆ HAL_WriteCANPacketRepeating()

void HAL_WriteCANPacketRepeating ( HAL_CANHandle  handle,
const uint8_t *  data,
int32_t  length,
int32_t  apiId,
int32_t  repeatMs,
int32_t *  status 
)

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

This ID is 10 bits.

The RoboRIO will automatically repeat the packet at the specified interval

Parameters
[in]handlethe CAN handle
[in]datathe data to write (0-8 bytes)
[in]lengththe length of data (0-8)
[in]apiIdthe ID to write (0-1023)
[in]repeatMsthe period to repeat in ms
[out]statusError status variable. 0 on success.

◆ HAL_WriteCANRTRFrame()

void HAL_WriteCANRTRFrame ( HAL_CANHandle  handle,
int32_t  length,
int32_t  apiId,
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]lengththe length of data to request (0-8)
[in]apiIdthe ID to write (0-1023)
[out]statusError status variable. 0 on success.