Merge branch 'master'
[fw/altos] / src / drivers / ao_ms5607.c
index f73b095622cd5a4eccf9f1d0b7e28a7ade50caf7..1cddcaf570e540656a2e42b2550a299167c82422 100644 (file)
@@ -154,8 +154,7 @@ ao_ms5607_isr(void)
 
 static uint32_t
 ao_ms5607_get_sample(uint8_t cmd) {
-       uint8_t reply[3];
-       uint8_t read;
+       uint8_t reply[4];
 
        ao_ms5607_done = 0;
 
@@ -173,18 +172,22 @@ ao_ms5607_get_sample(uint8_t cmd) {
                ao_sleep((void *) &ao_ms5607_done);
        ao_arch_release_interrupts();
 #if AO_MS5607_PRIVATE_PINS
-       stm_gpio_set(AO_MS5607_CS_PORT, AO_MS5607_CS_PIN, 1);
+       ao_gpio_set(AO_MS5607_CS_PORT, AO_MS5607_CS_PIN, 1);
 #else
        ao_ms5607_stop();
 #endif
 
        ao_ms5607_start();
-       read = AO_MS5607_ADC_READ;
-       ao_spi_send(&read, 1, AO_MS5607_SPI_INDEX);
-       ao_spi_recv(&reply, 3, AO_MS5607_SPI_INDEX);
+       reply[0] = AO_MS5607_ADC_READ;
+#if defined(AO_SPI_DUPLEX) && AO_SPI_DUPLEX == 0
+       ao_spi_send(reply, 1, AO_MS5607_SPI_INDEX);
+       ao_spi_recv(reply+1, 3, AO_MS5607_SPI_INDEX);
+#else
+       ao_spi_duplex(&reply, &reply, 4, AO_MS5607_SPI_INDEX);
+#endif
        ao_ms5607_stop();
 
-       return ((uint32_t) reply[0] << 16) | ((uint32_t) reply[1] << 8) | (uint32_t) reply[2];
+       return ((uint32_t) reply[1] << 16) | ((uint32_t) reply[2] << 8) | (uint32_t) reply[3];
 }
 
 #ifndef AO_MS5607_BARO_OVERSAMPLE