altos: Provide MS5611 configuration option, HAS_MS5611
authorKeith Packard <keithp@keithp.com>
Sat, 29 Sep 2012 05:39:55 +0000 (22:39 -0700)
committerKeith Packard <keithp@keithp.com>
Wed, 3 Oct 2012 14:45:30 +0000 (07:45 -0700)
MS5611 and MS5607 use slightly different conversion functions. Alas,
there doesn't appear to be a way to tell them apart in software. This
patch adds the necessary conversion changes and makes them depend on a
compile-time configuration option.

Signed-off-by: Keith Packard <keithp@keithp.com>
src/drivers/ao_ms5607.c

index 704b4583ec9e973848b82e22e1a9ef52aed82241..b0d5ddd4e86b2136eae498288ad865728547b801 100644 (file)
@@ -179,9 +179,13 @@ ao_ms5607_convert(struct ao_ms5607_sample *sample, struct ao_ms5607_value *value
        
        TEMP = 2000 + (((int64_t) dT * ms5607_prom.tempsens) >> 23);
 
+#if HAS_MS5611
+       OFF = ((int64_t) ms5607_prom.off << 16) + (((int64_t) ms5607_prom.tco * dT) >> 7);
+       SENS = ((int64_t) ms5607_prom.sens << 15) + (((int64_t) ms5607_prom.tcs * dT) >> 8);
+#else
        OFF = ((int64_t) ms5607_prom.off << 17) + (((int64_t) ms5607_prom.tco * dT) >> 6);
-
        SENS = ((int64_t) ms5607_prom.sens << 16) + (((int64_t) ms5607_prom.tcs * dT) >> 7);
+#endif
 
        if (TEMP < 2000) {
                int32_t T2 = ((int64_t) dT * (int64_t) dT) >> 31;