XWOS API  4.0
XWOS C/C++ API参考手册
载入中...
搜索中...
未找到
LIN控制器 的协作图:

结构体

struct  xwds_lin_msg
 LIN消息结构体 更多...
 
struct  xwds_lin_msg_info
 LIN消息信息 更多...
 
struct  xwds_lin_cfg
 LIN控制器配置 更多...
 
struct  xwds_linc_driver
 LIN控制器驱动函数表 更多...
 
struct  xwds_linc
 LIN控制器 更多...
 

宏定义

#define XWDS_LIN_DIAG_MSTREQ_MSG   0x3C
 
#define XWDS_LIN_DIAG_SLCREP_MSG   0x3D
 
#define XWDS_LIN_DEFAULT_DATA_SIZE   8
 
#define LIN_ID_PARITY(id)
 
#define LIN_ID_PARITY_FIELD(id)   (LIN_ID_PARITY(id) | ((id) & 0xFFU))
 

枚举

enum  xwds_lin_mode_em { XWDS_LIN_MODE_CLOSE = 0 , XWDS_LIN_MODE_TX = ((xwbmp_t)1 << ( 0 )) , XWDS_LIN_MODE_RX = ((xwbmp_t)1 << ( 1 )) }
 LIN接口模式枚举 更多...
 
enum  xwds_lin_chksum_type_em { XWDS_LIN_CHKSUM_CLASSIC = 0 , XWDS_LIN_CHKSUM_ENHANCED }
 LIN协议类型 更多...
 

函数

void xwds_linc_construct (struct xwds_linc *linc)
 XWDS API:LIN控制器的构造函数
 
void xwds_linc_destruct (struct xwds_linc *linc)
 XWDS API:LIN控制器对象的析构函数
 
xwer_t xwds_linc_grab (struct xwds_linc *linc)
 XWDS API:增加对象的引用计数
 
xwer_t xwds_linc_put (struct xwds_linc *linc)
 XWDS API:减少对象的引用计数
 
xwer_t xwds_linc_msttx (struct xwds_linc *linc, xwu8_t id, struct xwds_lin_msg *msg, xwtm_t to)
 XWDS API:主机节点发送一条LIN消息
 
xwer_t xwds_linc_slvtx (struct xwds_linc *linc, struct xwds_lin_msg *msg, xwtm_t to)
 XWDS API:从机节点发送一条LIN消息
 
xwer_t xwds_linc_rx (struct xwds_linc *linc, struct xwds_lin_msg *msgbuf, xwtm_t to)
 XWDS API:接收一条LIN消息
 
xwer_t xwds_linc_get_msg_size (struct xwds_linc *linc, xwu8_t protected_id, xwu8_t *ret)
 XWDS API:通过LIN保护ID查询消息大小
 

变量

const unsigned char xwos_linid_table [64]
 LIN总线ID校验表
 

详细描述

宏定义说明

◆ LIN_ID_PARITY

#define LIN_ID_PARITY (   id)
值:
((((~(XWBOP_TBIT((id), 1U) ^ XWBOP_TBIT((id), 3U) ^ \
XWBOP_TBIT((id), 4U) ^ XWBOP_TBIT((id), 5U))) << 7U) | \
((XWBOP_TBIT((id), 0U) ^ XWBOP_TBIT((id), 1U) ^ \
XWBOP_TBIT((id), 2U) ^ XWBOP_TBIT((id), 4U)) << 6U)) & \
0xC0U)
#define XWBOP_TBIT(x, n)
Definition xwbop.h:38

在文件 id.h33 行定义.

◆ LIN_ID_PARITY_FIELD

#define LIN_ID_PARITY_FIELD (   id)    (LIN_ID_PARITY(id) | ((id) & 0xFFU))

在文件 id.h38 行定义.

◆ XWDS_LIN_DEFAULT_DATA_SIZE

#define XWDS_LIN_DEFAULT_DATA_SIZE   8

在文件 controller.h37 行定义.

