From a0001db1bf251d02930c61a9688b5a264931f640 Mon Sep 17 00:00:00 2001
From: Jake Read <jake.read@cba.mit.edu>
Date: Thu, 7 Dec 2017 20:58:59 -0500
Subject: [PATCH] non-blocking put

---
 .gitignore                                    |   1 +
 .../Debug/atsams70-tinyrouter.bin             | Bin 8664 -> 0 bytes
 .../atsams70-tinyrouter/src/main.c            |  36 ++++--------------
 .../atsams70-tinyrouter/src/tinyport.c        |  17 +++++----
 js/serialterminal.js                          |   3 +-
 5 files changed, 19 insertions(+), 38 deletions(-)
 delete mode 100644 embedded/atsams70-tinyrouter/atsams70-tinyrouter/Debug/atsams70-tinyrouter.bin

diff --git a/.gitignore b/.gitignore
index fe57583..61f56c7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,6 +1,7 @@
 jake/
 **.elf
 **.hex
+**.bin
 **.lss
 **.map
 **.srec
diff --git a/embedded/atsams70-tinyrouter/atsams70-tinyrouter/Debug/atsams70-tinyrouter.bin b/embedded/atsams70-tinyrouter/atsams70-tinyrouter/Debug/atsams70-tinyrouter.bin
deleted file mode 100644
index 113528691ddfc0ecc936cfd83635e1e05bc3400b..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 8664
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
Vhl2tL|NsC0KLZ03Lj#|K0svT>6pR1>

diff --git a/embedded/atsams70-tinyrouter/atsams70-tinyrouter/src/main.c b/embedded/atsams70-tinyrouter/atsams70-tinyrouter/src/main.c
index 061f3cb..bd0add5 100644
--- a/embedded/atsams70-tinyrouter/atsams70-tinyrouter/src/main.c
+++ b/embedded/atsams70-tinyrouter/atsams70-tinyrouter/src/main.c
@@ -203,8 +203,7 @@ void setallstatus(void){
 	pin_set(&p4lb);
 }
 
-int main (void)
-{
+int main (void){
 	/*
 	node_t* n = (node_t*)malloc(sizeof(node_t));
 	n->myAddress = ADDRESS;
@@ -266,51 +265,30 @@ int main (void)
 				packetlooper = ports[i].packet;
 				packet_clean(&ports[i].packet); // reset packet states
 				ports[i].haspacket = TP_NO_PACKET;
-								
-				for(int c = 0; c <= packetlooper.size; c ++){ // blocking echo
-					tp_putchar(&ports[i], packetlooper.raw[c]);
-				}
+				
+				tp_putdata(&ports[i], packetlooper.raw, packetlooper.size + 1); // non-blocking put
 				
 				packet_clean(&packetlooper);
 				pin_set(ports[i].stlb); // for debugging: we have seen a packet on this port
 				
 				//handle_packet();
-				// put data in  block, error if returns 0 b/c overfull ringbuffer
-				/*
-				if(!tp_putdata(&ports[i], packetlooper.raw, packetlooper.size)){
-					pin_clear(ports[i].stlr);
-				}
-				*/
-				
-		}
-
-		// packet handler
-		// pull a packet from the buffer,
-		// handle_packet()
-			/*
-			if(!rb_empty(ports[i].rbrx)){
-				tp_putchar(&ports[i], rb_get(ports[i].rbrx));
 			}
-			*/
 		}
+	} // end while
+	
+	delay_cycles(1); // one clock tick to relax interrupt scheduler
 
-		// loop over packet buffer and handle packets
+} // end main
 
-		delay_cycles(1); // one clock tick to relax interrupt scheduler
-		//pin_set(&stlb);
-	}
-}
 
 void UART2_Handler(){
 	if(UART2->UART_SR & UART_SR_RXRDY){
 		tp_rxhandler(&tp1);
 	}
 
-	/*
 	if(UART2->UART_SR & UART_SR_TXRDY){
 		tp_txhandler(&tp1);
 	}
-	*/
 }
 
 void UART0_Handler(){
diff --git a/embedded/atsams70-tinyrouter/atsams70-tinyrouter/src/tinyport.c b/embedded/atsams70-tinyrouter/atsams70-tinyrouter/src/tinyport.c
index 8140a7b..fbf2ae9 100644
--- a/embedded/atsams70-tinyrouter/atsams70-tinyrouter/src/tinyport.c
+++ b/embedded/atsams70-tinyrouter/atsams70-tinyrouter/src/tinyport.c
@@ -59,7 +59,7 @@ void tp_putchar(tinyport_t *tp, uint8_t data){
 int tp_putdata(tinyport_t *tp, uint8_t *data, uint8_t size){
 	// drops block of mems into ringbuffer (need to update rb for this)
 	rb_putdata(tp->rbtx, data, size);
-	tp_txout(tp);
+	tp->uart->UART_IER |= UART_IER_TXRDY;
 }
 
 void tp_rxhandler(tinyport_t *tp){
@@ -112,14 +112,15 @@ void tp_packetparser(tinyport_t *tp){
 	} // end while
 } // end packetparser
 
-void tp_txout(tinyport_t *tp){
-	// set txready interrupt on
-	// handler puts chars on ports until no chars left
-}
-
 void tp_txhandler(tinyport_t *tp){
-	while(!(tp->uart->UART_SR & UART_SR_TXRDY)); // blocking
-	tp->uart->UART_THR = rb_get(tp->rbtx);
+	if(!rb_empty(tp->rbtx)){
+		pin_clear(tp->stlr);
+		tp->uart->UART_THR = rb_get(tp->rbtx);
+	} else {
+		tp->uart->UART_IDR = UART_IER_TXRDY; // if nothing left to tx, turn isr off
+		pin_set(tp->stlr);
+	}
+	//while(!(tp->uart->UART_SR & UART_SR_TXRDY)); // blocking
 }
 
 void tp_testlights(tinyport_t *tp){
diff --git a/js/serialterminal.js b/js/serialterminal.js
index 769854b..dc3f520 100644
--- a/js/serialterminal.js
+++ b/js/serialterminal.js
@@ -16,7 +16,8 @@ const rl = readline.createInterface({
 
 rl.on('line', parseLineIn);
 
-var buf = Buffer.from([255,8,8,8,8,8,8,10,11])
+// [type][destination][destination][hopcount][source][source][#bytestotal][byte_7][byte_6]...[byte_n]
+var buf = Buffer.from([255,1,2,3,4,5,9,10,11,12])
 
 function parseLineIn(data) {
 	if (debug) {
-- 
GitLab