XWOS API  4.0
XWOS C/C++ API参考手册
载入中...
搜索中...
未找到
CAN总线接收器
CAN总线接收器 的协作图:

结构体

struct  xwds_cantrcv_cfg
 CAN接收器配置 更多...
 
struct  xwds_cantrcv_driver
 BSP中需要提供的CAN接收器驱动函数表 更多...
 
struct  xwds_cantrcv
 CAN接收器 更多...
 

类型定义

typedef void(* xwds_cantrcv_wkup_isr_f) (struct xwds_cantrcv *, struct xwds_canc *)
 唤醒中断回调函数
 

枚举

enum  xwds_cantrcv_opmode_em { XWDS_CANTRCV_OPMODE_NORMAL = 0 , XWDS_CANTRCV_OPMODE_SLEEP , XWDS_CANTRCV_OPMODE_STANDBY , XWDS_CANTRCV_OPMODE_NUM }
 CAN接收器模式枚举 更多...
 
enum  xwds_cantrcv_wkuprs_em {
  XWDS_CANTRCV_WKUPRS_NONE = 0 , XWDS_CANTRCV_WKUPRS_BY_BUS , XWDS_CANTRCV_WKUPRS_BY_PIN , XWDS_CANTRCV_WKUPRS_INTERNALLY ,
  XWDS_CANTRCV_WKUPRS_NOT_SUPPORTED , XWDS_CANTRCV_WKUPRS_POWER_ON , XWDS_CANTRCV_WKUPRS_RESET , XWDS_CANTRCV_WKUPRS_BY_SYSERR ,
  XWDS_CANTRCV_WKUPRS_NUM
}
 CAN接收器唤醒原因枚举 更多...
 

函数

void xwds_cantrcv_construct (struct xwds_cantrcv *cantrcv)
 XWDS API:CAN接收器的构造函数
 
void xwds_cantrcv_destruct (struct xwds_cantrcv *cantrcv)
 XWDS API:CAN接收器对象的析构函数
 
xwer_t xwds_cantrcv_grab (struct xwds_cantrcv *cantrcv)
 XWDS API:增加对象的引用计数
 
xwer_t xwds_cantrcv_put (struct xwds_cantrcv *cantrcv)
 XWDS API:减少对象的引用计数
 
xwer_t xwds_cantrcv_set_opmode (struct xwds_cantrcv *cantrcv, xwsq_t opmode)
 XWDS API:设置CAN接收器的运行模式
 
void xwds_cantrcv_get_opmode (struct xwds_cantrcv *cantrcv, xwsq_t *opmode)
 XWDS API:设置CAN接收器的模式
 
xwer_t xwds_cantrcv_enable_wkup (struct xwds_cantrcv *cantrcv)
 XWDS API:开启CAN接收器的唤醒
 
xwer_t xwds_cantrcv_disable_wkup (struct xwds_cantrcv *cantrcv)
 XWDS API:关闭CAN接收器的唤醒
 
void xwds_cantrcv_set_wkup_isr (struct xwds_cantrcv *cantrcv, xwds_cantrcv_wkup_isr_f isr)
 XWDS API:设置唤醒中断的回调函数
 
void xwds_cantrcv_get_wkuprs (struct xwds_cantrcv *cantrcv, xwsq_t *wkuprs)
 XWDS API:获取CAN接收器的唤醒原因
 
void xwds_cantrcv_clear_wkuprs (struct xwds_cantrcv *cantrcv)
 XWDS API:清除CAN接收器的唤醒原因
 
void xwds_cantrcv_drvcb_wakeup_notification (struct xwds_cantrcv *cantrcv)
 CAN接收器回调函数:CAN接收器的唤醒通知
 

详细描述

类型定义说明

◆ xwds_cantrcv_wkup_isr_f

typedef void(* xwds_cantrcv_wkup_isr_f) (struct xwds_cantrcv *, struct xwds_canc *)

唤醒中断回调函数

在文件 transceiver.h80 行定义.

枚举类型说明

◆ xwds_cantrcv_opmode_em

CAN接收器模式枚举

枚举值
XWDS_CANTRCV_OPMODE_NORMAL 

Transceiver mode NORMAL

XWDS_CANTRCV_OPMODE_SLEEP 

Transceiver mode SLEEP

XWDS_CANTRCV_OPMODE_STANDBY 

Transceiver mode STANDBY

XWDS_CANTRCV_OPMODE_NUM 

