XWOS API  4.0
XWOS C/C++ API参考手册
载入中...
搜索中...
未找到
driver.h 文件参考

I2C EEPROM 驱动 更多...

driver.h 的引用(Include)关系图:
此图展示该文件直接或间接的被哪些文件引用了:

浏览源代码.

结构体

struct  xwds_eeprom_driver
 EEPROM驱动函数表 更多...
 
const struct xwds_eeprom_driver at24sd_drv
 
const struct xwds_eeprom_driver at24md_drv
 
xwer_t xwds_eeprom_drv_start (struct xwds_device *dev)
 EEPROM基本驱动:启动设备
 
xwer_t xwds_eeprom_drv_stop (struct xwds_device *dev)
 EEPROM基本驱动:停止设备
 
xwer_t xwds_eeprom_drv_resume (struct xwds_device *dev)
 EEPROM基本驱动:暂停设备
 
xwer_t xwds_eeprom_drv_suspend (struct xwds_device *dev)
 EEPROM基本驱动:继续设备
 
xwer_t xwds_eeprom_power_on (struct xwds_eeprom *eeprom)
 EEPROM API:开启EEPROM的电源
 
xwer_t xwds_eeprom_power_off (struct xwds_eeprom *eeprom)
 EEPROM API:关闭EEPROM的电源
 
xwer_t xwds_eeprom_wp_enable (struct xwds_eeprom *eeprom)
 EEPROM API:开启EEPROM的写保护
 
xwer_t xwds_eeprom_wp_disable (struct xwds_eeprom *eeprom)
 EEPROM API:关闭EEPROM的写保护
 
xwer_t xwds_eeprom_putc (struct xwds_eeprom *eeprom, xwu8_t data, xwsq_t addr, xwtm_t to)
 EEPROM API:写一个字节到EEPROM
 
xwer_t xwds_eeprom_getc (struct xwds_eeprom *eeprom, xwu8_t *buf, xwsq_t addr, xwtm_t to)
 EEPROM API:从EEPROM中读取一个字节
 
xwer_t xwds_eeprom_pgwrite (struct xwds_eeprom *eeprom, xwu8_t *data, xwsz_t *size, xwsq_t pgidx, xwtm_t to)
 EEPROM API:写一页数据到EEPROM
 
xwer_t xwds_eeprom_pgread (struct xwds_eeprom *eeprom, xwu8_t *buf, xwsz_t *size, xwsq_t pgidx, xwtm_t to)
 EEPROM API:从EEPROM读一页数据
 
xwer_t xwds_eeprom_reset (struct xwds_eeprom *eeprom, xwtm_t to)
 EEPROM API:复位EEPROM的I2C总线
 

详细描述

I2C EEPROM 驱动

作者
注解
  • 所有API只可被单一线程访问。

在文件 driver.h 中定义.

函数说明

◆ xwds_eeprom_drv_resume()

xwer_t xwds_eeprom_drv_resume ( struct xwds_device dev)

EEPROM基本驱动:暂停设备

在文件 driver.c114 行定义.

115{
116 return xwds_eeprom_drv_start(dev);
117}
xwer_t xwds_eeprom_drv_start(struct xwds_device *dev)
EEPROM基本驱动:启动设备
Definition driver.c:48
函数调用图:

◆ xwds_eeprom_drv_start()

xwer_t xwds_eeprom_drv_start ( struct xwds_device dev)

EEPROM基本驱动:启动设备

<No error

在文件 driver.c48 行定义.

49{
50 struct xwds_eeprom * eeprom;
51 const struct xwds_resource_gpio * gpiorsc;
52 xwer_t rc;
53
54 eeprom = xwds_cast(struct xwds_eeprom *, dev);
55 rc = xwds_eeprom_check_desc(eeprom);
56 if (rc < 0) {
57 goto err_chk_desc;
58 }
59 /* request GPIO resources */
60 gpiorsc = eeprom->pwr_gpiorsc;
61 if (NULL != gpiorsc) {
62 rc = xwds_gpio_req(gpiorsc->soc, gpiorsc->port, gpiorsc->pinmask);
63 if (rc < 0) {
64 goto err_pwrgpio_req;
65 }
66 }
67 gpiorsc = eeprom->wp_gpiorsc;
68 if (NULL != gpiorsc) {
69 rc = xwds_gpio_req(gpiorsc->soc, gpiorsc->port, gpiorsc->pinmask);
70 if (rc < 0) {
71 goto err_wpgpio_req;
72 }
73 }
74 return XWOK;
75
76err_wpgpio_req:
77 gpiorsc = eeprom->pwr_gpiorsc;
78 if (NULL != gpiorsc) {
79 xwds_gpio_rls(gpiorsc->soc, gpiorsc->port, gpiorsc->pinmask);
80 }
81err_pwrgpio_req:
82err_chk_desc:
83 return rc;
84}
#define xwds_cast(type, dev)
Definition standard.h:40
#define XWOK
No error
Definition errno.h:182
signed long xwer_t
Definition type.h:554
#define NULL
Definition type.h:28
static xwer_t xwds_eeprom_check_desc(struct xwds_eeprom *eeprom)
Definition driver.c:29
xwer_t xwds_gpio_rls(struct xwds_soc *soc, xwid_t port, xwsq_t pinmask)
XWDS API:释放SOC的GPIO
Definition gpio.c:63
xwer_t xwds_gpio_req(struct xwds_soc *soc, xwid_t port, xwsq_t pinmask)
XWDS API:申请SOC的GPIO
Definition gpio.c:27
const struct xwds_resource_gpio * wp_gpiorsc
Definition device.h:42
const struct xwds_resource_gpio * pwr_gpiorsc
Definition device.h:41
设备栈GPIO资源
Definition standard.h:98
struct xwds_soc * soc
Definition standard.h:99
函数调用图:
这是这个函数的调用关系图:

◆ xwds_eeprom_drv_stop()

xwer_t xwds_eeprom_drv_stop ( struct xwds_device dev)

EEPROM基本驱动:停止设备

<No error

在文件 driver.c87 行定义.

88{
89 struct xwds_eeprom * eeprom;
90 const struct xwds_resource_gpio * gpiorsc;
91
92 eeprom = xwds_cast(struct xwds_eeprom *, dev);
93 /* release GPIO resources */
94 gpiorsc = eeprom->wp_gpiorsc;
95 if (NULL != gpiorsc) {
96 xwds_gpio_rls(gpiorsc->soc, gpiorsc->port, gpiorsc->pinmask);
97 }
98 gpiorsc = eeprom->pwr_gpiorsc;
99 if (NULL != gpiorsc) {
100 xwds_gpio_rls(gpiorsc->soc, gpiorsc->port, gpiorsc->pinmask);
101 }
102
103 return XWOK;
104}
函数调用图:
这是这个函数的调用关系图:

◆ xwds_eeprom_drv_suspend()

xwer_t xwds_eeprom_drv_suspend ( struct xwds_device dev)

EEPROM基本驱动:继续设备

在文件 driver.c108 行定义.

109{
110 return xwds_eeprom_drv_stop(dev);
111}
xwer_t xwds_eeprom_drv_stop(struct xwds_device *dev)
EEPROM基本驱动:停止设备
Definition driver.c:87
函数调用图:

◆ xwds_eeprom_getc()

xwer_t xwds_eeprom_getc ( struct xwds_eeprom eeprom,
xwu8_t buf,
xwsq_t  addr,
xwtm_t  to 
)

EEPROM API:从EEPROM中读取一个字节

参数
[in]eepromI2C EEPROM对象的指针
[out]buf指向缓冲区的指针,通过此缓冲区返回数据
[in]addr地址
[in]to期望唤醒的时间点 @retrun 错误码
返回值
XWOK没有错误
-EINVAL设备对象不可引用
-ESHUTDOWN设备没有运行
-EADDRNOTAVAIL地址无响应
-ETIMEDOUT超时
注解
  • 上下文:线程

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

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

在文件 driver.c203 行定义.

206{
207 const struct xwds_eeprom_driver * drv;
208 xwer_t rc;
209
210 drv = xwds_cast(const struct xwds_eeprom_driver *, eeprom->i2cp.dev.drv);
211 if ((drv) && (drv->getc)) {
212 rc = drv->getc(eeprom, buf, addr, to);
213 } else {
214 rc = -ENOSYS;
215 }
216 return rc;
217}
#define ENOSYS
Function not implemented
Definition errno.h:110
const struct xwds_driver * drv
Definition device.h:133
EEPROM驱动函数表
Definition driver.h:38
xwer_t(* getc)(struct xwds_eeprom *, xwu8_t *, xwptr_t, xwtm_t)
Definition driver.h:43
struct xwds_i2cp i2cp
Definition device.h:39
struct xwds_device dev
Definition peripheral.h:49

◆ xwds_eeprom_pgread()

xwer_t xwds_eeprom_pgread ( struct xwds_eeprom eeprom,
xwu8_t buf,
xwsz_t size,
xwsq_t  pgidx,
xwtm_t  to 
)

EEPROM API:从EEPROM读一页数据

参数
[in]eepromI2C EEPROM对象的指针
[out]buf指向缓冲区的指针,通过此缓冲区返回数据
[in,out]size指向缓冲区的指针,此缓冲区:
  • (I) 作为输入时,表示数据的大小
  • (O) 作为输出时,返回实际写入的数据大小
[in]pgidx页的序号
[in]to期望唤醒的时间点 @retrun 错误码
返回值
XWOK没有错误
-EINVAL设备对象不可引用
-ESHUTDOWN设备没有运行
-EADDRNOTAVAIL地址无响应
-ETIMEDOUT超时
注解
  • 上下文:线程

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

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

在文件 driver.c237 行定义.

240{
241 const struct xwds_eeprom_driver * drv;
242 xwer_t rc;
243
244 drv = xwds_cast(const struct xwds_eeprom_driver *, eeprom->i2cp.dev.drv);
245 if ((drv) && (drv->pgread)) {
246 rc = drv->pgread(eeprom, buf, size, pgidx, to);
247 } else {
248 rc = -ENOSYS;
249 }
250 return rc;
251}
xwer_t(* pgread)(struct xwds_eeprom *, xwu8_t *, xwsz_t *, xwsq_t, xwtm_t)
Definition driver.h:49

◆ xwds_eeprom_pgwrite()

xwer_t xwds_eeprom_pgwrite ( struct xwds_eeprom eeprom,
xwu8_t data,
xwsz_t size,
xwsq_t  pgidx,
xwtm_t  to 
)

EEPROM API:写一页数据到EEPROM

参数
[in]eepromI2C EEPROM对象的指针
[in]data待写入的数据的缓冲区
[in,out]size指向缓冲区的指针,此缓冲区:
  • (I) 作为输入时,表示数据的大小
  • (O) 作为输出时,返回实际写入的数据大小
[in]pgidx页的序号
[in]to期望唤醒的时间点 @retrun 错误码
返回值
XWOK没有错误
-EINVAL设备对象不可引用
-ESHUTDOWN设备没有运行
-EADDRNOTAVAIL地址无响应
-ETIMEDOUT超时
注解
  • 上下文:线程

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

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

在文件 driver.c220 行定义.

223{
224 const struct xwds_eeprom_driver * drv;
225 xwer_t rc;
226
227 drv = xwds_cast(const struct xwds_eeprom_driver *, eeprom->i2cp.dev.drv);
228 if ((drv) && (drv->pgwrite)) {
229 rc = drv->pgwrite(eeprom, data, size, pgidx, to);
230 } else {
231 rc = -ENOSYS;
232 }
233 return rc;
234}
xwer_t(* pgwrite)(struct xwds_eeprom *, xwu8_t *, xwsz_t *, xwsq_t, xwtm_t)
Definition driver.h:46

◆ xwds_eeprom_power_off()

xwer_t xwds_eeprom_power_off ( struct xwds_eeprom eeprom)

EEPROM API:关闭EEPROM的电源

参数
[in]eepromI2C EEPROM对象的指针 @retrun 错误码
注解
  • 上下文:线程、中断底半部、线程

在文件 driver.c138 行定义.

139{
140 xwer_t rc;
141
142 if (eeprom->pwr_gpiorsc) {
143 const struct xwds_resource_gpio * gpiorsc = eeprom->pwr_gpiorsc;
144 rc = xwds_gpio_reset(gpiorsc->soc,
145 gpiorsc->port,
146 gpiorsc->pinmask);
147 } else {
148 rc = -ENOSYS;
149 }
150 return rc;
151}
xwer_t xwds_gpio_reset(struct xwds_soc *soc, xwid_t port, xwsq_t pinmask)
XWDS API:将SOC的GPIO设置为低电平
Definition gpio.c:170
函数调用图:

◆ xwds_eeprom_power_on()

xwer_t xwds_eeprom_power_on ( struct xwds_eeprom eeprom)

EEPROM API:开启EEPROM的电源

参数
[in]eepromI2C EEPROM对象的指针 @retrun 错误码
注解
  • 上下文:线程、中断底半部、线程

在文件 driver.c122 行定义.

123{
124 xwer_t rc;
125
126 if (eeprom->pwr_gpiorsc) {
127 const struct xwds_resource_gpio * gpiorsc = eeprom->pwr_gpiorsc;
128 rc = xwds_gpio_set(gpiorsc->soc,
129 gpiorsc->port,
130 gpiorsc->pinmask);
131 } else {
132 rc = -ENOSYS;
133 }
134 return rc;
135}
xwer_t xwds_gpio_set(struct xwds_soc *soc, xwid_t port, xwsq_t pinmask)
XWDS API:将SOC的GPIO设置为高电平
Definition gpio.c:131
函数调用图:

◆ xwds_eeprom_putc()

xwer_t xwds_eeprom_putc ( struct xwds_eeprom eeprom,
xwu8_t  data,
xwsq_t  addr,
xwtm_t  to 
)

EEPROM API:写一个字节到EEPROM

参数
[in]eepromI2C EEPROM对象的指针
[in]data数据
[in]addr地址
[in]to期望唤醒的时间点 @retrun 错误码
返回值
XWOK没有错误
-EINVAL设备对象不可引用
-ESHUTDOWN设备没有运行
-EADDRNOTAVAIL地址无响应
-ETIMEDOUT超时
注解
  • 上下文:线程

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

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

在文件 driver.c186 行定义.

189{
190 const struct xwds_eeprom_driver * drv;
191 xwer_t rc;
192
193 drv = xwds_cast(const struct xwds_eeprom_driver *, eeprom->i2cp.dev.drv);
194 if ((drv) && (drv->putc)) {
195 rc = drv->putc(eeprom, data, addr, to);
196 } else {
197 rc = -ENOSYS;
198 }
199 return rc;
200}
xwer_t(* putc)(struct xwds_eeprom *, xwu8_t, xwptr_t, xwtm_t)
Definition driver.h:40

◆ xwds_eeprom_reset()

xwer_t xwds_eeprom_reset ( struct xwds_eeprom eeprom,
xwtm_t  to 
)

EEPROM API:复位EEPROM的I2C总线

参数
[in]eepromI2C EEPROM对象的指针
[in]to期望唤醒的时间点 @retrun 错误码
返回值
XWOK没有错误
-EINVAL设备对象不可引用
-ESHUTDOWN设备没有运行
-EADDRNOTAVAIL地址无响应
-ETIMEDOUT超时
注解
  • 上下文:线程

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

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

<No error

在文件 driver.c254 行定义.

255{
256 struct xwds_i2c_msg msg;
257 xwu8_t dummy;
258 xwer_t rc;
259
260 dummy = 0xFF;
261 msg.addr = 0xFE;
262 msg.flag = XWDS_I2C_F_START | XWDS_I2C_F_WR;
263 msg.data = &dummy;
264 msg.size = 1;
265 rc = xwds_i2cm_xfer(eeprom->i2cp.bus, &msg, to);
266 if (-EADDRNOTAVAIL == rc) {
268 msg.data = NULL;
269 msg.size = 0;
270 rc = xwds_i2cm_xfer(eeprom->i2cp.bus, &msg, to);
271 if (-EADDRNOTAVAIL == rc) {
272 rc = XWOK;
273 }
274 }
275 return rc;
276}
xwer_t xwds_i2cm_xfer(struct xwds_i2cm *i2cm, struct xwds_i2c_msg *msg, xwtm_t to)
XWDS API:传输I2C消息
Definition master.c:201
@ XWDS_I2C_F_WR
Definition common.h:43
@ XWDS_I2C_F_START
Definition common.h:46
@ XWDS_I2C_F_STOP
Definition common.h:56
#define EADDRNOTAVAIL
Address not available
Definition errno.h:138
uint8_t xwu8_t
Definition type.h:194
I2C消息
Definition common.h:62
xwu16_t addr
Definition common.h:63
struct xwds_i2cm * bus
Definition peripheral.h:52
函数调用图:

◆ xwds_eeprom_wp_disable()

xwer_t xwds_eeprom_wp_disable ( struct xwds_eeprom eeprom)

EEPROM API:关闭EEPROM的写保护

参数
[in]eepromI2C EEPROM对象的指针 @retrun 错误码
注解
  • 上下文:线程、中断底半部、线程

在文件 driver.c170 行定义.

171{
172 xwer_t rc;
173
174 if (eeprom->wp_gpiorsc) {
175 const struct xwds_resource_gpio * gpiorsc = eeprom->wp_gpiorsc;
176 rc = xwds_gpio_reset(gpiorsc->soc,
177 gpiorsc->port,
178 gpiorsc->pinmask);
179 } else {
180 rc = -ENOSYS;
181 }
182 return rc;
183}
函数调用图:

◆ xwds_eeprom_wp_enable()

xwer_t xwds_eeprom_wp_enable ( struct xwds_eeprom eeprom)

EEPROM API:开启EEPROM的写保护

参数
[in]eepromI2C EEPROM对象的指针 @retrun 错误码
注解
  • 上下文:线程、中断底半部、线程

在文件 driver.c154 行定义.

155{
156 xwer_t rc;
157
158 if (eeprom->wp_gpiorsc) {
159 const struct xwds_resource_gpio * gpiorsc = eeprom->wp_gpiorsc;
160 rc = xwds_gpio_set(gpiorsc->soc,
161 gpiorsc->port,
162 gpiorsc->pinmask);
163 } else {
164 rc = -ENOSYS;
165 }
166 return rc;
167}
函数调用图:

变量说明

◆ at24md_drv

const struct xwds_eeprom_driver at24md_drv
extern

在文件 at24md.c46 行定义.

◆ at24sd_drv

const struct xwds_eeprom_driver at24sd_drv
extern

在文件 at24sd.c46 行定义.