$darkmode
提供 CAN 设备的查找、打开、控制、读写和关闭接口 更多...
结构体 | |
struct | rt_can_filter_item |
CAN 接收过滤器条目结构体 更多... | |
struct | rt_can_filter_list |
CAN 接收过滤器列表结构体 更多... | |
struct | rt_can_device |
CAN 设备结构体,表示一个完整的 CAN 控制器实例 更多... | |
struct | rt_can_msg |
CAN 消息结构体 更多... | |
类型定义 | |
typedef enum can_message_priority | can_message_priority_t |
CAN 消息优先级枚举 更多... | |
typedef enum can_message_sync | can_message_sync_t |
CAN 消息同步方式枚举 更多... | |
typedef enum can_work_status | can_work_status_t |
CAN 工作状态枚举 更多... | |
typedef enum can_filter_capacity | can_filter_capacity_t |
CAN 接收过滤器支持的字段类型 更多... | |
typedef struct rt_can_filter_item * | rt_can_filter_item_t |
typedef struct rt_can_device * | rt_can_device_t |
typedef struct rt_can_msg * | rt_can_msg_t |
函数 | |
rt_device_t | rt_device_find (const char *name) |
查找 CAN 设备 更多... | |
rt_err_t | rt_device_control (rt_device_t dev, int cmd, void *arg) |
控制 CAN 设备 更多... | |
rt_err_t | rt_device_open (rt_device_t dev, rt_uint16_t oflag) |
打开 CAN 设备 更多... | |
rt_ssize_t | rt_device_write (rt_device_t dev, rt_off_t pos, const void *buffer, rt_size_t size) |
向 CAN 设备发送消息 更多... | |
rt_ssize_t | rt_device_read (rt_device_t dev, rt_off_t pos, void *buffer, rt_size_t size) |
从 CAN 设备中读取数据 更多... | |
rt_err_t | rt_device_close (rt_device_t dev) |
关闭 CAN 设备 更多... | |
提供 CAN 设备的查找、打开、控制、读写和关闭接口
#define RT_CAN_CTL_PARSE_ERR_CODE (0x24) |
解析错误码,作为 rt_device_control 的控制命令
#define RT_CAN_CTL_SET_BAUD (0x25) |
设置 CAN、 CAN-FD 仲裁域波特率,作为 rt_device_control 的控制命令
#define RT_CAN_CTL_SET_FD_DATA_BAUD (0x26) |
设置 CAN-FD 数据域波特率,作为 rt_device_control 的控制命令
#define RT_CAN_CTL_SET_FILTER_LIST (0x27) |
设置 CAN 接收过滤器列表,作为 rt_device_control 的控制命令
#define RT_CAN_CTL_GET_FILTER_LIST (0x28) |
获取 CAN 接收过滤器列表,作为 rt_device_control 的控制命令
#define RT_CAN_CTL_GET_VERSION (0x2D) |
获取当前控制器支持的 CAN 版本,作为 rt_device_control 的控制命令
#define RT_CAN_SET_AUTO_RETX (0x2F) |
设置 CAN 自动重传功能,作为 rt_device_control 的控制命令
#define RT_CAN_CTL_SET_EVENT_INT_CALLBACK (0x40) |
设置中断事件回调函数,作为 rt_device_control 的控制命令
#define RT_CAN_CTL_SET_EVENT_THREAD_CALLBACK (0x41) |
设置线程事件回调函数,作为 rt_device_control 的控制命令
#define RT_CAN_CTL_SET_EVENT_CALLBACK_MASK (0x42) |
设置线程事件回调掩码,作为 rt_device_control 的控制命令
#define RT_CAN_CTL_GET_EVENT_CALLBACK_MASK (0x43) |
获取线程事件回调掩码,作为 rt_device_control 的控制命令
#define RT_CAN_ERR_CODE_RX_FIFO_FULL (0xFF000000L) |
软件接收缓冲区已满
#define RT_CAN_ERR_CODE_HARDWARE_RX_FIFO_OVERFLOW (0xFF000001L) |
硬件接收缓冲区溢出
#define RT_CAN_ERR_CODE_BUS_OFF (0xFF000002L) |
总线关闭
#define RT_CAN_EVENT_SEND_SUCCESS (1 << 0) |
发送成功
#define RT_CAN_EVENT_SEND_FAILURE (1 << 1) |
发送失败
#define RT_CAN_EVENT_SEND_TIMEOUT (1 << 2) |
发送超时
#define RT_CAN_EVENT_HIGH_PRIORITY_MSG (1 << 31) |
高优先级消息
#define RT_CAN_EVENT_RECEIVE_SUCCESS (1 << 3) |
接收成功
#define RT_CAN_EVENT_ERROR (1 << 4) |
错误事件
#define RT_CAN_EVENT_ALL_MASK (0x1F) |
所有事件掩码
#define RT_CAN_EVENT_SEND_MASK (0x07) |
发送事件掩码
#define RT_CAN_STDID (0) |
标准帧
#define RT_CAN_EXTID (1) |
扩展帧
#define RT_CAN_DTR (0) |
数据帧
#define RT_CAN_RTR (1) |
远程帧
#define RT_CAN_VER_20A (1 << 0) |
CAN 2.0A 协议版本
#define RT_CAN_VER_20B (1 << 1) |
CAN 2.0B 协议版本
#define RT_CAN_VER_FD_ISO (1 << 2) |
CAN-FD ISO 协议版本
#define RT_CAN_VER_FD_NONISO (1 << 3) |
CAN-FD NONISO 协议版本
#define RT_CAN_VER_20_MASK (0x3) |
CAN 2.0 协议版本掩码
#define RT_CAN_VER_FD_MASK (0xC) |
CAN-FD 协议版本掩码
#define RT_CAN_FILTER_CARE (0) |
设置过滤器“关心”某个位,即该位参与过滤器匹配
#define RT_CAN_FILTER_UNCARE (1) |
设置过滤器“不关心”某个位,即该位不参与过滤器匹配
#define RT_CAN_FILTER_ENABLE (1) |
启用指定的 CAN 过滤器
#define RT_CAN_FILTER_DISABLE (0) |
禁用指定的 CAN 过滤器
#define RT_CAN_CHECK_FILTER_DATA_CAPACITY |
用于查询 CAN 接收过滤器是否使用了 data 字段相关过滤项
此宏用于标识当前过滤器使用的数据过滤字段,包括 FILTER_DATA_0 到 FILTER_DATA_7
#define RT_CAN_FILTER_CAPACITY | ( | x | ) | ((1L << (x)) & 0xFFFF) |
获取指定过滤器能力的掩码值
此宏用于根据 can_filter_capacity_t
枚举中的某个过滤项,生成对应的过滤器能力位
掩码。可用于检查是否支持某类过滤项,如 FILTER_ID
、FILTER_RTR
等
[in] | 过滤器能力枚举值,取自 | can_filter_capacity_t |
对应过滤器能力的 | 16 位掩码(即 1 << x) |
#define RT_CAN_SET_FILTER_ITEM | ( | list, | |
no, | |||
idx, | |||
idmask, | |||
idex, | |||
idemask, | |||
rtrx, | |||
rtrmask, | |||
en | |||
) |
设置 CAN 过滤器项的基本参数,包括 ID、IDE、RTR 及其掩码和使能标志
用于配置一个 CAN 接收过滤器项,包括标准/扩展帧 ID、远程帧标志及相应掩码
[in,out] | list | 指向过滤器列表结构体的指针,该列表的内容将被修改 |
[in] | no | 要设置的过滤器项编号 |
[in] | idx | 设置的 CAN ID(标准或扩展,取决于 ide) |
[in] | idmask | ID 的掩码位,用于与接收帧的 ID 比较((0 表示关心) |
[in] | idex | 标识是否为扩展帧(1 为扩展帧,0 为标准帧) |
[in] | idemask | 扩展帧标志的掩码((0 表示关心) |
[in] | rtrx | 标识是否为远程帧(1 为 RTR,0 为数据帧) |
[in] | rtrmask | 远程帧标志的掩码((0 表示关心) |
[in] | en | 是否启用该过滤器项(1 启用,0 禁用) |
#define RT_CAN_SET_FILTER_ITEM_DATA | ( | list, | |
no, | |||
data_no, | |||
datax, | |||
datamask | |||
) |
设置 CAN 过滤器列表中某一项的过滤数据和掩码
[in,out] | list | 指向过滤器列表结构体的指针 |
[in] | no | 过滤器项的索引 |
[in] | data_no | 数据段编号(0~7) |
[in] | datax | 要匹配的 CAN 数据 |
[in] | datamask | 与 datax 对应的掩码(0 表示关心) |
typedef enum can_message_priority can_message_priority_t |
CAN 消息优先级枚举
根据发送 CAN 消息时的优先级插入不同的发送队列
typedef enum can_message_sync can_message_sync_t |
CAN 消息同步方式枚举
表示 CAN 消息是异步发送还是同步发送
typedef enum can_work_status can_work_status_t |
CAN 工作状态枚举
表示 CAN 设备当前的工作状态
typedef enum can_filter_capacity can_filter_capacity_t |
CAN 接收过滤器支持的字段类型
表示在设置 CAN 接收过滤器时,可以指定的字段种类
enum CANBAUD |
CAN 总线波特率枚举定义
该枚举定义了常见的 CAN/CAN-FD 波特率,用于配置 CAN 控制器的通信速率
enum AUTO_RETX |
enum can_message_priority |
enum can_message_sync |
enum can_work_status |
enum can_filter_capacity |
CAN 接收过滤器支持的字段类型
表示在设置 CAN 接收过滤器时,可以指定的字段种类
rt_device_t rt_device_find | ( | const char * | name | ) |
查找 CAN 设备
本函数用于根据 CAN 设备名称查找设备获取设备句柄。进而可以操作 CAN 设备
[in] | name | CAN 设备名称 |
!RT_NULL | 查找到对应设备则返回相应的设备句柄 |
RT_NULL | 未找到对应设备 |
rt_err_t rt_device_control | ( | rt_device_t | dev, |
int | cmd, | ||
void * | arg | ||
) |
控制 CAN 设备
此函数用于应用程序通过命令控制字对 CAN 设备进行配置
[in] | dev | 要控制的 CAN 设备的设备句柄 | ||||||||||||||||||||||||||||||||||||
[in] | cmd | 控制命令 | ||||||||||||||||||||||||||||||||||||
[in,out] | arg | 控制参数,根据控制命令的不同而不同,具体见下表
|
RT_EOK | 控制成功 |
-RT_ENOSYS | 控制失败 |
rt_err_t rt_device_open | ( | rt_device_t | dev, |
rt_uint16_t | oflag | ||
) |
打开 CAN 设备
此函数用于打开 CAN 设备,调用该接口时,如果设备还没有初始化则会先调用初始化接口
打开后设备的引用计数将增加,对于独立设备,如果已被打开,则返回忙错误
dev[in] | CAN 设备的设备句柄 | ||||||||
oflag[in] | 打开方式标志,取值为以下值的组合
|
RT_EOK | 成功打开设备 |
-RT_EINVAL | CAN 设备句柄为空 |
-RT_ENOMEM | 内存错误 |
-RT_EBUSY | 设备为独立设备且已被打开 |
rt_ssize_t rt_device_write | ( | rt_device_t | dev, |
rt_off_t | pos, | ||
const void * | buffer, | ||
rt_size_t | size | ||
) |
向 CAN 设备发送消息
本接口支持同步发送(阻塞等待发送结果)和异步发送(将消息加入发送队列,由发送线程处理)
[in] | dev | 设备对象指针 |
[in] | pos | 写入的偏移位置, 此参数 CAN 设备未使用 |
[in] | buffer | CAN 消息指针,指向 rt_can_msg 结构体的指针 |
[in] | size | 写入的数据字节数 |
>0 | 表示成功写入的字节数 |
-RT_EINVAL | CAN 设备句柄为空,或发送 buffer 为空,或发送消息字节为 0 |
-RT_ERROR | 当前处于中断环境,不能进行发送操作 |
其它非正值 | 表示写入失败,错误码通过 rt_get_errno 获取 |
rt_ssize_t rt_device_read | ( | rt_device_t | dev, |
rt_off_t | pos, | ||
void * | buffer, | ||
rt_size_t | size | ||
) |
从 CAN 设备中读取数据
本接口从 CAN 设备的接收 FIFO 中读取接收到的 CAN 消息,最多读取 size 条消息,数据将 复制到用户提供的 buffer 中
[in] | dev | 设备对象指针 |
[in] | pos | 读取的位置偏移,此参数 CAN 设备未使用 |
[out] | buffer | 存储读取数据的缓冲区 |
[in] | size | 要读取的数据字节数 |
>0 | 表示成功读取的字节数(过滤后的有效帧数量) |
-RT_EINVAL | CAN 设备句柄为空,或要读取的数据字节为 0 |
其它非正值 | 表示读取失败,错误码通过 rt_get_errno 获取 |
rt_err_t rt_device_close | ( | rt_device_t | dev | ) |
关闭 CAN 设备
本接口用于关闭一个 CAN 设备,包括停止定时器、中断和发送控制等
[in] | dev | 指向 CAN 设备的指针 |
RT_EOK | 操作成功 |
-RT_EINVAL | 设备对象指针为空 |
-RT_ERROR | 设备未被打开 |