projects
/
bertos.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
First version of new i2c bitbang API.
[bertos.git]
/
bertos
/
drv
/
i2c.h
diff --git
a/bertos/drv/i2c.h
b/bertos/drv/i2c.h
index 1a0dbffedc64067e0af9600e2ccaad0ed939344b..f527f359d19d375998633260ba90453e65ea600a 100644
(file)
--- a/
bertos/drv/i2c.h
+++ b/
bertos/drv/i2c.h
@@
-184,7
+184,9
@@
INLINE void i2c_start(I2c *i2c, uint16_t slave_addr, size_t size)
{
ASSERT(i2c->vt);
ASSERT(i2c->vt->start);
{
ASSERT(i2c->vt);
ASSERT(i2c->vt->start);
- ASSERT(i2c->xfer_size == 0);
+
+ if (!i2c->errors)
+ ASSERT(i2c->xfer_size == 0);
i2c->errors = 0;
i2c->xfer_size = size;
i2c->errors = 0;
i2c->xfer_size = size;
@@
-212,12
+214,16
@@
INLINE uint8_t i2c_get(I2c *i2c)
ASSERT(i2c->vt);
ASSERT(i2c->vt->get);
ASSERT(i2c->vt);
ASSERT(i2c->vt->get);
- ASSERT(i2c->xfer_size
>= 1
);
+ ASSERT(i2c->xfer_size);
ASSERT(I2C_TEST_START(i2c->flags) == I2C_START_R);
if (!i2c->errors)
ASSERT(I2C_TEST_START(i2c->flags) == I2C_START_R);
if (!i2c->errors)
- return i2c->vt->get(i2c);
+ {
+ uint8_t data = i2c->vt->get(i2c);
+ i2c->xfer_size--;
+ return data;
+ }
else
return 0xFF;
}
else
return 0xFF;
}
@@
-228,12
+234,15
@@
INLINE void i2c_put(I2c *i2c, uint8_t data)
ASSERT(i2c->vt);
ASSERT(i2c->vt->put);
ASSERT(i2c->vt);
ASSERT(i2c->vt->put);
- ASSERT(i2c->xfer_size
>= 1
);
+ ASSERT(i2c->xfer_size);
ASSERT(I2C_TEST_START(i2c->flags) == I2C_START_W);
if (!i2c->errors)
ASSERT(I2C_TEST_START(i2c->flags) == I2C_START_W);
if (!i2c->errors)
+ {
i2c->vt->put(i2c, data);
i2c->vt->put(i2c, data);
+ i2c->xfer_size--;
+ }
}
INLINE void i2c_send(I2c *i2c, const void *_buf, size_t count)
}
INLINE void i2c_send(I2c *i2c, const void *_buf, size_t count)