number of operation mode

在文件 transceiver.h40 行定义.

40 {
45};
@ XWDS_CANTRCV_OPMODE_NORMAL
Definition transceiver.h:41
@ XWDS_CANTRCV_OPMODE_STANDBY
Definition transceiver.h:43
@ XWDS_CANTRCV_OPMODE_NUM
Definition transceiver.h:44
@ XWDS_CANTRCV_OPMODE_SLEEP
Definition transceiver.h:42

◆ xwds_cantrcv_wkuprs_em

CAN接收器唤醒原因枚举

枚举值
XWDS_CANTRCV_WKUPRS_NONE 

No reason

XWDS_CANTRCV_WKUPRS_BY_BUS 
XWDS_CANTRCV_WKUPRS_BY_PIN 

The transceiver has detected, that the network has caused the wake up of the ECU.

XWDS_CANTRCV_WKUPRS_INTERNALLY 

The transceiver has detected a wake-up event at one of the transceiver's pins (not at the CAN bus).

XWDS_CANTRCV_WKUPRS_NOT_SUPPORTED 

The transceiver has detected, that the network has woken up by the ECU via a request to NORMAL mode.

XWDS_CANTRCV_WKUPRS_POWER_ON 

The transceiver does not support any information for the wake up reason.

XWDS_CANTRCV_WKUPRS_RESET 

The transceiver has detected, that the "wake up" is due to an ECU reset after power on.

XWDS_CANTRCV_WKUPRS_BY_SYSERR 

The transceiver has detected, that the "wake up" is due to an ECU reset.

XWDS_CANTRCV_WKUPRS_NUM 

The transceiver has detected, that the "wake up" of the ECU was caused by a HW related device failure. number of wakeup reason

在文件 transceiver.h50 行定义.

50 {
73};
@ XWDS_CANTRCV_WKUPRS_RESET
Definition transceiver.h:67
@ XWDS_CANTRCV_WKUPRS_INTERNALLY
Definition transceiver.h:58
@ XWDS_CANTRCV_WKUPRS_BY_PIN
Definition transceiver.h:55
@ XWDS_CANTRCV_WKUPRS_BY_SYSERR
Definition transceiver.h:69
@ XWDS_CANTRCV_WKUPRS_POWER_ON
Definition transceiver.h:64
@ XWDS_CANTRCV_WKUPRS_NOT_SUPPORTED
Definition transceiver.h:61
@ XWDS_CANTRCV_WKUPRS_BY_BUS
Definition transceiver.h:52
@ XWDS_CANTRCV_WKUPRS_NUM
Definition transceiver.h:72
@ XWDS_CANTRCV_WKUPRS_NONE
Definition transceiver.h:51

函数说明

◆ xwds_cantrcv_clear_wkuprs()

void xwds_cantrcv_clear_wkuprs ( struct xwds_cantrcv cantrcv)

XWDS API:清除CAN接收器的唤醒原因

参数
[in]cantrcvCAN接收器对象指针
注解
  • 上下文:中断、中断底半部、线程

在文件 transceiver.c301 行定义.

302{
303 XWDS_VALIDATE(cantrcv, "nullptr");
304
306}
#define XWDS_VALIDATE(exp, errstr,...)
Definition standard.h:51

◆ xwds_cantrcv_construct()

void xwds_cantrcv_construct ( struct xwds_cantrcv cantrcv)

XWDS API:CAN接收器的构造函数

参数
[in]cantrcvCAN接收器对象指针

在文件 transceiver.c60 行定义.

61{
62 xwds_device_construct(&cantrcv->bc.dev);
63 cantrcv->bc.dev.vop = &xwds_cantrcv_vop;
64}
void xwds_device_construct(struct xwds_device *dev)
XWDS API:设备的构造函数
Definition device.c:48
union xwds_cantrcv::@16 bc
struct xwds_device dev
const struct xwds_virtual_operation * vop
Definition device.h:138
const struct xwds_virtual_operation xwds_cantrcv_vop
Definition transceiver.c:47
函数调用图:
这是这个函数的调用关系图:

◆ xwds_cantrcv_destruct()

void xwds_cantrcv_destruct ( struct xwds_cantrcv cantrcv)

XWDS API:CAN接收器对象的析构函数

参数
[in]cantrcvCAN接收器对象指针

在文件 transceiver.c67 行定义.

