XWOS API  4.0
XWOS C/C++ API参考手册
载入中...
搜索中...
未找到
I2C主机 的协作图:

结构体

struct  xwds_i2cm_driver
 BSP中需要提供的I2C主机驱动函数表 更多...
 
struct  xwds_i2cm
 I2C主机 更多...
 

函数

void xwds_i2cm_construct (struct xwds_i2cm *i2cm)
 XWDS API:I2C主机控制器的构造函数
 
void xwds_i2cm_destruct (struct xwds_i2cm *i2cm)
 XWDS API:I2C主机控制器对象的析构函数
 
xwer_t xwds_i2cm_grab (struct xwds_i2cm *i2cm)
 XWDS API:增加对象的引用计数
 
xwer_t xwds_i2cm_put (struct xwds_i2cm *i2cm)
 XWDS API:减少对象的引用计数
 
xwer_t xwds_i2cm_xfer (struct xwds_i2cm *i2cm, struct xwds_i2c_msg *msg, xwtm_t to)
 XWDS API:传输I2C消息
 
xwer_t xwds_i2cm_abort (struct xwds_i2cm *i2cm, xwu16_t address, xwu16_t addrmode, xwtm_t to)
 XWDS API:中止I2C总线传输
 

详细描述

函数说明

◆ xwds_i2cm_abort()

xwer_t xwds_i2cm_abort ( struct xwds_i2cm i2cm,
xwu16_t  address,
xwu16_t  addrmode,
xwtm_t  to 
)

XWDS API:中止I2C总线传输

参数
[in]i2cmI2C主机控制器对象指针
[in]addressI2C地址
[in]addrmodeI2C地址模式,取值:
  • XWDS_I2C_F_7BITADDR 7位地址模式
  • XWDS_I2C_F_10BITADDR 10位地址模式
[in]to期望唤醒的时间点
返回
错误码
返回值
XWOK没有错误
-EINVAL设备对象不可引用
-ESHUTDOWN设备没有运行
-EADDRNOTAVAIL地址无响应
-ETIMEDOUT超时
注解
  • 上下文:线程
  • 异步函数

to 表示等待超时的时间点:

  • to 通常是未来的时间,即 当前系统时间 + delta , 可以使用 xwtm_ft(delta) 表示;
  • 如果 to 是过去的时间点,将直接返回 -ETIMEDOUT

<No error

在文件 master.c240 行定义.

243{
244 xwer_t rc;
245 const struct xwds_i2cm_driver * drv;
246
247 XWDS_VALIDATE(i2cm, "nullptr", -EFAULT);
248
249 rc = xwds_i2cm_grab(i2cm);
250 if (rc < 0) {
251 goto err_i2cm_grab;
252 }
253 rc = xwos_mtx_lock_to(&i2cm->abort.apimtx, to);
254 if (rc < 0) {
255 goto err_i2cm_lock;
256 }
257 drv = xwds_cast(const struct xwds_i2cm_driver *, i2cm->dev.drv);
258 if ((drv) && (drv->abort)) {
259 rc = drv->abort(i2cm, address, addrmode, to);
260 } else {
261 rc = -ENOSYS;
262 }
263 if (rc < 0) {
264 goto err_drv_abort;
265 }
267 xwds_i2cm_put(i2cm);
268 return XWOK;
269
270err_drv_abort:
272err_i2cm_lock:
273 xwds_i2cm_put(i2cm);
274err_i2cm_grab:
275 return rc;
276}
xwer_t xwds_i2cm_put(struct xwds_i2cm *i2cm)
XWDS API:减少对象的引用计数
Definition master.c:77
xwer_t xwds_i2cm_grab(struct xwds_i2cm *i2cm)
XWDS API:增加对象的引用计数
Definition master.c:71
#define xwds_cast(type, dev)
Definition standard.h:40
#define XWDS_VALIDATE(exp, errstr,...)
Definition standard.h:51
#define EFAULT
Bad address
Definition errno.h:44
#define ENOSYS
Function not implemented
Definition errno.h:110
#define XWOK
No error
Definition errno.h:182
signed long xwer_t
Definition type.h:554
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
BSP中需要提供的I2C主机驱动函数表
Definition master.h:40
xwer_t(* abort)(struct xwds_i2cm *, xwu16_t, xwu16_t, xwtm_t)
Definition master.h:45
struct xwds_device dev
Definition master.h:54
struct xwds_i2cm::@18 abort
struct xwos_mtx apimtx
Definition master.h:61
函数调用图:

