altos: Support normalized axes in mpu6000 and mmc5983
[fw/altos] / src / drivers / ao_mpu6000.c
index c894239ec0e54ae0934781886c44a759e8bcc38b..79658c552bf2e38b7c917d287523f148df86d271 100644 (file)
@@ -32,7 +32,9 @@ static uint8_t        ao_mpu6000_configured;
 
 #if AO_MPU6000_SPI
 
-#define ao_mpu6000_spi_get()   ao_spi_get(AO_MPU6000_SPI_BUS, AO_SPI_SPEED_1MHz)
+#define AO_MPU6000_SPI_SPEED   ao_spi_speed(1000000)   /* 1Mhz for all register access */
+
+#define ao_mpu6000_spi_get()   ao_spi_get(AO_MPU6000_SPI_BUS, AO_MPU6000_SPI_SPEED)
 #define ao_mpu6000_spi_put()   ao_spi_put(AO_MPU6000_SPI_BUS)
 
 #define ao_mpu6000_spi_start()         ao_spi_set_cs(AO_MPU6000_SPI_CS_PORT,   \
@@ -162,6 +164,8 @@ ao_mpu6000_gyro_check(int16_t normal, int16_t test)
        return 0;
 }
 
+static uint8_t mpu_id;
+
 static void
 _ao_mpu6000_wait_alive(void)
 {
@@ -170,11 +174,11 @@ _ao_mpu6000_wait_alive(void)
        /* Wait for the chip to wake up */
        for (i = 0; i < 30; i++) {
                ao_delay(AO_MS_TO_TICKS(100));
-               if (_ao_mpu6000_reg_read(MPU6000_WHO_AM_I) == 0x68)
-                       break;
+               mpu_id = _ao_mpu6000_reg_read(MPU6000_WHO_AM_I);
+               if (mpu_id == 0x68)
+                       return;
        }
-       if (i == 30)
-               ao_panic(AO_PANIC_SELF_TEST_MPU6000);
+       AO_SENSOR_ERROR(AO_DATA_MPU6000);
 }
 
 #define ST_TRIES       10
@@ -353,6 +357,15 @@ static struct ao_task ao_mpu6000_task;
 static void
 ao_mpu6000_show(void)
 {
+#ifdef AO_LOG_NORMALIZED
+       printf ("MPU6000: %7d %7d %7d %7d %7d %7d\n",
+               ao_mpu6000_along(&ao_mpu6000_current),
+               ao_mpu6000_across(&ao_mpu6000_current),
+               ao_mpu6000_through(&ao_mpu6000_current),
+               ao_mpu6000_roll(&ao_mpu6000_current),
+               ao_mpu6000_pitch(&ao_mpu6000_current),
+               ao_mpu6000_yaw(&ao_mpu6000_current));
+#else
        printf ("Accel: %7d %7d %7d Gyro: %7d %7d %7d\n",
                ao_mpu6000_current.accel_x,
                ao_mpu6000_current.accel_y,
@@ -360,6 +373,7 @@ ao_mpu6000_show(void)
                ao_mpu6000_current.gyro_x,
                ao_mpu6000_current.gyro_y,
                ao_mpu6000_current.gyro_z);
+#endif
 }
 
 static const struct ao_cmds ao_mpu6000_cmds[] = {
@@ -383,7 +397,7 @@ ao_mpu6000_init(void)
         */
 
        ao_cur_task = &ao_mpu6000_task;
-       ao_spi_get(AO_MPU6000_SPI_BUS, AO_SPI_SPEED_1MHz);
+       ao_mpu6000_spi_get();
        ao_cur_task = NULL;
 #endif