From ad51e4943c2551ae6b6e7c28f54ad7a67f240e2c Mon Sep 17 00:00:00 2001
From: Jake Read <jake.read@cba.mit.edu>
Date: Thu, 7 Dec 2017 21:57:17 -0500
Subject: [PATCH] ready to packet handle integrate

---
 embedded/README.md                            |   7 ++-
 .../.vs/atsams70-tinyrouter/v14/.atsuo        | Bin 97280 -> 90624 bytes
 .../atsams70-tinyrouter/src/main.c            |  51 ++++++++++--------
 .../atsams70-tinyrouter/src/packet_handling.c |   4 +-
 .../atsams70-tinyrouter/src/tinyport.c        |   6 +--
 js/serialterminal.js                          |   2 +-
 6 files changed, 39 insertions(+), 31 deletions(-)

diff --git a/embedded/README.md b/embedded/README.md
index 6b147e3..ce67d76 100644
--- a/embedded/README.md
+++ b/embedded/README.md
@@ -1,11 +1,10 @@
 # 'API'
 
-Currently: test packet parsing w/ 'real' packet ... try py terminal? loop return
- - need healthy tx transmit side of ringbuffer output...
- - need to increment hop count ... in packet handler?
+[start][destination][destination][hopcount][source][source][#bytestotal][byte_7][byte_6]...[byte_n] 0-255 bytes
 
+Packet Loops ...
 
-[start][destination][destination][hopcount][source][source][#bytestotal][byte_7][byte_6]...[byte_n] 0-255 bytes
+do Packet Handle cleanup / integrate with new node-> incl. ports
 
 # Interrupts
 
diff --git a/embedded/atsams70-tinyrouter/.vs/atsams70-tinyrouter/v14/.atsuo b/embedded/atsams70-tinyrouter/.vs/atsams70-tinyrouter/v14/.atsuo
index edbe47cf14888b7b780a959c3b96a96b3d0fc492..1d7b2859a7922a00d97e2b43467f0c7ca1707b89 100644
GIT binary patch
delta 2851
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

delta 10903
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

diff --git a/embedded/atsams70-tinyrouter/atsams70-tinyrouter/src/main.c b/embedded/atsams70-tinyrouter/atsams70-tinyrouter/src/main.c
index bd0add5..91ee4d1 100644
--- a/embedded/atsams70-tinyrouter/atsams70-tinyrouter/src/main.c
+++ b/embedded/atsams70-tinyrouter/atsams70-tinyrouter/src/main.c
@@ -203,21 +203,7 @@ void setallstatus(void){
 	pin_set(&p4lb);
 }
 
-int main (void){
-	/*
-	node_t* n = (node_t*)malloc(sizeof(node_t));
-	n->myAddress = ADDRESS;
-	n->portBufferSizes = (uint8_t*)malloc(32);
-	for (int port = 0; port < 4; port++) {
-		n->portBufferSizes[port] = 0;
-	}
-	n->LUT = (uint8_t**)malloc(4096);
-	for (int i = 0; i < 4; i++) {
-		for (int port = 0; port < 4; port++) {
-			n->LUT[i][port] = 255;
-		}
-	}
-	*/
+int main (void){	
 	board_init(); // asf
 	sysclk_init();	// asf clock
 
@@ -236,8 +222,6 @@ int main (void){
 	tp_init(&tp3);
 	tp_init(&tp4);
 
-	tinyport_t ports[4] = {tp1, tp2, tp3, tp4};
-
 	setupinterrupts(); // turns interrupt NVICs on
 
 	setallstatus(); // lights off
@@ -248,6 +232,23 @@ int main (void){
 	tp_testlights(&tp3);
 	tp_testlights(&tp2);
 	tp_testlights(&tp4);
+	
+	tinyport_t ports[4] = {tp1, tp2, tp3, tp4};
+	
+	/*
+	node_t* n;// = (node_t*)malloc(sizeof(node_t));
+	n->myAddress = ADDRESS;
+	n->portBufferSizes = (uint8_t*)malloc(32);
+	for (int port = 0; port < 4; port++) {
+		n->portBufferSizes[port] = 0;
+	}
+	n->LUT = (uint8_t**)malloc(4096);
+	for (int i = 0; i < 1024; i++) {
+		for (int port = 0; port < 4; port++) {
+			n->LUT[i][port] = 255; // MD w/ malloc ? we want [1024][4], no?
+		}
+	}
+	*/
 
 	packet_t packetlooper;
 
@@ -266,12 +267,12 @@ int main (void){
 				packet_clean(&ports[i].packet); // reset packet states
 				ports[i].haspacket = TP_NO_PACKET;
 				
-				tp_putdata(&ports[i], packetlooper.raw, packetlooper.size + 1); // non-blocking put
+				//handle_packet(n, &packetlooper, i);
+				tp_putdata(&ports[i], packetlooper.raw, packetlooper.size); // non-blocking put
 				
 				packet_clean(&packetlooper);
-				pin_set(ports[i].stlb); // for debugging: we have seen a packet on this port
+				pin_set(ports[i].stlb); 
 				
-				//handle_packet();
 			}
 		}
 	} // end while
@@ -285,7 +286,6 @@ void UART2_Handler(){
 	if(UART2->UART_SR & UART_SR_RXRDY){
 		tp_rxhandler(&tp1);
 	}
-
 	if(UART2->UART_SR & UART_SR_TXRDY){
 		tp_txhandler(&tp1);
 	}
@@ -295,16 +295,25 @@ void UART0_Handler(){
 	if(UART0->UART_SR & UART_SR_RXRDY){
 		tp_rxhandler(&tp2);
 	}
+	if(UART0->UART_SR & UART_SR_TXRDY){
+		tp_txhandler(&tp2);
+	}
 }
 
 void UART1_Handler(){
 	if(UART1->UART_SR & UART_SR_RXRDY){
 		tp_rxhandler(&tp3);
 	}
+	if(UART1->UART_SR & UART_SR_TXRDY){
+		tp_txhandler(&tp3);
+	}
 }
 
 void UART4_Handler(){
 	if(UART4->UART_SR & UART_SR_RXRDY){
 		tp_rxhandler(&tp4);
 	}
+	if(UART4->UART_SR & UART_SR_TXRDY){
+		tp_txhandler(&tp4);
+	}
 }
diff --git a/embedded/atsams70-tinyrouter/atsams70-tinyrouter/src/packet_handling.c b/embedded/atsams70-tinyrouter/atsams70-tinyrouter/src/packet_handling.c
index 0a22465..45502be 100644
--- a/embedded/atsams70-tinyrouter/atsams70-tinyrouter/src/packet_handling.c
+++ b/embedded/atsams70-tinyrouter/atsams70-tinyrouter/src/packet_handling.c
@@ -15,7 +15,7 @@ void update_LUT(node_t* n, uint16_t src, uint8_t hopCount, uint8_t port) {
 }
 
 void send_packet(packet_t* p, uint8_t port) {
- // TODO:
+	//tp_putdata() // need global ports[];
 }
 
 void broadcast_packet(packet_t* p, uint8_t exclude) {
@@ -32,7 +32,7 @@ int in_table(node_t* n, uint8_t dest) {
 
 void handle_packet(node_t* n, packet_t* p, uint8_t port) {
   if (p->hopcount > MAX_HOPCOUNT) {
-    //free((void*)p);
+    free((void*)p);
     return;
   }
 
diff --git a/embedded/atsams70-tinyrouter/atsams70-tinyrouter/src/tinyport.c b/embedded/atsams70-tinyrouter/atsams70-tinyrouter/src/tinyport.c
index fbf2ae9..5238793 100644
--- a/embedded/atsams70-tinyrouter/atsams70-tinyrouter/src/tinyport.c
+++ b/embedded/atsams70-tinyrouter/atsams70-tinyrouter/src/tinyport.c
@@ -94,7 +94,7 @@ void tp_packetparser(tinyport_t *tp){
 				// writing to packet
 				// check for size byte
 				// check for end of packet w/ counter (counter is _current_ byte, is incremented at end of handle)
-				if(tp->packet.counter >= tp->packet.size){ // check counter against packet size to see if @ end of packet
+				if(tp->packet.counter >= tp->packet.size - 1){ // check counter against packet size to see if @ end of packet
 					tp->haspacket = TP_HAS_PACKET; // this data is final byte, we have packet, this will be last tick in loop
 					tp->packetstate = TP_PACKETSTATE_OUTSIDE; // and we're outside again
 					pin_clear(tp->stlb);
@@ -114,11 +114,11 @@ void tp_packetparser(tinyport_t *tp){
 
 void tp_txhandler(tinyport_t *tp){
 	if(!rb_empty(tp->rbtx)){
-		pin_clear(tp->stlr);
+		pin_clear(tp->stlg);
 		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);
+		pin_set(tp->stlg);
 	}
 	//while(!(tp->uart->UART_SR & UART_SR_TXRDY)); // blocking
 }
diff --git a/js/serialterminal.js b/js/serialterminal.js
index dc3f520..445afd2 100644
--- a/js/serialterminal.js
+++ b/js/serialterminal.js
@@ -17,7 +17,7 @@ const rl = readline.createInterface({
 rl.on('line', parseLineIn);
 
 // [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])
+var buf = Buffer.from([255,2,3,4,5,6,12,8,9,10,11,12])
 
 function parseLineIn(data) {
 	if (debug) {
-- 
GitLab