X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=blobdiff_plain;f=ao.h;h=4505edfab4dbd9e622ab4a036df1010c24a4c308;hp=2cad7621c5e5db33d072954149ed05b66b441924;hb=98806b1ff3f41484663d61ff430e9e2764c7b5e6;hpb=4a050704ad2c497e9f1b0988334228b0bbc4c170 diff --git a/ao.h b/ao.h index 2cad7621..4505edfa 100644 --- a/ao.h +++ b/ao.h @@ -29,7 +29,7 @@ /* Stack runs from above the allocated __data space to 0xfe, which avoids * writing to 0xff as that triggers the stack overflow indicator */ -#define AO_STACK_START 0x7e +#define AO_STACK_START 0x80 #define AO_STACK_END 0xfe #define AO_STACK_SIZE (AO_STACK_END - AO_STACK_START + 1) @@ -241,13 +241,17 @@ ao_led_off(uint8_t colors); void ao_led_set(uint8_t colors); +/* Toggle the specified LEDs */ +void +ao_led_toggle(uint8_t colors); + /* Turn on the specified LEDs for the indicated interval */ void ao_led_for(uint8_t colors, uint16_t ticks) __reentrant; /* Initialize the LEDs */ void -ao_led_init(void); +ao_led_init(uint8_t enable); /* * ao_usb.c @@ -255,10 +259,10 @@ ao_led_init(void); /* Put one character to the USB output queue */ void -ao_usb_putchar(uint8_t c); +ao_usb_putchar(char c); /* Get one character from the USB input queue */ -uint8_t +char ao_usb_getchar(void); /* Flush the USB output queue */ @@ -269,6 +273,14 @@ ao_usb_flush(void); void ao_usb_isr(void) interrupt 6; +/* Enable the USB controller */ +void +ao_usb_enable(void); + +/* Disable the USB controller */ +void +ao_usb_disable(void); + /* Initialize the USB system */ void ao_usb_init(void); @@ -284,7 +296,7 @@ enum ao_cmd_status { }; extern __xdata uint16_t ao_cmd_lex_i; -extern __xdata uint8_t ao_cmd_lex_c; +extern __xdata char ao_cmd_lex_c; extern __xdata enum ao_cmd_status ao_cmd_status; void @@ -302,8 +314,11 @@ ao_cmd_white(void); void ao_cmd_hex(void); +void +ao_cmd_decimal(void); + struct ao_cmds { - uint8_t cmd; + char cmd; void (*func)(void); const char *help; }; @@ -447,12 +462,12 @@ struct ao_gps_pos { #define AO_LOG_POS_NONE (~0UL) struct ao_log_record { - uint8_t type; + char type; uint8_t csum; uint16_t tick; union { struct { - uint16_t serial; + int16_t ground_accel; uint16_t flight; } flight; struct { @@ -581,10 +596,10 @@ int16_t ao_pres_to_altitude(int16_t pres) __reentrant; int16_t -ao_temp_to_dC(int16_t temp) __reentrant; +ao_altitude_to_pres(int16_t alt) __reentrant; int16_t -ao_accel_to_cm_per_s2(int16_t accel) __reentrant; +ao_temp_to_dC(int16_t temp) __reentrant; /* * ao_dbg.c @@ -639,11 +654,11 @@ void ao_serial_tx1_isr(void) interrupt 14; #endif -uint8_t +char ao_serial_getchar(void) __critical; void -ao_serial_putchar(uint8_t c) __critical; +ao_serial_putchar(char c) __critical; void ao_serial_init(void); @@ -686,17 +701,41 @@ ao_gps_print(__xdata struct ao_gps_data *gps_data); void ao_gps_init(void); +/* + * ao_gps_report.c + */ + +void +ao_gps_report(void); + +void +ao_gps_report_init(void); + /* * ao_telemetry.c */ +#define AO_MAX_CALLSIGN 8 + struct ao_telemetry { uint8_t addr; uint8_t flight_state; struct ao_adc adc; struct ao_gps_data gps; + char callsign[AO_MAX_CALLSIGN]; }; +/* Set delay between telemetry reports (0 to disable) */ + +#define AO_TELEMETRY_INTERVAL_FLIGHT AO_MS_TO_TICKS(50) +#define AO_TELEMETRY_INTERVAL_RECOVER AO_MS_TO_TICKS(1000) + +void +ao_telemetry_set_interval(uint16_t interval); + +void +ao_rdf_set(uint8_t rdf); + void ao_telemetry_init(void); @@ -709,13 +748,19 @@ ao_radio_send(__xdata struct ao_telemetry *telemetry) __reentrant; struct ao_radio_recv { struct ao_telemetry telemetry; - uint8_t rssi; + int8_t rssi; uint8_t status; }; void ao_radio_recv(__xdata struct ao_radio_recv *recv) __reentrant; +void +ao_radio_rdf(void); + +void +ao_radio_rdf_abort(void); + void ao_radio_init(void); @@ -729,7 +774,7 @@ void ao_monitor(void); void -ao_monitor_init(void); +ao_monitor_init(uint8_t led); /* * ao_stdio.c @@ -763,5 +808,41 @@ ao_igniter_status(enum ao_igniter igniter); void ao_igniter_init(void); -#endif /* _AO_H_ */ +/* + * ao_config.c + */ + +#define AO_CONFIG_MAJOR 1 +#define AO_CONFIG_MINOR 0 + +struct ao_config { + uint8_t major; + uint8_t minor; + uint16_t main_deploy; + int16_t accel_zero_g; + uint8_t radio_channel; + char callsign[AO_MAX_CALLSIGN + 1]; +}; +extern __xdata struct ao_config ao_config; + +void +ao_config_get(void); + +void +ao_config_init(void); + +/* + * ao_product.c + * + * values which need to be defined for + * each instance of a product + */ + +extern const uint8_t ao_usb_descriptors []; +extern const uint16_t ao_serial_number; +extern const char ao_version[]; +extern const char ao_manufacturer[]; +extern const char ao_product[]; + +#endif /* _AO_H_ */