summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2009-05-31 09:22:01 -0700
committerKeith Packard <keithp@keithp.com>2009-05-31 09:22:01 -0700
commit35ac66969abe24ca23776618306a59fc17770e06 (patch)
treed74de53e3dcecfa8327c517e23ce078fbe80ee34
parent3a3bfd471a868d546d83cdc431b53c8f5208edb9 (diff)
Start adding bi-directional packet link
-rw-r--r--ao.h64
-rw-r--r--ao_serial.c21
2 files changed, 64 insertions, 21 deletions
diff --git a/ao.h b/ao.h
index 1f32ba50..c4cb5bf7 100644
--- a/ao.h
+++ b/ao.h
@@ -859,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_ */
diff --git a/ao_serial.c b/ao_serial.c
index 20bb4f96..ce116940 100644
--- a/ao_serial.c
+++ b/ao_serial.c
@@ -17,30 +17,9 @@
#include "ao.h"
-#define SERIAL_FIFO 32
-
-struct ao_fifo {
- uint8_t insert;
- uint8_t remove;
- char fifo[SERIAL_FIFO];
-};
-
volatile __xdata struct ao_fifo ao_usart1_rx_fifo;
volatile __xdata struct ao_fifo ao_usart1_tx_fifo;
-#define ao_fifo_insert(f,c) do { \
- (f).fifo[(f).insert] = (c); \
- (f).insert = ((f).insert + 1) & (SERIAL_FIFO-1); \
-} while(0)
-
-#define ao_fifo_remove(f,c) do {\
- c = (f).fifo[(f).remove]; \
- (f).remove = ((f).remove + 1) & (SERIAL_FIFO-1); \
-} while(0)
-
-#define ao_fifo_full(f) ((((f).insert + 1) & (SERIAL_FIFO-1)) == (f).remove)
-#define ao_fifo_empty(f) ((f).insert == (f).remove)
-
void
ao_serial_rx1_isr(void) interrupt 3
{