altos: Parameterize altitude table access and initialization
authorKeith Packard <keithp@keithp.com>
Fri, 12 Oct 2012 20:59:50 +0000 (13:59 -0700)
committerKeith Packard <keithp@keithp.com>
Fri, 12 Oct 2012 20:59:50 +0000 (13:59 -0700)
This allows projects to store the altitude data in different
representations or with different access modes.

By default, altitude data is stored in meters, but the initializers
include decimeter values so those can be used instead if desired.

Signed-off-by: Keith Packard <keithp@keithp.com>
src/core/ao_convert_pa.c
src/util/make-altitude-pa

index 1413681d9f9b7c591f6cc5069978bca4e033d1ed..2793b77cfad2a948370fc02baf98f8c15c7d45be 100644 (file)
 #include "ao.h"
 #endif
 
 #include "ao.h"
 #endif
 
-static const int32_t altitude_table[] = {
+#ifndef AO_CONST_ATTRIB
+#define AO_CONST_ATTRIB
+#endif
+
+static const alt_t altitude_table[] AO_CONST_ATTRIB = {
 #include "altitude-pa.h"
 };
 
 #include "altitude-pa.h"
 };
 
+#ifndef FETCH_ALT
+#define FETCH_ALT(o)   altitude_table[o]
+#endif
+
 #define ALT_SCALE      (1 << ALT_SHIFT)
 #define ALT_MASK       (ALT_SCALE - 1)
 
 #define ALT_SCALE      (1 << ALT_SHIFT)
 #define ALT_MASK       (ALT_SCALE - 1)
 
index eae5ebe9fcea84d81fb2b60e1bd317ee6dca7b93..22831d5091e8f3656dd1b7691455d8cacaf55b1a 100644 (file)
@@ -239,8 +239,8 @@ real sample_to_fit_altitude(int sample) {
        real i_v;
 
        r_v = sample * l.m + l.b;
        real i_v;
 
        r_v = sample * l.m + l.b;
-       i_v = (round(alt_part[sub]) * (seg_len - off) + round(alt_part[sub+1]) * off) / seg_len;
-       return i_v;
+       i_v = (round(alt_part[sub]*10) * (seg_len - off) + round(alt_part[sub+1]*10) * off) / seg_len;
+       return i_v/10;
 }
 
 real max_error = 0;
 }
 
 real max_error = 0;
@@ -279,11 +279,11 @@ printf ("/*max error %f at %7.3f kPa. Average error %f*/\n",
 
 printf ("#define NALT %d\n", dim(alt_part));
 printf ("#define ALT_SHIFT %d\n", pa_part_shift + pa_sample_shift);
 
 printf ("#define NALT %d\n", dim(alt_part));
 printf ("#define ALT_SHIFT %d\n", pa_part_shift + pa_sample_shift);
-printf ("#ifndef SATURATE\n#define SATURATE(x) (x)\n#endif\n");
+printf ("#ifndef AO_ALT_VALUE\n#define AO_ALT_VALUE(x) (alt_t) (x)\n#endif\n");
 
 for (int part = 0; part < dim(alt_part); part++) {
        real kPa = sample_to_Pa(part_to_sample(part)) / 1000;
 
 for (int part = 0; part < dim(alt_part); part++) {
        real kPa = sample_to_Pa(part_to_sample(part)) / 1000;
-       printf ("SATURATE(%9d), /* %6.2f kPa error %6.2fm */\n",
-               round (alt_part[part]), kPa,
+       printf ("AO_ALT_VALUE(%10.1f), /* %6.2f kPa error %6.2fm */\n",
+               round (alt_part[part]*10) / 10, kPa,
                alt_error[part]);
 }
                alt_error[part]);
 }