From 88b71e25e2463aa6425a01b60b171f36f1029ea6 Mon Sep 17 00:00:00 2001 From: Lars-Dominik Braun Date: Wed, 5 Mar 2014 13:29:45 +0100 Subject: i2c: Add multi write --- gyroscope.c | 27 ++++++++++----------------- 1 file changed, 10 insertions(+), 17 deletions(-) (limited to 'gyroscope.c') diff --git a/gyroscope.c b/gyroscope.c index 0f932c2..23fa197 100644 --- a/gyroscope.c +++ b/gyroscope.c @@ -41,23 +41,16 @@ void gyroscopeInit () { /* XXX: make nonblocking */ void gyroscopeStart () { - /* XXX: implement multi-write */ - /* disable power-down-mode */ - if (!twWrite (L3GD20, L3GD20_CTRLREG1, 0b00001111)) { - printf ("cannot start write\n"); - } - sleepwhile (twr.status == TWST_WAIT); - printf ("final twi status was %i\n", twr.status); - - /* enable drdy interrupt */ - if (!twWrite (L3GD20, L3GD20_CTRLREG3, 0b00001000)) { - printf ("cannot start write\n"); - } - sleepwhile (twr.status == TWST_WAIT); - printf ("final twi status was %i\n", twr.status); + /* configuration: + * disable power-down-mode + * defaults + * enable drdy interrupt + * select 500dps + */ + uint8_t data[] = {0b00001111, 0b0, 0b00001000, 0b00010000}; - /* select 500dps */ - if (!twWrite (L3GD20, L3GD20_CTRLREG4, 0b00010000)) { + if (!twRequest (TWM_WRITE, L3GD20, L3GD20_CTRLREG1, data, + sizeof (data)/sizeof (*data))) { printf ("cannot start write\n"); } sleepwhile (twr.status == TWST_WAIT); @@ -68,7 +61,7 @@ bool gyroscopeRead () { if (drdy) { drdy = false; - if (!twReadMulti (L3GD20, 0x28, (uint8_t *) val, 6)) { + if (!twRequest (TWM_READ, L3GD20, 0x28, (uint8_t *) val, 6)) { printf ("cannot start read\n"); } -- cgit v1.2.3