◆ XWDS_LIN_DIAG_MSTREQ_MSG

#define XWDS_LIN_DIAG_MSTREQ_MSG   0x3C

在文件 controller.h35 行定义.

◆ XWDS_LIN_DIAG_SLCREP_MSG

#define XWDS_LIN_DIAG_SLCREP_MSG   0x3D

在文件 controller.h36 行定义.

枚举类型说明

◆ xwds_lin_chksum_type_em

LIN协议类型

枚举值
XWDS_LIN_CHKSUM_CLASSIC 
XWDS_LIN_CHKSUM_ENHANCED 

在文件 controller.h51 行定义.

51 {
54};
@ XWDS_LIN_CHKSUM_ENHANCED
Definition controller.h:53
@ XWDS_LIN_CHKSUM_CLASSIC
Definition controller.h:52

◆ xwds_lin_mode_em

LIN接口模式枚举

枚举值
XWDS_LIN_MODE_CLOSE 
XWDS_LIN_MODE_TX 
XWDS_LIN_MODE_RX 

在文件 controller.h42 行定义.

42 {
46};
@ XWDS_LIN_MODE_CLOSE
Definition controller.h:43
@ XWDS_LIN_MODE_TX
Definition controller.h:44
@ XWDS_LIN_MODE_RX
Definition controller.h:45
#define XWBOP_BIT(n)
Definition xwbop.h:27

函数说明

◆ xwds_linc_construct()

void xwds_linc_construct ( struct xwds_linc linc)

XWDS API:LIN控制器的构造函数

参数
[in]lincLIN控制器对象指针

在文件 controller.c58 行定义.

59{
61 linc->dev.vop = &xwds_linc_vop;
62}
void xwds_device_construct(struct xwds_device *dev)
XWDS API:设备的构造函数
Definition device.c:48
const struct xwds_virtual_operation xwds_linc_vop
Definition controller.c:45
const struct xwds_virtual_operation * vop
Definition device.h:138
struct xwds_device dev
Definition controller.h:108
函数调用图:

◆ xwds_linc_destruct()

void xwds_linc_destruct ( struct xwds_linc linc)

XWDS API:LIN控制器对象的析构函数

参数
[in]lincLIN控制器对象指针

在文件 controller.c65 行定义.

66{
68}
void xwds_device_destruct(struct xwds_device *dev)
XWDS API:设备的析构函数
Definition device.c:56
函数调用图:

◆ xwds_linc_get_msg_size()

xwer_t xwds_linc_get_msg_size ( struct xwds_linc linc,
xwu8_t  protected_id,
xwu8_t ret 
)

XWDS API:通过LIN保护ID查询消息大小

参数
[in]lincLIN控制器对象指针
[in]protected_id消息的LIN保护ID
[out]ret指向缓冲区的指针,通过此缓冲区返回消息大小
返回
错误码
返回值
XWOK没有错误
-EFAULT无效指针
-ENODEV找不到ID
注解
  • 上下文:任意

<No error

<No error

在文件 controller.c301 行定义.

304{
305 const struct xwds_lin_msg_info * msgitbl;
306 xwsz_t itemnum;
307 xwer_t rc;
308 xwsq_t i;
309
310 XWDS_VALIDATE(linc, "nullptr", -EFAULT);
311 XWDS_VALIDATE(ret, "nullptr", -EFAULT);
312
313 msgitbl = linc->msgitable;
314 itemnum = linc->msgitable_itemnum;
315 rc = -ENODEV;
316 if (!is_err_or_null(msgitbl)) {
317 for (i = 0; i < itemnum; i++) {
318 if (protected_id == msgitbl[i].protected_id) {
319 *ret = msgitbl[i].size;
320 rc = XWOK;
321 break;
322 }
323 }
324 if (-ENODEV == rc) {
326 }
327 } else {
328 rc = XWOK;
330 }
331 return rc;
332}
#define XWDS_LIN_DEFAULT_DATA_SIZE
Definition controller.h:37
#define XWDS_VALIDATE(exp, errstr,...)
Definition standard.h:51
#define EFAULT
Bad address
Definition errno.h:44
#define XWOK
No error
Definition errno.h:182
#define ENODEV
No such device
Definition errno.h:49
static __xwcc_inline bool __xwcc_must_check is_err_or_null(const void *ptr)
测试指针的值是否为空或错误码(指针是否为无效指针)
Definition error.h:77
signed long xwer_t
Definition type.h:554
unsigned long xwsz_t
Definition type.h:339
unsigned long xwsq_t
Definition type.h:445
LIN消息信息
Definition controller.h:68
xwsz_t msgitable_itemnum
Definition controller.h:113
const struct xwds_lin_msg_info * msgitable
Definition controller.h:112
函数调用图:
这是这个函数的调用关系图:

