X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=blobdiff_plain;f=ao_flight_test.c;h=0b18969e7409238d197b636ce2319a20ed35aea1;hp=a88d2b14ddb9d83e8c8c7eefdbcc2523f7b4519d;hb=c65f1a1acd2ca00758833cec5d3f8056d303d3e2;hpb=b32f2f0090ff967edac07ae4d7a9895ed0b96d31 diff --git a/ao_flight_test.c b/ao_flight_test.c index a88d2b14..0b18969e 100644 --- a/ao_flight_test.c +++ b/ao_flight_test.c @@ -39,6 +39,8 @@ struct ao_adc { #define __pdata #define __data #define __xdata +#define __code +#define __reentrant enum ao_flight_state { ao_flight_startup = 0, @@ -60,6 +62,10 @@ uint8_t ao_adc_head; #define ao_led_off(l) #define ao_timer_set_adc_interval(i) #define ao_wakeup(wchan) ao_dump_state() +#define ao_cmd_register(c) +#define ao_usb_disable() +#define ao_telemetry_set_interval(x) +#define ao_rdf_set(rdf) enum ao_igniter { ao_igniter_drogue = 0, @@ -95,7 +101,32 @@ ao_dump_state(void); void ao_sleep(void *wchan); - + +const char const * const ao_state_names[] = { + "startup", "idle", "pad", "boost", "coast", + "apogee", "drogue", "main", "landed", "invalid" +}; + +struct ao_cmds { + uint8_t cmd; + void (*func)(void); + const char *help; +}; + + +static int16_t altitude_table[2048] = { +#include "altitude.h" +}; + +int16_t +ao_pres_to_altitude(int16_t pres) __reentrant +{ + pres = pres >> 4; + if (pres < 0) pres = 0; + if (pres > 2047) pres = 2047; + return altitude_table[pres]; +} + #include "ao_flight.c" void @@ -104,8 +135,8 @@ ao_insert(void) ao_adc_ring[ao_adc_head] = ao_adc_static; ao_adc_head = ao_adc_ring_next(ao_adc_head); if (ao_flight_state != ao_flight_startup) { - printf("tick %04x accel %04x pres %04x\n", - ao_adc_static.tick, + printf("time %g accel %d pres %d\n", + (double) ao_adc_static.tick / 100, ao_adc_static.accel, ao_adc_static.pres); } @@ -132,7 +163,8 @@ ao_sleep(void *wchan) ret = fscanf(emulator_in, "%c %hx %hx %hx\n", &type, &tick, &a, &b); if (ret == EOF) { - ao_insert(); + printf ("no more data, exiting simulation\n"); + exit(0); return; } if (ret != 4) @@ -162,20 +194,9 @@ ao_sleep(void *wchan) break; } } - + } } - -const char const * const ao_state_names[] = { - "startup", "idle", "pad", "boost", "coast", - "apogee", "drogue", "main", "landed", "invalid" -}; - -static int16_t altitude[2048] = { -#include "altitude.h" -}; - -#define GRAVITY 9.80665 #define COUNTS_PER_G 264.8 void @@ -183,11 +204,11 @@ ao_dump_state(void) { if (ao_flight_state == ao_flight_startup) return; - printf ("\t%s accel %g vel %g alt %d\n", + printf ("\t\t\t\t\t%s accel %g vel %g alt %d\n", ao_state_names[ao_flight_state], (ao_flight_accel - ao_ground_accel) / COUNTS_PER_G * GRAVITY, - (double) ao_flight_vel, - altitude[ao_flight_pres >> 4]); + (double) ao_flight_vel / 100 / COUNTS_PER_G * GRAVITY, + altitude_table[ao_flight_pres >> 4]); if (ao_flight_state == ao_flight_landed) exit(0); }