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读一页数据
 

详细描述

I2C EEPROM 驱动

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

在文件 driver.h 中定义.

函数说明

◆ 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_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_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_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 XWDS_VALIDATE(eeprom, "nullptr", -EFAULT);
127
128 if (eeprom->pwr_gpiorsc) {
129 const struct xwds_resource_gpio * gpiorsc = eeprom->pwr_gpiorsc;
130 rc = xwds_gpio_set(gpiorsc->soc,
131 gpiorsc->port,
132 gpiorsc->pinmask);
133 } else {
134 rc = -ENOSYS;
135 }
136 return rc;
137}
#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
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_power_off()

xwer_t xwds_eeprom_power_off ( struct xwds_eeprom eeprom)

EEPROM API:关闭EEPROM的电源

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

在文件 driver.c140 行定义.

141{
142 xwer_t rc;
143
144 XWDS_VALIDATE(eeprom, "nullptr", -EFAULT);
145
146 if (eeprom->pwr_gpiorsc) {
147 const struct xwds_resource_gpio * gpiorsc = eeprom->pwr_gpiorsc;
148 rc = xwds_gpio_reset(gpiorsc->soc,
149 gpiorsc->port,
150 gpiorsc->pinmask);
151 } else {
152 rc = -ENOSYS;
153 }
154 return rc;
155}
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_wp_enable()

xwer_t xwds_eeprom_wp_enable ( struct xwds_eeprom eeprom)

EEPROM API:开启EEPROM的写保护

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

在文件 driver.c158 行定义.

159{
160 xwer_t rc;
161
162 XWDS_VALIDATE(eeprom, "nullptr", -EFAULT);
163
164 if (eeprom->wp_gpiorsc) {
165 const struct xwds_resource_gpio * gpiorsc = eeprom->wp_gpiorsc;
166 rc = xwds_gpio_set(gpiorsc->soc,
167 gpiorsc->port,
168 gpiorsc->pinmask);
169 } else {
170 rc = -ENOSYS;
171 }
172 return rc;
173}
函数调用图:

◆ xwds_eeprom_wp_disable()

xwer_t xwds_eeprom_wp_disable ( struct xwds_eeprom eeprom)

EEPROM API:关闭EEPROM的写保护

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

在文件 driver.c176 行定义.

177{
178 xwer_t rc;
179
180 XWDS_VALIDATE(eeprom, "nullptr", -EFAULT);
181
182 if (eeprom->wp_gpiorsc) {
183 const struct xwds_resource_gpio * gpiorsc = eeprom->wp_gpiorsc;
184 rc = xwds_gpio_reset(gpiorsc->soc,
185 gpiorsc->port,
186 gpiorsc->pinmask);
187 } else {
188 rc = -ENOSYS;
189 }
190 return rc;
191}
函数调用图:

◆ 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.c194 行定义.

197{
198 const struct xwds_eeprom_driver * drv;
199 xwer_t rc;
200
201 XWDS_VALIDATE(eeprom, "nullptr", -EFAULT);
202
203 drv = xwds_cast(const struct xwds_eeprom_driver *, eeprom->i2cp.dev.drv);
204 if ((drv) && (drv->putc)) {
205 rc = drv->putc(eeprom, data, addr, to);
206 } else {
207 rc = -ENOSYS;
208 }
209 return rc;
210}
const struct xwds_driver * drv
Definition device.h:133
EEPROM驱动函数表
Definition driver.h:38
xwer_t(* putc)(struct xwds_eeprom *, xwu8_t, xwptr_t, xwtm_t)
Definition driver.h:40
struct xwds_i2cp i2cp
Definition device.h:39
struct xwds_device dev
Definition peripheral.h:49

◆ 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.c213 行定义.

216{
217 const struct xwds_eeprom_driver * drv;
218 xwer_t rc;
219
220 XWDS_VALIDATE(eeprom, "nullptr", -EFAULT);
221 XWDS_VALIDATE(buf, "nullptr", -EFAULT);
222
223 drv = xwds_cast(const struct xwds_eeprom_driver *, eeprom->i2cp.dev.drv);
224 if ((drv) && (drv->getc)) {
225 rc = drv->getc(eeprom, buf, addr, to);
226 } else {
227 rc = -ENOSYS;
228 }
229 return rc;
230}
xwer_t(* getc)(struct xwds_eeprom *, xwu8_t *, xwptr_t, xwtm_t)
Definition driver.h:43

◆ 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.c233 行定义.

236{
237 const struct xwds_eeprom_parameter * param;
238 const struct xwds_eeprom_driver * drv;
239 xwer_t rc;
240
241 XWDS_VALIDATE(eeprom, "nullptr", -EFAULT);
242 XWDS_VALIDATE(data, "nullptr", -EFAULT);
243 XWDS_VALIDATE(size, "nullptr", -EFAULT);
244
245 param = &eeprom->parameter;
246 if (*size > param->page_size) {
247 *size = param->page_size;
248 }
249 if (pgidx < param->total) {
250 drv = xwds_cast(const struct xwds_eeprom_driver *,
251 eeprom->i2cp.dev.drv);
252 if ((drv) && (drv->pgwrite)) {
253 rc = drv->pgwrite(eeprom, data, size, pgidx, to);
254 } else {
255 rc = -ENOSYS;
256 }
257 } else {
258 rc = -ENXIO;
259 }
260 return rc;
261}
#define ENXIO
No such device or address
Definition errno.h:36
xwer_t(* pgwrite)(struct xwds_eeprom *, xwu8_t *, xwsz_t *, xwsq_t, xwtm_t)
Definition driver.h:46
const struct xwds_eeprom_parameter parameter
Definition device.h:40

◆ 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.c264 行定义.

267{
268 const struct xwds_eeprom_parameter * param;
269 const struct xwds_eeprom_driver * drv;
270 xwer_t rc;
271
272 XWDS_VALIDATE(eeprom, "nullptr", -EFAULT);
273 XWDS_VALIDATE(data, "nullptr", -EFAULT);
274 XWDS_VALIDATE(size, "nullptr", -EFAULT);
275
276 param = &eeprom->parameter;
277 if (*size > param->page_size) {
278 *size = param->page_size;
279 }
280 if (pgidx < param->total) {
281 drv = xwds_cast(const struct xwds_eeprom_driver *,
282 eeprom->i2cp.dev.drv);
283 if ((drv) && (drv->pgread)) {
284 rc = drv->pgread(eeprom, buf, size, pgidx, to);
285 } else {
286 rc = -ENOSYS;
287 }
288 } else {
289 rc = -ENXIO;
290 }
291 return rc;
292}
xwer_t(* pgread)(struct xwds_eeprom *, xwu8_t *, xwsz_t *, xwsq_t, xwtm_t)
Definition driver.h:49

变量说明

◆ at24sd_drv

const struct xwds_eeprom_driver at24sd_drv
extern

在文件 at24sd.c46 行定义.

◆ at24md_drv

const struct xwds_eeprom_driver at24md_drv
extern

在文件 at24md.c46 行定义.