$darkmode
RuiChing API 参考手册
V0.9.1

提供 CAN 设备的查找、打开、控制、读写和关闭接口 更多...

结构体

struct  rt_can_filter_item
 CAN 接收过滤器条目结构体 更多...
 
struct  rt_can_filter_list
 CAN 接收过滤器列表结构体 更多...
 
struct  rt_can_device
 CAN 设备结构体,表示一个完整的 CAN 控制器实例 更多...
 
struct  rt_can_msg
 CAN 消息结构体 更多...
 

宏定义

#define RT_CAN_CTL_PARSE_ERR_CODE   (0x24)
 
#define RT_CAN_CTL_SET_BAUD   (0x25)
 
#define RT_CAN_CTL_SET_FD_DATA_BAUD   (0x26)
 
#define RT_CAN_CTL_SET_FILTER_LIST   (0x27)
 
#define RT_CAN_CTL_GET_FILTER_LIST   (0x28)
 
#define RT_CAN_CTL_GET_VERSION   (0x2D)
 
#define RT_CAN_SET_AUTO_RETX   (0x2F)
 
#define RT_CAN_CTL_SET_EVENT_INT_CALLBACK   (0x40)
 
#define RT_CAN_CTL_SET_EVENT_THREAD_CALLBACK   (0x41)
 
#define RT_CAN_CTL_SET_EVENT_CALLBACK_MASK   (0x42)
 
#define RT_CAN_CTL_GET_EVENT_CALLBACK_MASK   (0x43)
 
#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)
 
#define RT_CAN_VER_20B   (1 << 1)
 
#define RT_CAN_VER_FD_ISO   (1 << 2)
 
#define RT_CAN_VER_FD_NONISO   (1 << 3)
 
#define RT_CAN_VER_20_MASK   (0x3)
 
#define RT_CAN_VER_FD_MASK   (0xC)
 
#define RT_CAN_FILTER_CARE   (0)
 
#define RT_CAN_FILTER_UNCARE   (1)
 
#define RT_CAN_FILTER_ENABLE   (1)
 
#define RT_CAN_FILTER_DISABLE   (0)
 
#define RT_CAN_CHECK_FILTER_DATA_CAPACITY
 用于查询 CAN 接收过滤器是否使用了 data 字段相关过滤项 更多...
 
#define RT_CAN_FILTER_CAPACITY(x)   ((1L << (x)) & 0xFFFF)
 获取指定过滤器能力的掩码值 更多...
 
#define RT_CAN_SET_FILTER_ITEM( list, no, idx, idmask, idex, idemask, rtrx, rtrmask, en)
 设置 CAN 过滤器项的基本参数,包括 ID、IDE、RTR 及其掩码和使能标志 更多...
 
#define RT_CAN_SET_FILTER_ITEM_DATA(list, no, data_no, datax, datamask)
 设置 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_itemrt_can_filter_item_t
 
typedef struct rt_can_devicert_can_device_t
 
typedef struct rt_can_msgrt_can_msg_t
 

枚举

enum  CANBAUD {
  CAN8MBaud = 8000UL * 1000 , CAN5MBaud = 5000UL * 1000 , CAN4MBaud = 4000UL * 1000 , CAN2MBaud = 2000UL * 1000 ,
  CAN1MBaud = 1000UL * 1000 , CAN800kBaud = 1000UL * 800 , CAN500kBaud = 1000UL * 500 , CAN250kBaud = 1000UL * 250 ,
  CAN125kBaud = 1000UL * 125 , CAN100kBaud = 1000UL * 100 , CAN50kBaud = 1000UL * 50 , CAN20kBaud = 1000UL * 20 ,
  CAN10kBaud = 1000UL * 10
}
 CAN 总线波特率枚举定义 更多...
 
enum  AUTO_RETX { RETRANSMISSION_ENABLE = 0 , RETRANSMISSION_DISABLE }
 自动重传功能控制枚举 更多...
 
enum  can_message_priority { LOW_PRIORITY = 0 , HIGH_PRIORITY , PRIORITY_MAX_NUM = 0xFFFF }
 CAN 消息优先级枚举 更多...
 