68{
69 xwds_device_destruct(&cantrcv->bc.dev);
70}
void xwds_device_destruct(struct xwds_device *dev)
XWDS API:设备的析构函数
Definition device.c:56
函数调用图:
这是这个函数的调用关系图:

◆ xwds_cantrcv_disable_wkup()

xwer_t xwds_cantrcv_disable_wkup ( struct xwds_cantrcv cantrcv)

XWDS API:关闭CAN接收器的唤醒

参数
[in]cantrcvCAN接收器对象指针
返回
错误码
返回值
XWOK没有错误
-EFAULT空指针
-EOPNOTSUPP不支持此API
注解
  • 上下文:中断、中断底半部、线程

在文件 transceiver.c254 行定义.

255{
256 xwer_t rc;
257 const struct xwds_cantrcv_driver * drv;
258 const struct xwds_cantrcv_cfg * cfg;
259
260 XWDS_VALIDATE(cantrcv, "nullptr", -EFAULT);
261
262 cfg = cantrcv->cfg;
263 if (cfg->wkup_supported) {
264 drv = xwds_cast(const struct xwds_cantrcv_driver *,
265 cantrcv->bc.dev.drv);
266 if ((drv) && (drv->disable_wkup)) {
267 rc = drv->disable_wkup(cantrcv);
268 } else {
269 rc = -ENOSYS;
270 }
271 } else {
272 rc = -EOPNOTSUPP;
273 }
274 return rc;
275}
#define xwds_cast(type, dev)
Definition standard.h:40
#define EFAULT
Bad address
Definition errno.h:44
#define ENOSYS
Function not implemented
Definition errno.h:110
#define EOPNOTSUPP
Operation not supported on socket
Definition errno.h:115
signed long xwer_t
Definition type.h:554
CAN接收器配置
Definition transceiver.h:85
BSP中需要提供的CAN接收器驱动函数表
Definition transceiver.h:96
xwer_t(* disable_wkup)(struct xwds_cantrcv *)
const struct xwds_cantrcv_cfg * cfg
const struct xwds_driver * drv
Definition device.h:133

◆ xwds_cantrcv_drvcb_wakeup_notification()

void xwds_cantrcv_drvcb_wakeup_notification ( struct xwds_cantrcv cantrcv)

CAN接收器回调函数:CAN接收器的唤醒通知

参数
[in]cantrcvCAN接收器对象指针
注解
  • 上下文:中断、中断底半部

此回调函数在中断上下文中被调用,用于通知唤醒。

在文件 transceiver.c309 行定义.

310{
311 if (cantrcv->wkup_isr) {
312 cantrcv->wkup_isr(cantrcv, cantrcv->canc);
313 }/* else {} */
314}
struct xwds_canc * canc
xwds_cantrcv_wkup_isr_f wkup_isr
这是这个函数的调用关系图:

◆ xwds_cantrcv_enable_wkup()

xwer_t xwds_cantrcv_enable_wkup ( struct xwds_cantrcv cantrcv)

XWDS API:开启CAN接收器的唤醒

参数
[in]cantrcvCAN接收器对象指针
返回
错误码
返回值
XWOK没有错误
-EFAULT空指针
-EOPNOTSUPP不支持此API
注解
  • 上下文:中断、中断底半部、线程

在文件 transceiver.c230 行定义.

231{
232 xwer_t rc;
233 const struct xwds_cantrcv_driver * drv;
234 const struct xwds_cantrcv_cfg * cfg;
235
236 XWDS_VALIDATE(cantrcv, "nullptr", -EFAULT);
237
238 cfg = cantrcv->cfg;
239 if (cfg->wkup_supported) {
240 drv = xwds_cast(const struct xwds_cantrcv_driver *,
241 cantrcv->bc.dev.drv);
242 if ((drv) && (drv->enable_wkup)) {
243 rc = drv->enable_wkup(cantrcv);
244 } else {
245 rc = -ENOSYS;
246 }
247 } else {
248 rc = -EOPNOTSUPP;
249 }
250 return rc;
251}
xwer_t(* enable_wkup)(struct xwds_cantrcv *)
Definition transceiver.h:99

◆ xwds_cantrcv_get_opmode()

void xwds_cantrcv_get_opmode ( struct xwds_cantrcv cantrcv,
xwsq_t opmode 
)

XWDS API:设置CAN接收器的模式

参数
[in]cantrcvCAN接收器对象指针
[out]opmode指向缓冲区的指针,通过次缓冲区返回模式
注解
  • 上下文:中断、中断底半部、线程

