#endif
#if HAS_ADC
+
+#if HAS_ACCEL
+#ifndef HAS_ACCEL_REF
+#error Please define HAS_ACCEL_REF
+#endif
+#else
+#define HAS_ACCEL_REF 0
+#endif
+
/*
* ao_adc.c
*/
*/
extern volatile __xdata struct ao_adc ao_adc_ring[AO_ADC_RING];
extern volatile __data uint8_t ao_adc_head;
+#if HAS_ACCEL_REF
+extern volatile __xdata uint16_t ao_accel_ref[AO_ADC_RING];
+#endif
/* Trigger a conversion sequence (called from the timer interrupt) */
void
extern __code __at (0x00a2) uint16_t ao_romconfig_check;
extern __code __at (0x00a4) uint16_t ao_serial_number;
extern __code __at (0x00a6) uint32_t ao_radio_cal;
+
+#ifndef HAS_USB
+#error Please define HAS_USB
+#endif
+
+#if HAS_USB
extern __code __at (0x00aa) uint8_t ao_usb_descriptors [];
+#endif
/*
* ao_usb.c
void
ao_usb_flush(void);
+#if HAS_USB
/* USB interrupt handler */
void
ao_usb_isr(void) __interrupt 6;
+#endif
/* Enable the USB controller */
void
ao_match_word(__code char *word);
struct ao_cmds {
- char cmd;
void (*func)(void);
const char *help;
};
* ao_log.c
*/
+/* We record flight numbers in the first record of
+ * the log. Tasks may wait for this to be initialized
+ * by sleeping on this variable.
+ */
+extern __xdata uint16_t ao_flight_number;
+
+extern __pdata uint32_t ao_log_current_pos;
+extern __pdata uint32_t ao_log_end_pos;
+extern __pdata uint32_t ao_log_start_pos;
+extern __xdata uint8_t ao_log_running;
+extern __xdata enum flight_state ao_log_state;
+
+/* required functions from the underlying log system */
+
+/* Return the flight number from the given log slot, 0 if none */
+uint16_t
+ao_log_flight(uint8_t slot);
+
+/* Flush the log */
+void
+ao_log_flush(void);
+
+/* Logging thread main routine */
+void
+ao_log(void);
+
+/* functions provided in ao_log.c */
+
+/* Figure out the current flight number */
+void
+ao_log_scan(void) __reentrant;
+
+/* Return the position of the start of the given log slot */
+uint32_t
+ao_log_pos(uint8_t slot);
+
+/* Start logging to eeprom */
+void
+ao_log_start(void);
+
+/* Stop logging */
+void
+ao_log_stop(void);
+
+/* Initialize the logging system */
+void
+ao_log_init(void);
+
+/* Write out the current flight number to the erase log */
+void
+ao_log_write_erase(uint8_t pos);
+
+/* Returns true if there are any logs stored in eeprom */
+uint8_t
+ao_log_present(void);
+
+/* Returns true if there is no more storage space available */
+uint8_t
+ao_log_full(void);
+
+/*
+ * ao_log_big.c
+ */
+
/*
* The data log is recorded in the eeprom as a sequence
* of data packets.
uint8_t
ao_log_data(__xdata struct ao_log_record *log) __reentrant;
-/* Flush the log */
-void
-ao_log_flush(void);
-
-/* We record flight numbers in the first record of
- * the log. Tasks may wait for this to be initialized
- * by sleeping on this variable.
- */
-extern __xdata uint16_t ao_flight_number;
-
-/* Logging thread main routine */
-void
-ao_log(void);
-
-/* Start logging to eeprom */
-void
-ao_log_start(void);
-
-/* Stop logging */
-void
-ao_log_stop(void);
-
-/* Initialize the logging system */
-void
-ao_log_init(void);
-
-/* Write out the current flight number to the erase log */
-void
-ao_log_write_erase(uint8_t pos);
-
-/* Returns true if there are any logs stored in eeprom */
-uint8_t
-ao_log_present(void);
-
-/* Returns true if there is no more storage space available */
-uint8_t
-ao_log_full(void);
-
/*
* ao_flight.c
*/
ao_flight_invalid = 9
};
-extern __xdata struct ao_adc ao_flight_data;
+extern __data uint8_t ao_flight_adc;
extern __pdata enum ao_flight_state ao_flight_state;
extern __pdata uint16_t ao_flight_tick;
extern __pdata int16_t ao_flight_accel;
extern __pdata int16_t ao_min_pres;
extern __pdata uint16_t ao_launch_time;
extern __xdata uint8_t ao_flight_force_idle;
+#ifdef USE_KALMAN
+extern __pdata int16_t ao_ground_height;
+extern __pdata int32_t ao_k_max_height;
+extern __pdata int32_t ao_k_height;
+extern __pdata int32_t ao_k_speed;
+extern __pdata int32_t ao_k_accel;
+#endif
/* Flight thread */
void
#define ao_radio_put() ao_mutex_put(&ao_radio_mutex)
void
-ao_radio_set_telemetry(void);
+ao_radio_set_fixed_pkt(size_t size);
-void
-ao_radio_set_packet(void);
+#define ao_radio_set_telemetry() \
+ ao_radio_set_fixed_pkt(sizeof (struct ao_telemetry))
-void
-ao_radio_set_rdf(void);
+#define ao_radio_set_packet() \
+ ao_radio_set_fixed_pkt(sizeof (struct ao_packet))
void
ao_radio_send(__xdata void *data, uint8_t size) __reentrant;
* each instance of a product
*/
-extern __code __at(0x00aa) uint8_t ao_usb_descriptors [];
extern const char ao_version[];
extern const char ao_manufacturer[];
extern const char ao_product[];
ao_packet_slave_stop(void);
void
-ao_packet_slave_init(void);
+ao_packet_slave_init(uint8_t enable);
#endif /* _AO_H_ */