enum  can_message_sync { CAN_ASYNC = 0 , CAN_SYNC , SYNC_MAX_NUM = 0xFFFF }
 CAN 消息同步方式枚举 更多...
 
enum  can_work_status { CAN_INIT_STATUS = 0 , CAN_RUN_STATUS , CAN_STOP_STATUS , STATUS_MAX_NUM = 0xFFFF }
 CAN 工作状态枚举 更多...
 
enum  can_filter_capacity {
  FILTER_DATA_0 = 0 , FILTER_DATA_1 , FILTER_DATA_2 , FILTER_DATA_3 ,
  FILTER_DATA_4 , FILTER_DATA_5 , FILTER_DATA_6 , FILTER_DATA_7 ,
  FILTER_ID , FILTER_IDE_INDEPENDENT , FILTER_IDE_SHARE , FILTER_RTR ,
  FILTER_CAP_MAX_NUM = 0xFFFF
}
 CAN 接收过滤器支持的字段类型 更多...
 

函数

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 设备的查找、打开、控制、读写和关闭接口

宏定义说明

◆ RT_CAN_CTL_PARSE_ERR_CODE

#define RT_CAN_CTL_PARSE_ERR_CODE   (0x24)

解析错误码,作为 rt_device_control 的控制命令

◆ RT_CAN_CTL_SET_BAUD

#define RT_CAN_CTL_SET_BAUD   (0x25)

设置 CAN、 CAN-FD 仲裁域波特率,作为 rt_device_control 的控制命令

◆ RT_CAN_CTL_SET_FD_DATA_BAUD

#define RT_CAN_CTL_SET_FD_DATA_BAUD   (0x26)

设置 CAN-FD 数据域波特率,作为 rt_device_control 的控制命令

◆ RT_CAN_CTL_SET_FILTER_LIST

#define RT_CAN_CTL_SET_FILTER_LIST   (0x27)

设置 CAN 接收过滤器列表,作为 rt_device_control 的控制命令

◆ RT_CAN_CTL_GET_FILTER_LIST

#define RT_CAN_CTL_GET_FILTER_LIST   (0x28)

获取 CAN 接收过滤器列表,作为 rt_device_control 的控制命令

◆ RT_CAN_CTL_GET_VERSION

#define RT_CAN_CTL_GET_VERSION   (0x2D)

获取当前控制器支持的 CAN 版本,作为 rt_device_control 的控制命令

◆ RT_CAN_SET_AUTO_RETX

#define RT_CAN_SET_AUTO_RETX   (0x2F)

设置 CAN 自动重传功能,作为 rt_device_control 的控制命令

◆ RT_CAN_CTL_SET_EVENT_INT_CALLBACK

#define RT_CAN_CTL_SET_EVENT_INT_CALLBACK   (0x40)

设置中断事件回调函数,作为 rt_device_control 的控制命令

◆ RT_CAN_CTL_SET_EVENT_THREAD_CALLBACK

#define RT_CAN_CTL_SET_EVENT_THREAD_CALLBACK   (0x41)

设置线程事件回调函数,作为 rt_device_control 的控制命令

◆ RT_CAN_CTL_SET_EVENT_CALLBACK_MASK

#define RT_CAN_CTL_SET_EVENT_CALLBACK_MASK   (0x42)

设置线程事件回调掩码,作为 rt_device_control 的控制命令

◆ RT_CAN_CTL_GET_EVENT_CALLBACK_MASK

#define RT_CAN_CTL_GET_EVENT_CALLBACK_MASK   (0x43)

获取线程事件回调掩码,作为 rt_device_control 的控制命令

◆ RT_CAN_ERR_CODE_RX_FIFO_FULL

#define RT_CAN_ERR_CODE_RX_FIFO_FULL   (0xFF000000L)

软件接收缓冲区已满

◆ RT_CAN_ERR_CODE_HARDWARE_RX_FIFO_OVERFLOW

#define RT_CAN_ERR_CODE_HARDWARE_RX_FIFO_OVERFLOW   (0xFF000001L)

硬件接收缓冲区溢出

◆ RT_CAN_ERR_CODE_BUS_OFF

#define RT_CAN_ERR_CODE_BUS_OFF   (0xFF000002L)

