altosui: Add config and pyro tabs to graph widget
[fw/altos] / src / drivers / ao_mpu9250.c
index 9dce9f1a5a0d4f79f241c50e2a238a09d2b2e906..63d8d6d7fe31ffbc32dc8c786dc349df9bfee413 100644 (file)
@@ -26,8 +26,6 @@
 
 static uint8_t ao_mpu9250_configured;
 
-extern uint8_t ao_sensor_errors;
-
 #ifndef AO_MPU9250_I2C_INDEX
 #define AO_MPU9250_SPI 1
 #else
@@ -36,7 +34,11 @@ extern uint8_t ao_sensor_errors;
 
 #if AO_MPU9250_SPI
 
-#define ao_mpu9250_spi_get()   ao_spi_get(AO_MPU9250_SPI_BUS, AO_SPI_SPEED_1MHz)
+#ifndef AO_MPU9250_SPI_SPEED
+#define AO_MPU9250_SPI_SPEED   ao_spi_speed(AO_MPU9250_SPI_BUS, 1000000)       /* 1MHz max SCLK */
+#endif
+
+#define ao_mpu9250_spi_get()   ao_spi_get(AO_MPU9250_SPI_BUS, AO_MPU9250_SPI_SPEED)
 #define ao_mpu9250_spi_put()   ao_spi_put(AO_MPU9250_SPI_BUS)
 
 #define ao_mpu9250_spi_start()         ao_spi_set_cs(AO_MPU9250_SPI_CS_PORT,   \
@@ -63,7 +65,7 @@ _ao_mpu9250_reg_write(uint8_t addr, uint8_t value)
 #else
        ao_i2c_get(AO_MPU9250_I2C_INDEX);
        ao_i2c_start(AO_MPU9250_I2C_INDEX, MPU9250_ADDR_WRITE);
-       ao_i2c_send(d, 2, AO_MPU9250_I2C_INDEX, TRUE);
+       ao_i2c_send(d, 2, AO_MPU9250_I2C_INDEX, true);
        ao_i2c_put(AO_MPU9250_I2C_INDEX);
 #endif
 }
@@ -80,9 +82,9 @@ _ao_mpu9250_read(uint8_t addr, void *data, uint8_t len)
 #else
        ao_i2c_get(AO_MPU9250_I2C_INDEX);
        ao_i2c_start(AO_MPU9250_I2C_INDEX, MPU9250_ADDR_WRITE);
-       ao_i2c_send(&addr, 1, AO_MPU9250_I2C_INDEX, FALSE);
+       ao_i2c_send(&addr, 1, AO_MPU9250_I2C_INDEX, false);
        ao_i2c_start(AO_MPU9250_I2C_INDEX, MPU9250_ADDR_READ);
-       ao_i2c_recv(data, len, AO_MPU9250_I2C_INDEX, TRUE);
+       ao_i2c_recv(data, len, AO_MPU9250_I2C_INDEX, true);
        ao_i2c_put(AO_MPU9250_I2C_INDEX);
 #endif
 }
@@ -100,9 +102,9 @@ _ao_mpu9250_reg_read(uint8_t addr)
 #else
        ao_i2c_get(AO_MPU9250_I2C_INDEX);
        ao_i2c_start(AO_MPU9250_I2C_INDEX, MPU9250_ADDR_WRITE);
-       ao_i2c_send(&addr, 1, AO_MPU9250_I2C_INDEX, FALSE);
+       ao_i2c_send(&addr, 1, AO_MPU9250_I2C_INDEX, false);
        ao_i2c_start(AO_MPU9250_I2C_INDEX, MPU9250_ADDR_READ);
-       ao_i2c_recv(&value, 1, AO_MPU9250_I2C_INDEX, TRUE);
+       ao_i2c_recv(&value, 1, AO_MPU9250_I2C_INDEX, true);
        ao_i2c_put(AO_MPU9250_I2C_INDEX);
 #endif
        return value;
@@ -174,7 +176,7 @@ _ao_mpu9250_sample(struct ao_mpu9250_sample *sample)
        /* byte swap */
        while (i--) {
                uint16_t        t = *d;
-               *d++ = (t >> 8) | (t << 8);
+               *d++ = (uint16_t) ((uint16_t) (t >> 8) | (uint16_t) (t << 8));
        }
 #endif
 }
@@ -361,7 +363,7 @@ _ao_mpu9250_setup(void)
        }
 
        if (st_tries == ST_TRIES)
-               ao_sensor_errors = 1;
+               AO_SENSOR_ERROR(AO_DATA_MPU9250);
 
        /* Set up the mag sensor */
 
@@ -372,7 +374,7 @@ _ao_mpu9250_setup(void)
        }
 
        if (mag_tries == MAG_TRIES)
-               ao_sensor_errors = 1;
+               AO_SENSOR_ERROR(AO_DATA_MPU9250);
 
        /* Select continuous mode 2 (100Hz), 16 bit samples */
 
@@ -561,7 +563,7 @@ ao_mpu9250_init(void)
         */
 
        ao_cur_task = &ao_mpu9250_task;
-       ao_spi_get(AO_MPU9250_SPI_BUS, AO_SPI_SPEED_1MHz);
+       ao_mpu9250_spi_get();
        ao_cur_task = NULL;
 #endif
        ao_cmd_register(&ao_mpu9250_cmds[0]);