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; 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 &= ~TWSTO;
TWCR |= TWINT | TWSTA; TWCR |= TWINT | TWSTA;
@ -90,11 +90,17 @@ uint8_t i2c_write(uint8_t addr, uint8_t len, uint8_t *data)
done++; done++;
} }
TWCR |= TWINT | TWSTO; if(stop) {TWCR |= TWINT | TWSTO;}
return done; 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) 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(); void i2c_init();
/* reads len bytes from the i2c device addr into data */ /* 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); uint8_t i2c_read(uint8_t addr, uint8_t len, uint8_t *data);
/* writes to an i2c device */ /* 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); uint8_t i2c_write(uint8_t addr, uint8_t len, uint8_t *data);
/* writes, followed by a repeated start and a read */ /* writes, followed by a repeated start and a read */

Loading…
Cancel
Save