总线关闭

◆ RT_CAN_EVENT_SEND_SUCCESS

#define RT_CAN_EVENT_SEND_SUCCESS   (1 << 0)

发送成功

◆ RT_CAN_EVENT_SEND_FAILURE

#define RT_CAN_EVENT_SEND_FAILURE   (1 << 1)

发送失败

◆ RT_CAN_EVENT_SEND_TIMEOUT

#define RT_CAN_EVENT_SEND_TIMEOUT   (1 << 2)

发送超时

◆ RT_CAN_EVENT_HIGH_PRIORITY_MSG

#define RT_CAN_EVENT_HIGH_PRIORITY_MSG   (1 << 31)

高优先级消息

◆ RT_CAN_EVENT_RECEIVE_SUCCESS

#define RT_CAN_EVENT_RECEIVE_SUCCESS   (1 << 3)

接收成功

◆ RT_CAN_EVENT_ERROR

#define RT_CAN_EVENT_ERROR   (1 << 4)

错误事件

◆ RT_CAN_EVENT_ALL_MASK

#define RT_CAN_EVENT_ALL_MASK   (0x1F)

所有事件掩码

◆ RT_CAN_EVENT_SEND_MASK

#define RT_CAN_EVENT_SEND_MASK   (0x07)

发送事件掩码

◆ RT_CAN_STDID

#define RT_CAN_STDID   (0)

标准帧

◆ RT_CAN_EXTID

#define RT_CAN_EXTID   (1)

扩展帧

◆ RT_CAN_DTR

#define RT_CAN_DTR   (0)

数据帧

◆ RT_CAN_RTR

#define RT_CAN_RTR   (1)

远程帧

◆ RT_CAN_VER_20A

#define RT_CAN_VER_20A   (1 << 0)

CAN 2.0A 协议版本

◆ RT_CAN_VER_20B

#define RT_CAN_VER_20B   (1 << 1)

CAN 2.0B 协议版本

◆ RT_CAN_VER_FD_ISO

#define RT_CAN_VER_FD_ISO   (1 << 2)

CAN-FD ISO 协议版本

◆ RT_CAN_VER_FD_NONISO

#define RT_CAN_VER_FD_NONISO   (1 << 3)

CAN-FD NONISO 协议版本

◆ RT_CAN_VER_20_MASK

#define RT_CAN_VER_20_MASK   (0x3)

CAN 2.0 协议版本掩码

◆ RT_CAN_VER_FD_MASK

#define RT_CAN_VER_FD_MASK   (0xC)

CAN-FD 协议版本掩码

◆ RT_CAN_FILTER_CARE

#define RT_CAN_FILTER_CARE   (0)

设置过滤器“关心”某个位,即该位参与过滤器匹配

◆ RT_CAN_FILTER_UNCARE

#define RT_CAN_FILTER_UNCARE   (1)

设置过滤器“不关心”某个位,即该位不参与过滤器匹配

◆ RT_CAN_FILTER_ENABLE

#define RT_CAN_FILTER_ENABLE   (1)

启用指定的 CAN 过滤器

◆ RT_CAN_FILTER_DISABLE

#define RT_CAN_FILTER_DISABLE   (0)

禁用指定的 CAN 过滤器

◆ RT_CAN_CHECK_FILTER_DATA_CAPACITY

#define RT_CAN_CHECK_FILTER_DATA_CAPACITY
值:
((1L << FILTER_DATA_0) | (1L << FILTER_DATA_1) | (1L << FILTER_DATA_2) | \
(1L << FILTER_DATA_3) | (1L << FILTER_DATA_4) | \
(1L << FILTER_DATA_5) | (1L << FILTER_DATA_6) | (1L << FILTER_DATA_7))
@ FILTER_DATA_7
Definition: can.dox:219
@ FILTER_DATA_4
Definition: can.dox:216
@ FILTER_DATA_6
Definition: can.dox:218
@ FILTER_DATA_5
Definition: can.dox:217
@ FILTER_DATA_0
Definition: can.dox:212
@ FILTER_DATA_1
Definition: can.dox:213
@ FILTER_DATA_2
Definition: can.dox:214
@ FILTER_DATA_3
Definition: can.dox:215