在文件 transceiver.c221 行定义.

222{
223 XWDS_VALIDATE(cantrcv, "nullptr");
224 XWDS_VALIDATE(opmode, "nullptr");
225
226 *opmode = cantrcv->opmode;
227}

◆ xwds_cantrcv_get_wkuprs()

void xwds_cantrcv_get_wkuprs ( struct xwds_cantrcv cantrcv,
xwsq_t wkuprs 
)

XWDS API:获取CAN接收器的唤醒原因

参数
[in]cantrcvCAN接收器对象指针
[out]wkuprs指向缓冲区的指针,通过次缓冲区返回唤醒原因
注解
  • 上下文:中断、中断底半部、线程

在文件 transceiver.c285 行定义.

286{
287 const struct xwds_cantrcv_cfg * cfg;
288
289 XWDS_VALIDATE(cantrcv, "nullptr");
290 XWDS_VALIDATE(wkuprs, "nullptr");
291
292 cfg = cantrcv->cfg;
293 if (cfg->wkup_supported) {
294 *wkuprs = cantrcv->wkuprs;
295 } else {
297 }
298}

◆ xwds_cantrcv_grab()

xwer_t xwds_cantrcv_grab ( struct xwds_cantrcv cantrcv)

XWDS API:增加对象的引用计数

参数
[in]cantrcvCAN接收器对象指针

在文件 transceiver.c73 行定义.

74{
75 return xwds_device_grab(&cantrcv->bc.dev);
76}
static xwer_t xwds_device_grab(struct xwds_device *dev)
XWDS API:增加对象的引用计数
Definition device.h:268
函数调用图:
这是这个函数的调用关系图:

◆ xwds_cantrcv_put()

xwer_t xwds_cantrcv_put ( struct xwds_cantrcv cantrcv)

XWDS API:减少对象的引用计数

参数
[in]cantrcvCAN接收器对象指针

在文件 transceiver.c79 行定义.

80{
81 return xwds_device_put(&cantrcv->bc.dev);
82}
static xwer_t xwds_device_put(struct xwds_device *dev)
XWDS API:减少对象的引用计数
Definition device.h:281
函数调用图:
这是这个函数的调用关系图:

◆ xwds_cantrcv_set_opmode()

xwer_t xwds_cantrcv_set_opmode ( struct xwds_cantrcv cantrcv,
xwsq_t  opmode 
)

XWDS API:设置CAN接收器的运行模式

参数
[in]cantrcvCAN接收器对象指针
[in]opmode唤醒模式
返回
错误码
返回值
XWOK没有错误
-EFAULT空指针
-ERANGE不支持的模式
注解
  • 上下文:中断、中断底半部、线程

<No error

在文件 transceiver.c196 行定义.

197{
198 xwer_t rc;
199 const struct xwds_cantrcv_driver * drv;
200
201 XWDS_VALIDATE(cantrcv, "nullptr", -EFAULT);
202 XWDS_VALIDATE((opmode < XWDS_CANTRCV_OPMODE_NUM), "out-of-range", -ERANGE);
203
204 drv = xwds_cast(const struct xwds_cantrcv_driver *, cantrcv->bc.dev.drv);
205 if ((drv) && (drv->set_opmode)) {
206 rc = drv->set_opmode(cantrcv, opmode);
207 } else {
208 rc = -ENOSYS;
209 }
210 if (rc < 0) {
211 goto err_ops_set_opmode;
212 }
213 cantrcv->opmode = opmode;
214 return XWOK;
215
216err_ops_set_opmode:
217 return rc;
218}
#define XWOK
No error
Definition errno.h:182
#define ERANGE
Result too large
Definition errno.h:64
xwer_t(* set_opmode)(struct xwds_cantrcv *, xwsq_t)
Definition transceiver.h:98
这是这个函数的调用关系图:

◆ xwds_cantrcv_set_wkup_isr()

void xwds_cantrcv_set_wkup_isr ( struct xwds_cantrcv cantrcv,
xwds_cantrcv_wkup_isr_f  isr 
)

XWDS API:设置唤醒中断的回调函数

参数
[in]cantrcvCAN接收器对象指针
[in]isr回调函数
注解
  • 上下文:中断、中断底半部、线程

必须调用 xwds_cantrcv_disable_wkup() 后才可修改回调函数。

在文件 transceiver.c278 行定义.

280{
281 cantrcv->wkup_isr = isr;
282}