|
Zephyr Project API 4.0.0
A Scalable Open Source RTOS
|
Controller Area Network (CAN) driver API. More...
#include <errno.h>#include <zephyr/types.h>#include <zephyr/device.h>#include <zephyr/kernel.h>#include <string.h>#include <zephyr/sys_clock.h>#include <zephyr/sys/util.h>#include <zephyr/stats/stats.h>#include <zephyr/syscalls/can.h>Go to the source code of this file.
Data Structures | |
| struct | can_frame |
| CAN frame structure. More... | |
| struct | can_filter |
| CAN filter structure. More... | |
| struct | can_bus_err_cnt |
| CAN controller error counters. More... | |
| struct | can_timing |
| CAN bus timing structure. More... | |
| struct | can_device_state |
| CAN specific device state which allows for CAN device class specific additions. More... | |
Macros | |
| #define | CAN_STATS_BIT_ERROR_INC(dev_) STATS_INC(Z_CAN_GET_STATS(dev_), bit_error) |
| Increment the bit error counter for a CAN device. | |
| #define | CAN_STATS_BIT0_ERROR_INC(dev_) |
| Increment the bit0 error counter for a CAN device. | |
| #define | CAN_STATS_BIT1_ERROR_INC(dev_) |
| Increment the bit1 (recessive) error counter for a CAN device. | |
| #define | CAN_STATS_STUFF_ERROR_INC(dev_) STATS_INC(Z_CAN_GET_STATS(dev_), stuff_error) |
| Increment the stuffing error counter for a CAN device. | |
| #define | CAN_STATS_CRC_ERROR_INC(dev_) STATS_INC(Z_CAN_GET_STATS(dev_), crc_error) |
| Increment the CRC error counter for a CAN device. | |
| #define | CAN_STATS_FORM_ERROR_INC(dev_) STATS_INC(Z_CAN_GET_STATS(dev_), form_error) |
| Increment the form error counter for a CAN device. | |
| #define | CAN_STATS_ACK_ERROR_INC(dev_) STATS_INC(Z_CAN_GET_STATS(dev_), ack_error) |
| Increment the acknowledge error counter for a CAN device. | |
| #define | CAN_STATS_RX_OVERRUN_INC(dev_) STATS_INC(Z_CAN_GET_STATS(dev_), rx_overrun) |
| Increment the RX overrun counter for a CAN device. | |
| #define | CAN_STATS_RESET(dev_) stats_reset(&(Z_CAN_GET_STATS(dev_).s_hdr)) |
| Zero all statistics for a CAN device. | |
| #define | CAN_DEVICE_DT_DEFINE(node_id, init_fn, pm, data, config, level, prio, api, ...) |
| Like DEVICE_DT_DEFINE() with CAN device specifics. | |
| #define | CAN_DEVICE_DT_INST_DEFINE(inst, ...) CAN_DEVICE_DT_DEFINE(DT_DRV_INST(inst), __VA_ARGS__) |
| Like CAN_DEVICE_DT_DEFINE() for an instance of a DT_DRV_COMPAT compatible. | |
CAN frame definitions | |
| #define | CAN_STD_ID_MASK 0x7FFU |
| Bit mask for a standard (11-bit) CAN identifier. | |
| #define | CAN_MAX_STD_ID CAN_STD_ID_MASK __DEPRECATED_MACRO |
| Maximum value for a standard (11-bit) CAN identifier. | |
| #define | CAN_EXT_ID_MASK 0x1FFFFFFFU |
| Bit mask for an extended (29-bit) CAN identifier. | |
| #define | CAN_MAX_EXT_ID CAN_EXT_ID_MASK __DEPRECATED_MACRO |
| Maximum value for an extended (29-bit) CAN identifier. | |
| #define | CAN_MAX_DLC 8U |
| Maximum data length code for CAN 2.0A/2.0B. | |
| #define | CANFD_MAX_DLC 15U |
| Maximum data length code for CAN FD. | |
CAN controller mode flags | |
| #define | CAN_MODE_NORMAL 0 |
| Normal mode. | |
| #define | CAN_MODE_LOOPBACK BIT(0) |
| Controller is in loopback mode (receives own frames). | |
| #define | CAN_MODE_LISTENONLY BIT(1) |
| Controller is not allowed to send dominant bits. | |
| #define | CAN_MODE_FD BIT(2) |
| Controller allows transmitting/receiving CAN FD frames. | |
| #define | CAN_MODE_ONE_SHOT BIT(3) |
| Controller does not retransmit in case of lost arbitration or missing ACK. | |
| #define | CAN_MODE_3_SAMPLES BIT(4) |
| Controller uses triple sampling mode. | |
| #define | CAN_MODE_MANUAL_RECOVERY BIT(5) |
| Controller requires manual recovery after entering bus-off state. | |
CAN frame flags | |
| #define | CAN_FRAME_IDE BIT(0) |
| Frame uses extended (29-bit) CAN ID. | |
| #define | CAN_FRAME_RTR BIT(1) |
| Frame is a Remote Transmission Request (RTR) | |
| #define | CAN_FRAME_FDF BIT(2) |
| Frame uses CAN FD format (FDF) | |
| #define | CAN_FRAME_BRS BIT(3) |
| Frame uses CAN FD Baud Rate Switch (BRS). | |
| #define | CAN_FRAME_ESI BIT(4) |
| CAN FD Error State Indicator (ESI). | |
CAN filter flags | |
| #define | CAN_FILTER_IDE BIT(0) |
| Filter matches frames with extended (29-bit) CAN IDs. | |
Typedefs | |
| typedef uint32_t | can_mode_t |
| Provides a type to hold CAN controller configuration flags. | |
| typedef void(* | can_tx_callback_t) (const struct device *dev, int error, void *user_data) |
| Defines the application callback handler function signature. | |
| typedef void(* | can_rx_callback_t) (const struct device *dev, struct can_frame *frame, void *user_data) |
| Defines the application callback handler function signature for receiving. | |
| typedef void(* | can_state_change_callback_t) (const struct device *dev, enum can_state state, struct can_bus_err_cnt err_cnt, void *user_data) |
| Defines the state change callback handler function signature. | |
Enumerations | |
| enum | can_state { CAN_STATE_ERROR_ACTIVE , CAN_STATE_ERROR_WARNING , CAN_STATE_ERROR_PASSIVE , CAN_STATE_BUS_OFF , CAN_STATE_STOPPED } |
| Defines the state of the CAN controller. More... | |
Functions | |
CAN controller configuration | |
| int | can_get_core_clock (const struct device *dev, uint32_t *rate) |
| Get the CAN core clock rate. | |
| uint32_t | can_get_bitrate_min (const struct device *dev) |
| Get minimum supported bitrate. | |
| static int | can_get_min_bitrate (const struct device *dev, uint32_t *min_bitrate) |
| Get minimum supported bitrate. | |
| uint32_t | can_get_bitrate_max (const struct device *dev) |
| Get maximum supported bitrate. | |
| static int | can_get_max_bitrate (const struct device *dev, uint32_t *max_bitrate) |
| Get maximum supported bitrate. | |
| const struct can_timing * | can_get_timing_min (const struct device *dev) |
| Get the minimum supported timing parameter values. | |
| const struct can_timing * | can_get_timing_max (const struct device *dev) |
| Get the maximum supported timing parameter values. | |
| int | can_calc_timing (const struct device *dev, struct can_timing *res, uint32_t bitrate, uint16_t sample_pnt) |
| Calculate timing parameters from bitrate and sample point. | |
| const struct can_timing * | can_get_timing_data_min (const struct device *dev) |
| Get the minimum supported timing parameter values for the data phase. | |
| const struct can_timing * | can_get_timing_data_max (const struct device *dev) |
| Get the maximum supported timing parameter values for the data phase. | |
| int | can_calc_timing_data (const struct device *dev, struct can_timing *res, uint32_t bitrate, uint16_t sample_pnt) |
| Calculate timing parameters for the data phase. | |
| int | can_set_timing_data (const struct device *dev, const struct can_timing *timing_data) |
| Configure the bus timing for the data phase of a CAN FD controller. | |
| int | can_set_bitrate_data (const struct device *dev, uint32_t bitrate_data) |
| Set the bitrate for the data phase of the CAN FD controller. | |
| int | can_calc_prescaler (const struct device *dev, struct can_timing *timing, uint32_t bitrate) |
| Fill in the prescaler value for a given bitrate and timing. | |
| int | can_set_timing (const struct device *dev, const struct can_timing *timing) |
| Configure the bus timing of a CAN controller. | |
| int | can_get_capabilities (const struct device *dev, can_mode_t *cap) |
| Get the supported modes of the CAN controller. | |
| const struct device * | can_get_transceiver (const struct device *dev) |
| Get the CAN transceiver associated with the CAN controller. | |
| int | can_start (const struct device *dev) |
| Start the CAN controller. | |
| int | can_stop (const struct device *dev) |
| Stop the CAN controller. | |
| int | can_set_mode (const struct device *dev, can_mode_t mode) |
| Set the CAN controller to the given operation mode. | |
| can_mode_t | can_get_mode (const struct device *dev) |
| Get the operation mode of the CAN controller. | |
| int | can_set_bitrate (const struct device *dev, uint32_t bitrate) |
| Set the bitrate of the CAN controller. | |
Transmitting CAN frames | |
| int | can_send (const struct device *dev, const struct can_frame *frame, k_timeout_t timeout, can_tx_callback_t callback, void *user_data) |
| Queue a CAN frame for transmission on the CAN bus. | |
CAN bus error reporting and handling | |
| int | can_get_state (const struct device *dev, enum can_state *state, struct can_bus_err_cnt *err_cnt) |
| Get current CAN controller state. | |
| int | can_recover (const struct device *dev, k_timeout_t timeout) |
| Recover from bus-off state. | |
| static void | can_set_state_change_callback (const struct device *dev, can_state_change_callback_t callback, void *user_data) |
| Set a callback for CAN controller state change events. | |
CAN statistics | |
| uint32_t | can_stats_get_bit_errors (const struct device *dev) |
| Get the bit error counter for a CAN device. | |
| uint32_t | can_stats_get_bit0_errors (const struct device *dev) |
| Get the bit0 error counter for a CAN device. | |
| uint32_t | can_stats_get_bit1_errors (const struct device *dev) |
| Get the bit1 error counter for a CAN device. | |
| uint32_t | can_stats_get_stuff_errors (const struct device *dev) |
| Get the stuffing error counter for a CAN device. | |
| uint32_t | can_stats_get_crc_errors (const struct device *dev) |
| Get the CRC error counter for a CAN device. | |
| uint32_t | can_stats_get_form_errors (const struct device *dev) |
| Get the form error counter for a CAN device. | |
| uint32_t | can_stats_get_ack_errors (const struct device *dev) |
| Get the acknowledge error counter for a CAN device. | |
| uint32_t | can_stats_get_rx_overruns (const struct device *dev) |
| Get the RX overrun counter for a CAN device. | |
CAN utility functions | |
| static uint8_t | can_dlc_to_bytes (uint8_t dlc) |
| Convert from Data Length Code (DLC) to the number of data bytes. | |
| static uint8_t | can_bytes_to_dlc (uint8_t num_bytes) |
| Convert from number of bytes to Data Length Code (DLC) | |
| static bool | can_frame_matches_filter (const struct can_frame *frame, const struct can_filter *filter) |
| Check if a CAN frame matches a CAN filter. | |
Receiving CAN frames | |
| #define | CAN_MSGQ_DEFINE(name, max_frames) K_MSGQ_DEFINE(name, sizeof(struct can_frame), max_frames, 4) |
| Statically define and initialize a CAN RX message queue. | |
| int | can_add_rx_filter (const struct device *dev, can_rx_callback_t callback, void *user_data, const struct can_filter *filter) |
| Add a callback function for a given CAN filter. | |
| int | can_add_rx_filter_msgq (const struct device *dev, struct k_msgq *msgq, const struct can_filter *filter) |
| Simple wrapper function for adding a message queue for a given filter. | |
| void | can_remove_rx_filter (const struct device *dev, int filter_id) |
| Remove a CAN RX filter. | |
| int | can_get_max_filters (const struct device *dev, bool ide) |
| Get maximum number of RX filters. | |
Controller Area Network (CAN) driver API.