I think I got flow control working
[slipway.git] / src / edu / berkeley / slipway / slipway_drone.c
index 884d540..4e09ca2 100644 (file)
@@ -42,13 +42,11 @@ inline void portd(int bit, int on) {
 long int numread = 0;\r
 inline void cts(int c) {\r
   numread++;\r
-  if (c /*&& numread < 10000*/) {\r
-    PORTE |= (1 << 4);\r
-    PORTE |= (1 << 2);\r
+  if (c) {\r
+    PORTE &= ~(1 << 7);\r
     portd(0, 0);\r
   } else {\r
-    PORTE &= ~(1 << 4);\r
-    PORTE &= ~(1 << 2);\r
+    PORTE |= (1 << 7);\r
     portd(0, 1);\r
   }\r
 }\r
@@ -92,6 +90,8 @@ inline char recv() {
   ret = read_buf[read_buf_head];\r
   read_buf_head = inc(read_buf_head);\r
   if (!read_nearlyFull()) cts(1);\r
+  if (PORTE & (1<<3)) PORTE &= ~(1<<3);\r
+  else                PORTE |=  (1<<3);\r
   return ret;\r
 }\r
 \r
@@ -113,8 +113,6 @@ void send(char c) {
   if (PORTE & (1<<2)) PORTE &= ~(1<<2);\r
   else                PORTE |=  (1<<2);\r
   UCSR0B |= (1 << UDRIE0);\r
-  if (PORTE & (1<<3)) PORTE &= ~(1<<3);\r
-  else                PORTE |=  (1<<3);\r
 }\r
 \r
 \r
@@ -195,7 +193,7 @@ ISR(SIG_INTERRUPT0) {   // use interrupt1 since interrupt0 is sent by the watchd
   //PORTE |=  (1<<0);\r
   sei();\r
 }\r
-void die() { cli(); cts(0); _delay_ms(2000); while(1) { portd(2,0); portd(2,1); } }\r
+void die() { cli(); PORTE|=(1<<5); _delay_ms(2000); while(1) { portd(2,0); portd(2,1); } }\r
 \r
 ISR(SIG_UART0_RECV) {\r
 \r
@@ -218,7 +216,7 @@ inline int hex(char c) {
 }\r
 \r
 int main() {\r
-  DDRE = (1<<7) | (1<<5) | (1<<4) | (1<<3) | (1<<2);\r
+  DDRE = (1<<7) | (1<<5) | (1<<3) | (1<<2);\r
   PORTE = 0;\r
 \r
   init();\r
@@ -253,7 +251,6 @@ int main() {
   */\r
 \r
   PORTE |=  (1<<3);\r
-  PORTE |=  (1<<5);\r
   recv();\r
   send('O');\r
   send('B');\r