implemented i2c_read_write

master
Nidan 15 years ago
parent 017e966dae
commit 3e3144ab84

@ -55,7 +55,7 @@ uint8_t i2c_read(uint8_t addr, uint8_t len, uint8_t *data)
return done;
}
uint8_t i2c_write(uint8_t addr, uint8_t len, uint8_t *data)
uint8_t i2c_write_i(uint8_t addr, uint8_t len, uint8_t *data, uint8_t stop)
{
TWCR &= ~TWSTO;
TWCR |= TWINT | TWSTA;
@ -90,11 +90,17 @@ uint8_t i2c_write(uint8_t addr, uint8_t len, uint8_t *data)
done++;
}
TWCR |= TWINT | TWSTO;
if(stop) {TWCR |= TWINT | TWSTO;}
return done;
}
inline uint8_t i2c_write(uint8_t addr, uint8_t len, uint8_t *data)
{
return i2c_write(addr, len, data, 1);
}
uint8_t i2c_write_read(uint8_t addr, uint8_t writelen, uint8_t *writedata, uint8_t readlen, uint8_t *readdata)
{
return 0; //TODO: implement
if(writelen == i2c_write_i(addr, writelen, writedata, 0)) {return i2c_read(addr, readlen, readdata);}
return 0;
}

@ -5,9 +5,11 @@
void i2c_init();
/* reads len bytes from the i2c device addr into data */
/* returns the number of bytes read */
uint8_t i2c_read(uint8_t addr, uint8_t len, uint8_t *data);
/* writes to an i2c device */
/* returns the number of bytes written. if abitration was lost within a byte or it was followed by a NAK that byte is NOT counted */
uint8_t i2c_write(uint8_t addr, uint8_t len, uint8_t *data);
/* writes, followed by a repeated start and a read */

Loading…
Cancel
Save