◆ xwds_i2cm_construct()

void xwds_i2cm_construct ( struct xwds_i2cm i2cm)

XWDS API:I2C主机控制器的构造函数

参数
[in]i2cmI2C主机控制器对象指针

在文件 master.c58 行定义.

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

◆ xwds_i2cm_destruct()

void xwds_i2cm_destruct ( struct xwds_i2cm i2cm)

XWDS API:I2C主机控制器对象的析构函数

参数
[in]i2cmI2C主机控制器对象指针

在文件 master.c65 行定义.

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

◆ xwds_i2cm_grab()

xwer_t xwds_i2cm_grab ( struct xwds_i2cm i2cm)

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

参数
[in]i2cmI2C主机控制器对象指针

在文件 master.c71 行定义.

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

◆ xwds_i2cm_put()

xwer_t xwds_i2cm_put ( struct xwds_i2cm i2cm)

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

参数
[in]i2cmI2C主机控制器对象指针

在文件 master.c77 行定义.

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

◆ xwds_i2cm_xfer()

xwer_t xwds_i2cm_xfer ( struct xwds_i2cm i2cm,
struct xwds_i2c_msg msg,
xwtm_t  to 
)

XWDS API:传输I2C消息

参数
[in]i2cmI2C主机控制器对象指针
[in,out]msgI2C消息结构体的指针
  • (I) addr: 地址,只作为输入
  • (I) flag: 传输标志,只作为输入,取值:
    • 地址标志:
      • XWDS_I2C_F_7BITADDR: 7位地址
      • XWDS_I2C_F_10BITADDR: 10位地址
    • 方向标志:
      • XWDS_I2C_F_RD: 读
      • XWDS_I2C_F_WR: 写
    • 开始/停止条件标志:
      • XWDS_I2C_F_START: 产生开始条件
      • XWDS_I2C_F_STOP: 产生结束条件
  • data: 数据缓冲区:
    • (I) 当方向标志为读时,只作为输入缓冲区
    • (O) 当方向标志为写时,只作为输出缓冲区
  • size: 传输的字节数
    • (I) 当作为输入时,表示缓冲区的大小
    • (O) 当作为输出时,返回实际传输的数据大小
[in]to期望唤醒的时间点
返回
错误码
返回值
XWOK没有错误
-EINVAL设备对象不可引用
-ESHUTDOWN设备没有运行
-EADDRNOTAVAIL地址无响应
-ETIMEDOUT超时
注解
  • 上下文:线程

to 表示等待超时的时间点:

  • to 通常是未来的时间,即 当前系统时间 + delta , 可以使用 xwtm_ft(delta) 表示;
  • 如果 to 是过去的时间点,将直接返回 -ETIMEDOUT

<No error

在文件 master.c201 行定义.

202{
203 xwer_t rc;
204 const struct xwds_i2cm_driver * drv;
205
206 XWDS_VALIDATE(i2cm, "nullptr", -EFAULT);
207 XWDS_VALIDATE(msg, "nullptr", -EFAULT);
208 XWDS_VALIDATE((msg->flag & XWDS_I2C_F_DIRMSK), "no-direction", -EINVAL);
209
210 rc = xwds_i2cm_grab(i2cm);
211 if (rc < 0) {
212 goto err_i2cm_grab;
213 }
214 rc = xwos_mtx_lock_to(&i2cm->xfer.apimtx, to);
215 if (rc < 0) {
216 goto err_i2cm_lock;
217 }
218 drv = xwds_cast(const struct xwds_i2cm_driver *, i2cm->dev.drv);
219 if ((drv) && (drv->xfer)) {
220 rc = drv->xfer(i2cm, msg, to);
221 } else {
222 rc = -ENOSYS;
223 }
224 if (rc < 0) {
225 goto err_drv_xfer;
226 }
228 xwds_i2cm_put(i2cm);
229 return XWOK;
230
231err_drv_xfer:
233err_i2cm_lock:
234 xwds_i2cm_put(i2cm);
235err_i2cm_grab:
236 return rc;
237}
@ XWDS_I2C_F_DIRMSK
Definition common.h:44
#define EINVAL
Invalid argument
Definition errno.h:52
xwu16_t flag
Definition common.h:66
xwer_t(* xfer)(struct xwds_i2cm *, struct xwds_i2c_msg *, xwtm_t)
Definition master.h:42
struct xwds_i2cm::@17 xfer
函数调用图:
这是这个函数的调用关系图: