#include <string.h>
#include "cc1111.h"
+#define TRUE 1
+#define FALSE 0
+
/* Convert a __data pointer into an __xdata pointer */
#define DATA_TO_XDATA(a) ((void __xdata *) ((uint8_t) (a) | 0xff00))
extern __xdata struct ao_task *__data ao_cur_task;
-#define AO_NUM_TASKS 10 /* maximum number of tasks */
+#define AO_NUM_TASKS 16 /* maximum number of tasks */
#define AO_NO_TASK 0 /* no task id */
/*
extern __pdata uint16_t ao_flight_tick;
extern __pdata int16_t ao_flight_accel;
extern __pdata int16_t ao_flight_pres;
+extern __pdata int32_t ao_flight_vel;
extern __pdata int16_t ao_ground_pres;
extern __pdata int16_t ao_ground_accel;
extern __pdata int16_t ao_min_pres;
struct ao_telemetry {
uint8_t addr;
uint8_t flight_state;
+ int16_t flight_accel;
+ int16_t ground_accel;
+ int32_t flight_vel;
+ int16_t flight_pres;
+ int16_t ground_pres;
struct ao_adc adc;
struct ao_gps_data gps;
char callsign[AO_MAX_CALLSIGN];
void
ao_telemetry_set_interval(uint16_t interval);
-void
-ao_rdf_set(uint8_t rdf);
-
void
ao_telemetry_init(void);
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);
ao_monitor(void);
void
-ao_monitor_init(uint8_t led);
+ao_set_monitor(uint8_t monitoring);
+
+void
+ao_monitor_init(uint8_t led, uint8_t monitoring) __reentrant;
/*
* ao_stdio.c
void
ao_config_init(void);
+/*
+ * ao_rssi.c
+ */
+
+void
+ao_rssi_set(int rssi_value);
+
+void
+ao_rssi_init(uint8_t rssi_led);
+
/*
* ao_product.c
*
extern const char ao_manufacturer[];
extern const char ao_product[];
+/*
+ * Fifos
+ */
+
+#define AO_FIFO_SIZE 32
+
+struct ao_fifo {
+ uint8_t insert;
+ uint8_t remove;
+ char fifo[AO_FIFO_SIZE];
+};
+
+#define ao_fifo_insert(f,c) do { \
+ (f).fifo[(f).insert] = (c); \
+ (f).insert = ((f).insert + 1) & (AO_FIFO_SIZE-1); \
+} while(0)
+
+#define ao_fifo_remove(f,c) do {\
+ c = (f).fifo[(f).remove]; \
+ (f).remove = ((f).remove + 1) & (AO_FIFO_SIZE-1); \
+} while(0)
+
+#define ao_fifo_full(f) ((((f).insert + 1) & (AO_FIFO_SIZE-1)) == (f).remove)
+#define ao_fifo_empty(f) ((f).insert == (f).remove)
+
+/*
+ * ao_packet.c
+ *
+ * Packet-based command interface
+ */
+
+#define AO_PACKET_MAX 32
+#define AO_PACKET_WIN 256
+
+#define AO_PACKET_FIN (1 << 0)
+#define AO_PACKET_SYN (1 << 1)
+#define AO_PACKET_RST (1 << 2)
+#define AO_PACKET_ACK (1 << 3)
+
+struct ao_packet {
+ uint8_t addr;
+ uint8_t flags;
+ uint16_t seq;
+ uint16_t ack;
+ uint16_t window;
+ uint8_t len;
+ uint8_t d[AO_PACKET_MAX];
+};
+
+uint8_t
+ao_packet_connect(uint8_t dest);
+
+uint8_t
+ao_packet_accept(void);
+
+int
+ao_packet_send(uint8_t *data, int len);
+
+int
+ao_packet_recv(uint8_t *data, int len);
+
+void
+ao_packet_init(void);
+
#endif /* _AO_H_ */