altos: Support normalized axes in mpu6000 and mmc5983
[fw/altos] / src / drivers / ao_mpu9250.c
index ae8dacd0a2eee8544e6de5e8061c316ffaacf17b..09b65bfa749c8cd7de7b1e5f6ff712d5cc602c74 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(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;
@@ -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 */
 
@@ -472,10 +474,9 @@ ao_mpu9250_read(void)
        uint8_t addr;
        uint8_t val;
 
-       ao_cmd_hex();
+       addr = ao_cmd_hex();
        if (ao_cmd_status != ao_cmd_success)
                return;
-       addr = ao_cmd_lex_i;
        ao_mpu9250_spi_get();
        val = _ao_mpu9250_reg_read(addr);
        ao_mpu9250_spi_put();
@@ -488,14 +489,12 @@ ao_mpu9250_write(void)
        uint8_t addr;
        uint8_t val;
 
-       ao_cmd_hex();
+       addr = ao_cmd_hex();
        if (ao_cmd_status != ao_cmd_success)
                return;
-       addr = ao_cmd_lex_i;
-       ao_cmd_hex();
+       val = ao_cmd_hex();
        if (ao_cmd_status != ao_cmd_success)
                return;
-       val = ao_cmd_lex_i;
        printf("Addr %02x val %02x\n", addr, val);
        ao_mpu9250_spi_get();
        _ao_mpu9250_reg_write(addr, val);
@@ -508,10 +507,9 @@ ao_mpu9250_mag_read(void)
        uint8_t addr;
        uint8_t val;
 
-       ao_cmd_hex();
+       addr = ao_cmd_hex();
        if (ao_cmd_status != ao_cmd_success)
                return;
-       addr = ao_cmd_lex_i;
        ao_mpu9250_spi_get();
        val = _ao_mpu9250_mag_reg_read(addr);
        ao_mpu9250_spi_put();
@@ -524,14 +522,12 @@ ao_mpu9250_mag_write(void)
        uint8_t addr;
        uint8_t val;
 
-       ao_cmd_hex();
+       addr = ao_cmd_hex();
        if (ao_cmd_status != ao_cmd_success)
                return;
-       addr = ao_cmd_lex_i;
-       ao_cmd_hex();
+       val = ao_cmd_hex();
        if (ao_cmd_status != ao_cmd_success)
                return;
-       val = ao_cmd_lex_i;
        printf("Addr %02x val %02x\n", addr, val);
        ao_mpu9250_spi_get();
        _ao_mpu9250_mag_reg_write(addr, val);
@@ -567,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]);