◆ xwds_linc_grab()

xwer_t xwds_linc_grab ( struct xwds_linc linc)

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

参数
[in]lincLIN控制器对象指针

在文件 controller.c71 行定义.

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

◆ xwds_linc_msttx()

xwer_t xwds_linc_msttx ( struct xwds_linc linc,
xwu8_t  id,
struct xwds_lin_msg msg,
xwtm_t  to 
)

XWDS API:主机节点发送一条LIN消息

参数
[in]lincLIN控制器对象指针
[in]id主机节点调度消息的ID
[in]msgLIN消息结构体指针
[in]to期望唤醒的时间点
返回
错误码
返回值
XWOK没有错误
-EFAULT无效指针
-ENOSYS控制器不支持主机模式发送
注解
  • 上下文:线程

如果 to 是过去的时间点,将直接返回 -ETIMEDOUT

<No error

在文件 controller.c188 行定义.

191{
192 xwer_t rc;
193 const struct xwds_linc_driver * drv;
194
195 XWDS_VALIDATE(linc, "nullptr", -EFAULT);
196 XWDS_VALIDATE(msg, "nullptr", -EFAULT);
197
198 rc = xwds_linc_grab(linc);
199 if (rc < 0) {
200 goto err_linc_grab;
201 }
202 rc = xwos_mtx_lock_to(&linc->txlock, to);
203 if (rc < 0) {
204 goto err_linc_txlock;
205 }
206 drv = xwds_cast(const struct xwds_linc_driver *, linc->dev.drv);
207 if ((drv) && (drv->msttx)) {
208 rc = drv->msttx(linc, id, msg, to);
209 } else {
210 rc = -ENOSYS;
211 }
212 if (rc < 0) {
213 goto err_drv_msttx;
214 }
215 xwos_mtx_unlock(&linc->txlock);
216 xwds_linc_put(linc);
217 return XWOK;
218
219err_drv_msttx:
220 xwos_mtx_unlock(&linc->txlock);
221err_linc_txlock:
222 xwds_linc_put(linc);
223err_linc_grab:
224 return rc;
225}
xwer_t xwds_linc_grab(struct xwds_linc *linc)
XWDS API:增加对象的引用计数
Definition controller.c:71
xwer_t xwds_linc_put(struct xwds_linc *linc)
XWDS API:减少对象的引用计数
Definition controller.c:77
#define xwds_cast(type, dev)
Definition standard.h:40
#define ENOSYS
Function not implemented
Definition errno.h:110
static xwer_t xwos_mtx_lock_to(struct xwos_mtx *mtx, xwtm_t to)
XWOS API:限时等待上锁互斥锁
Definition mtx.h:329
static xwer_t xwos_mtx_unlock(struct xwos_mtx *mtx)
XWOS API:解锁互斥锁
Definition mtx.h:279
const struct xwds_driver * drv
Definition device.h:133
LIN控制器驱动函数表
Definition controller.h:94
xwer_t(* msttx)(struct xwds_linc *, xwu8_t, struct xwds_lin_msg *, xwtm_t)
Definition controller.h:96
struct xwos_mtx txlock
Definition controller.h:122
函数调用图:

◆ xwds_linc_put()

xwer_t xwds_linc_put ( struct xwds_linc linc)

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

参数
[in]lincLIN控制器对象指针

在文件 controller.c77 行定义.

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

◆ xwds_linc_rx()

xwer_t xwds_linc_rx ( struct xwds_linc linc,
struct xwds_lin_msg msgbuf,
xwtm_t  to 
)

XWDS API:接收一条LIN消息

参数
[in]lincLIN控制器对象指针
[out]msgbuf指向接收消息缓冲区的指针
[in,out]to期望唤醒的时间点
返回
错误码
返回值
XWOK没有错误
-EFAULT无效指针
-ENOSYS控制器不支持接收
注解
  • 上下文:线程

如果 to 是过去的时间点,将直接返回 -ETIMEDOUT

<No error

在文件 controller.c268 行定义.

271{
272 xwer_t rc;
273 const struct xwds_linc_driver * drv;
274
275 XWDS_VALIDATE(linc, "nullptr", -EFAULT);
276 XWDS_VALIDATE(msgbuf, "nullptr", -EFAULT);
277
278 rc = xwds_linc_grab(linc);
279 if (rc < 0) {
280 goto err_linc_grab;
281 }
282 drv = xwds_cast(const struct xwds_linc_driver *, linc->dev.drv);
283 if ((drv) && (drv->rx)) {
284 rc = drv->rx(linc, msgbuf, to);
285 } else {
286 rc = -ENOSYS;
287 }
288 if (rc < 0) {
289 goto err_drv_rx;
290 }
291 xwds_linc_put(linc);
292 return XWOK;
293
294err_drv_rx:
295 xwds_linc_put(linc);
296err_linc_grab:
297 return rc;
298}
xwer_t(* rx)(struct xwds_linc *, struct xwds_lin_msg *, xwtm_t)
Definition controller.h:100
函数调用图:

◆ xwds_linc_slvtx()

xwer_t xwds_linc_slvtx ( struct xwds_linc linc,
struct xwds_lin_msg msg,
xwtm_t  to 
)

XWDS API:从机节点发送一条LIN消息

参数
[in]lincLIN控制器对象指针
[in]msgLIN消息结构体指针
[in,out]to期望唤醒的时间点
返回
错误码
返回值
XWOK没有错误
-EFAULT无效指针
-ENOSYS控制器不支持从机模式发送
注解
  • 上下文:线程

如果 to 是过去的时间点,将直接返回 -ETIMEDOUT

<No error

在文件 controller.c228 行定义.

231{
232 xwer_t rc;
233 const struct xwds_linc_driver * drv;
234
235 XWDS_VALIDATE(linc, "nullptr", -EFAULT);
236 XWDS_VALIDATE(msg, "nullptr", -EFAULT);
237
238 rc = xwds_linc_grab(linc);
239 if (rc < 0) {
240 goto err_linc_grab;
241 }
242 rc = xwos_mtx_lock_to(&linc->txlock, to);
243 if (rc < 0) {
244 goto err_linc_txlock;
245 }
246 drv = xwds_cast(const struct xwds_linc_driver *, linc->dev.drv);
247 if ((drv) && (drv->slvtx)) {
248 rc = drv->slvtx(linc, msg, to);
249 } else {
250 rc = -ENOSYS;
251 }
252 if (rc < 0) {
253 goto err_drv_slvtx;
254 }
255 xwos_mtx_unlock(&linc->txlock);
256 xwds_linc_put(linc);
257 return XWOK;
258
259err_drv_slvtx:
260 xwos_mtx_unlock(&linc->txlock);
261err_linc_txlock:
262 xwds_linc_put(linc);
263err_linc_grab:
264 return rc;
265}
xwer_t(* slvtx)(struct xwds_linc *, struct xwds_lin_msg *, xwtm_t)
Definition controller.h:98
函数调用图:

变量说明

◆ xwos_linid_table

const unsigned char xwos_linid_table[64]
extern

LIN总线ID校验表