用于查询 CAN 接收过滤器是否使用了 data 字段相关过滤项

此宏用于标识当前过滤器使用的数据过滤字段,包括 FILTER_DATA_0 到 FILTER_DATA_7

示例
+---------------------------------------------------+
| example: |
| ~ ~ |
| | 7 6 5 4 3 2 1 0 | bit |
| +------------------------+ |
| | 1 1 1 1 1 1 1 0 | data_mask[0] |
| +------------------------+ |
| | 1 1 0 0 1 0 1 1 | data[0] |
| +------------------------+ |
| | x x x x x x x 1 | result |
| +------------------------+ |
| x: 任意,表示只匹配 rxdata[0].bit0 = 1 的报文 |
+---------------------------------------------------+

◆ RT_CAN_FILTER_CAPACITY

#define RT_CAN_FILTER_CAPACITY (   x)    ((1L << (x)) & 0xFFFF)

获取指定过滤器能力的掩码值

此宏用于根据 can_filter_capacity_t 枚举中的某个过滤项,生成对应的过滤器能力位
掩码。可用于检查是否支持某类过滤项,如 FILTER_IDFILTER_RTR

参数
[in]过滤器能力枚举值,取自can_filter_capacity_t
返回值
对应过滤器能力的16 位掩码(即 1 << x)

◆ RT_CAN_SET_FILTER_ITEM

#define RT_CAN_SET_FILTER_ITEM (   list,
  no,
  idx,
  idmask,
  idex,
  idemask,
  rtrx,
  rtrmask,
  en 
)
值:
{ \
(list)->item[no].id = idx; \
(list)->item[no].id_mask = idmask; \
(list)->item[no].ide = idex; \
(list)->item[no].ide_mask = idemask; \
(list)->item[no].rtr = rtrx; \
(list)->item[no].rtr_mask = rtrmask; \
(list)->item[no].enable = en; \
}

设置 CAN 过滤器项的基本参数,包括 ID、IDE、RTR 及其掩码和使能标志

用于配置一个 CAN 接收过滤器项,包括标准/扩展帧 ID、远程帧标志及相应掩码

