X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=blobdiff_plain;f=ao.h;h=c4cb5bf7176d526b2ea4a4bbe887684778070a59;hp=96dd02d00509ae52761ebe13c718cd5530ff298b;hb=35ac66969abe24ca23776618306a59fc17770e06;hpb=d085d43701e3cdd2119e947a9ae45baa78c80318 diff --git a/ao.h b/ao.h index 96dd02d0..c4cb5bf7 100644 --- a/ao.h +++ b/ao.h @@ -23,6 +23,9 @@ #include #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_ */