Start adding bi-directional packet link
[fw/altos] / ao.h
diff --git a/ao.h b/ao.h
index 96dd02d00509ae52761ebe13c718cd5530ff298b..c4cb5bf7176d526b2ea4a4bbe887684778070a59 100644 (file)
--- a/ao.h
+++ b/ao.h
@@ -23,6 +23,9 @@
 #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))
 
@@ -565,6 +568,7 @@ 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_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;
@@ -720,6 +724,11 @@ ao_gps_report_init(void);
 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];
@@ -734,9 +743,6 @@ struct ao_telemetry {
 void
 ao_telemetry_set_interval(uint16_t interval);
 
-void
-ao_rdf_set(uint8_t rdf);
-
 void
 ao_telemetry_init(void);
 
@@ -756,12 +762,6 @@ struct ao_radio_recv {
 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);
 
@@ -775,7 +775,10 @@ 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
@@ -856,4 +859,68 @@ extern const char ao_version[];
 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_ */