diff options
Diffstat (limited to 'data_manager.c')
-rw-r--r-- | data_manager.c | 52 |
1 files changed, 6 insertions, 46 deletions
diff --git a/data_manager.c b/data_manager.c index 62dcd14..76a70c7 100644 --- a/data_manager.c +++ b/data_manager.c @@ -5,9 +5,6 @@ #include "data_manager.h" #include "barometer.h" -static float pressure[PRESSURE_UNIT_MAX]; -static float setting[PRESSURE_UNIT_MAX]; -static float altitude[ALTITUDE_UNIT_MAX]; /* utility functions */ static float pressure_to_metres_asl(float real, float setting) @@ -15,57 +12,20 @@ static float pressure_to_metres_asl(float real, float setting) return 44330.f*(1.f-powf(real/setting, 1/5.255)); } - -/* exported functions */ -#define DATA_MANAGER_GETTER(name, store, bound, enum_type, return_type) \ -float name(enum_type unit) \ -{ \ - if (unit >= 0 && unit < bound) { \ - return store[unit]; \ - } else { \ - abort(); \ - } \ -} - -DATA_MANAGER_GETTER( - data_manager_get_pressure, - pressure, - PRESSURE_UNIT_MAX, - enum pressure_unit, - float) -DATA_MANAGER_GETTER( - data_manager_get_setting, - setting, - PRESSURE_UNIT_MAX, - enum pressure_unit, - float) -DATA_MANAGER_GETTER( - data_manager_get_altitude, - altitude, - ALTITUDE_UNIT_MAX, - enum altitude_unit, - float) - -void data_manager_init(void) +void data_manager_init(struct data_ctx *ctx) { - /* FIXME load initial setting and force a tick synchronously */ - setting[PRESSURE_UNIT_HPA] = 1013.25; - data_manager_tick(); + ctx->setting = 1013.25; + data_manager_tick(ctx); } -void data_manager_tick(void) +void data_manager_tick(struct data_ctx *ctx) { /* FIXME alt rate */ /* FIXME calculate on demand? */ - /* FIXME hardcoding the conversion factors here is gross */ - float p = barometer_read(); - pressure[PRESSURE_UNIT_HPA] = p; - pressure[PRESSURE_UNIT_INHG] = p / 3.38639; + ctx->pressure = barometer_read(); /* FIXME we need atomic access to alt setting once user can set it. Check * if AVR allows multiple/nested ISRs to run concurrently, pretty sure not */ - float a = pressure_to_metres_asl(p, setting[PRESSURE_UNIT_HPA]); - altitude[ALTITUDE_UNIT_METRE] = a; - altitude[ALTITUDE_UNIT_FT] = a * 3.048; + ctx->altitude = pressure_to_metres_asl(ctx->pressure, ctx->setting); } |