altos/micropeak: Run MS5607 at max resolution for micropeak
[fw/altos] / src / drivers / ao_ms5607.c
index ce0bcf4bcfb79e6a123e00a62c78d7d315c47f01..bd57400e94690524170ae6ddaa203f3103eff0b2 100644 (file)
@@ -130,7 +130,6 @@ static uint32_t
 ao_ms5607_get_sample(uint8_t cmd) {
        uint8_t reply[3];
        uint8_t read;
-       uint32_t loops;
 
        ao_ms5607_done = 0;
 
@@ -142,15 +141,10 @@ ao_ms5607_get_sample(uint8_t cmd) {
 #if AO_MS5607_PRIVATE_PINS
        ao_spi_put(AO_MS5607_SPI_INDEX);
 #endif
-//     loops = 0;
-       cli();
-       while (!ao_ms5607_done) {
-//             loops++;
+       ao_arch_block_interrupts();
+       while (!ao_ms5607_done)
                ao_sleep((void *) &ao_ms5607_done);
-       }
-       sei();
-//     if (loops > 1)
-//             printf ("ms5607 loops %d\n", loops);
+       ao_arch_release_interrupts();
 #if AO_MS5607_PRIVATE_PINS
        stm_gpio_set(AO_MS5607_CS_PORT, AO_MS5607_CS_PIN, 1);
 #else
@@ -166,11 +160,25 @@ ao_ms5607_get_sample(uint8_t cmd) {
        return ((uint32_t) reply[0] << 16) | ((uint32_t) reply[1] << 8) | (uint32_t) reply[2];
 }
 
+#ifndef AO_MS5607_BARO_OVERSAMPLE
+#define AO_MS5607_BARO_OVERSAMPLE      2048
+#endif
+
+#ifndef AO_MS5607_TEMP_OVERSAMPLE
+#define AO_MS5607_TEMP_OVERSAMPLE      AO_MS5607_BARO_OVERSAMPLE
+#endif
+
+#define token_paster(x,y)      x ## y
+#define token_evaluator(x,y)   token_paster(x,y)
+
+#define AO_CONVERT_D1  token_evaluator(AO_MS5607_CONVERT_D1_, AO_MS5607_BARO_OVERSAMPLE)
+#define AO_CONVERT_D2  token_evaluator(AO_MS5607_CONVERT_D2_, AO_MS5607_TEMP_OVERSAMPLE)
+
 void
 ao_ms5607_sample(struct ao_ms5607_sample *sample)
 {
-       sample->pres = ao_ms5607_get_sample(AO_MS5607_CONVERT_D1_2048);
-       sample->temp = ao_ms5607_get_sample(AO_MS5607_CONVERT_D2_2048);
+       sample->pres = ao_ms5607_get_sample(AO_CONVERT_D1);
+       sample->temp = ao_ms5607_get_sample(AO_CONVERT_D2);
 }
 
 #include "ao_ms5607_convert.c"