参数
[in,out]list指向过滤器列表结构体的指针,该列表的内容将被修改
[in]no要设置的过滤器项编号
[in]idx设置的 CAN ID(标准或扩展,取决于 ide)
[in]idmaskID 的掩码位,用于与接收帧的 ID 比较((0 表示关心)
[in]idex标识是否为扩展帧(1 为扩展帧,0 为标准帧)
[in]idemask扩展帧标志的掩码((0 表示关心)
[in]rtrx标识是否为远程帧(1 为 RTR,0 为数据帧)
[in]rtrmask远程帧标志的掩码((0 表示关心)
[in]en是否启用该过滤器项(1 启用,0 禁用)

◆ RT_CAN_SET_FILTER_ITEM_DATA

#define RT_CAN_SET_FILTER_ITEM_DATA (   list,
  no,
  data_no,
  datax,
  datamask 
)
值:
{ \
(list)->item[no].data[data_no] = datax; \
(list)->item[no].data_mask[data_no] = datamask; \
}

设置 CAN 过滤器列表中某一项的过滤数据和掩码

参数
[in,out]list指向过滤器列表结构体的指针
[in]no过滤器项的索引
[in]data_no数据段编号(0~7)
[in]datax要匹配的 CAN 数据
[in]datamask与 datax 对应的掩码(0 表示关心)

类型定义说明

◆ can_message_priority_t

CAN 消息优先级枚举

根据发送 CAN 消息时的优先级插入不同的发送队列

◆ can_message_sync_t

CAN 消息同步方式枚举

表示 CAN 消息是异步发送还是同步发送

◆ can_work_status_t

CAN 工作状态枚举

表示 CAN 设备当前的工作状态

◆ can_filter_capacity_t

CAN 接收过滤器支持的字段类型

表示在设置 CAN 接收过滤器时,可以指定的字段种类

枚举类型说明

◆ CANBAUD

enum CANBAUD

CAN 总线波特率枚举定义

该枚举定义了常见的 CAN/CAN-FD 波特率,用于配置 CAN 控制器的通信速率

枚举值
CAN8MBaud 

8 MBit/s

CAN5MBaud 

5 MBit/s

CAN4MBaud 

4 MBit/s

CAN2MBaud 

2 MBit/s

CAN1MBaud 

1 MBit/s

CAN800kBaud 

800 kBit/s

CAN500kBaud 

500 kBit/s

CAN250kBaud 

250 kBit/s

CAN125kBaud 

125 kBit/s

CAN100kBaud 

100 kBit/s

CAN50kBaud 

50 kBit/s

CAN20kBaud 

20 kBit/s

CAN10kBaud 

10 kBit/s

◆ AUTO_RETX

enum AUTO_RETX

自动重传功能控制枚举

用于设置 CAN 控制器的自动重发选项。在发送失败(如仲裁失败)时,是否自动重新尝试发送

枚举值
RETRANSMISSION_ENABLE 

启用自动重发功能

RETRANSMISSION_DISABLE 

禁用自动重发功能

◆ can_message_priority

CAN 消息优先级枚举

根据发送 CAN 消息时的优先级插入不同的发送队列

枚举值
LOW_PRIORITY 

低优先级消息

HIGH_PRIORITY 

高优先级消息

PRIORITY_MAX_NUM 

最大值,占位用

◆ can_message_sync

CAN 消息同步方式枚举

表示 CAN 消息是异步发送还是同步发送

枚举值
CAN_ASYNC 

异步发送

CAN_SYNC 

同步发送

SYNC_MAX_NUM 

最大值,占位用

◆ can_work_status

CAN 工作状态枚举

表示 CAN 设备当前的工作状态

枚举值
CAN_INIT_STATUS 

初始化状态

CAN_RUN_STATUS 

运行状态

CAN_STOP_STATUS 

停止状态

STATUS_MAX_NUM 

最大值,占位用

◆ can_filter_capacity

CAN 接收过滤器支持的字段类型

表示在设置 CAN 接收过滤器时,可以指定的字段种类

枚举值
FILTER_DATA_0 

数据字段 data[0]

FILTER_DATA_1 

数据字段 data[1]

FILTER_DATA_2 

数据字段 data[2]

FILTER_DATA_3 

数据字段 data[3]

FILTER_DATA_4 

数据字段 data[4]

FILTER_DATA_5 

数据字段 data[5]

FILTER_DATA_6 

数据字段 data[6]

FILTER_DATA_7 

数据字段 data[7]

FILTER_ID 

报文 ID

FILTER_IDE_INDEPENDENT 

过滤器对 IDE(标准/扩展帧)不关心

FILTER_IDE_SHARE 

过滤器对 IDE(标准/扩展帧)关心

FILTER_RTR 

过滤器远程帧标志位

FILTER_CAP_MAX_NUM 

最大值,占位用

函数说明

◆ rt_device_find()

rt_device_t rt_device_find ( const char *  name)

查找 CAN 设备

本函数用于根据 CAN 设备名称查找设备获取设备句柄。进而可以操作 CAN 设备

参数
[in]nameCAN 设备名称
返回值
!RT_NULL查找到对应设备则返回相应的设备句柄
RT_NULL未找到对应设备

◆ rt_device_control()

rt_err_t rt_device_control ( rt_device_t  dev,
int  cmd,
void *  arg 
)

控制 CAN 设备

此函数用于应用程序通过命令控制字对 CAN 设备进行配置

参数
[in]dev要控制的 CAN 设备的设备句柄
[in]cmd控制命令
[in,out]arg控制参数,根据控制命令的不同而不同,具体见下表
标志位 功能 配合 control 的 arg 参数
RT_CAN_CTL_PARSE_ERR_CODE 解析错误码 传入由底层驱动返回的错误码,由框架层解析后打印错误信息
RT_CAN_CTL_SET_BAUD 设置 CAN、 CAN-FD 仲裁域波特率 传入波特率值,该值应为枚举类型 enum CANBAUD
RT_CAN_CTL_SET_FD_DATA_BAUD 设置 CAN-FD 数据域波特率 传入 CAN-FD 数据域的波特率值,该值为枚举类型 enum CANBAUD
RT_CAN_CTL_SET_FILTER_LIST 设置 CAN 接收过滤器列表 传入指向 struct rt_can_filter_list 类型的指针
RT_CAN_CTL_GET_FILTER_LIST 获取 CAN 接收过滤器列表 传入 struct rt_can_filter_list 类型指针的地址(即 struct rt_can_filter_list **),返回过滤器列表
RT_CAN_CTL_GET_VERSION 获取当前控制器支持的 CAN 版本 传入用于存储 CAN 版本号的变量地址,返回实际版本号(RT_CAN_VER_20ART_CAN_VER_20BRT_CAN_VER_FD_ISO 或 RT_CAN_VER_FD_NONISO)
RT_CAN_SET_AUTO_RETX 设置 CAN 自动重传功能 传入自动重传功能控制枚举值,该值应为枚举类型 enum AUTO_RETX
RT_CAN_CTL_SET_EVENT_INT_CALLBACK 设置中断事件回调函数 传入回调函数指针,原型为 void (event_int_callback) (struct rt_can_device dev, rt_uint32_t code, void* param);
RT_CAN_CTL_SET_EVENT_THREAD_CALLBACK 设置线程事件回调函数 传入回调函数指针,原型为 void (*event_thread_callback)(struct rt_can_device *dev, rt_uint32_t code, oid *param);
RT_CAN_CTL_SET_EVENT_CALLBACK_MASK 设置线程事件回调掩码 传入 RT_CAN_EVENT_SEND_SUCCESSRT_CAN_EVENT_SEND_TIMEOUTRT_CAN_EVENT_SEND_FAILURE 的组合,表示要接收哪些事件的回调
RT_CAN_CTL_GET_EVENT_CALLBACK_MASK 获取线程事件回调掩码 传入事件掩码存储变量的地址,返回实际掩码值,该值为 RT_CAN_CTL_SET_EVENT_CALLBACK_MASK 设置的掩码值
返回值
RT_EOK控制成功
-RT_ENOSYS控制失败

◆ rt_device_open()

rt_err_t rt_device_open ( rt_device_t  dev,
rt_uint16_t  oflag 
)

打开 CAN 设备

此函数用于打开 CAN 设备,调用该接口时,如果设备还没有初始化则会先调用初始化接口
打开后设备的引用计数将增加,对于独立设备,如果已被打开,则返回忙错误

参数
dev[in]CAN 设备的设备句柄
oflag[in]打开方式标志,取值为以下值的组合
标志位 功能
RT_DEVICE_OFLAG_RDWR 读写模式
RT_DEVICE_FLAG_INT_TX 发送中断模式
RT_DEVICE_FLAG_INT_RX 接收中断模式
返回值
RT_EOK成功打开设备
-RT_EINVALCAN 设备句柄为空
-RT_ENOMEM内存错误
-RT_EBUSY设备为独立设备且已被打开

◆ rt_device_write()

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]bufferCAN 消息指针,指向 rt_can_msg 结构体的指针
[in]size写入的数据字节数
返回值
>0表示成功写入的字节数
-RT_EINVALCAN 设备句柄为空,或发送 buffer 为空,或发送消息字节为 0
-RT_ERROR当前处于中断环境,不能进行发送操作
其它非正值表示写入失败,错误码通过 rt_get_errno 获取
警告
  • 在使用本函数前,设备必须已通过 rt_device_open 成功打开
  • 同步消息将会忽略 rt_can_msg 中的优先级属性

◆ rt_device_read()

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_EINVALCAN 设备句柄为空,或要读取的数据字节为 0
其它非正值表示读取失败,错误码通过 rt_get_errno 获取
警告
  • 在使用本函数前,设备必须已通过 rt_device_open 成功打开

◆ rt_device_close()

rt_err_t rt_device_close ( rt_device_t  dev)

关闭 CAN 设备

本接口用于关闭一个 CAN 设备,包括停止定时器、中断和发送控制等

参数
[in]dev指向 CAN 设备的指针
返回值
RT_EOK操作成功
-RT_EINVAL设备对象指针为空
-RT_ERROR设备未被打开