From 62a8ce293eb8156ed04015c243044c00a5a3c4e5 Mon Sep 17 00:00:00 2001
From: Jake <jake.read@cba.mit.edu>
Date: Fri, 18 May 2018 21:45:43 -0400
Subject: [PATCH] router feels solid

---
 .../mkrouter-v06/.vs/mkrouter-v06/v14/.atsuo  | Bin 22016 -> 22016 bytes
 .../mkrouter-v06/mkrouter-v06/Debug/Makefile  |   7 ---
 .../mkrouter-v06/Debug/makedep.mk             |   2 -
 .../mkrouter-v06/mkrouter-v06/apahandler.c    |   3 ++
 .../mkrouter-v06/mkrouter-v06/apahandler.h    |  24 ---------
 embedded/mkrouter-v06/mkrouter-v06/apaport.c  |   4 +-
 embedded/mkrouter-v06/mkrouter-v06/apaport.h  |   1 -
 embedded/mkrouter-v06/mkrouter-v06/hardware.h |   2 +
 .../mkrouter-v06/mkrouter-v06.cproj           |   6 ---
 .../mkrouter-v06/sam_ba_monitor.c             |  46 +++++++++++++++---
 10 files changed, 47 insertions(+), 48 deletions(-)
 delete mode 100644 embedded/mkrouter-v06/mkrouter-v06/apahandler.h

diff --git a/embedded/mkrouter-v06/.vs/mkrouter-v06/v14/.atsuo b/embedded/mkrouter-v06/.vs/mkrouter-v06/v14/.atsuo
index 9b391be6e8abd8e75ad0de9023f8a214455cb1e2..2493d226405116c878087141465236d67614cd02 100644
GIT binary patch
delta 1127
zcmZoz!`QHfae@si4+8@O(?&;aCcX=n+&}-nyUZxdz`)R;G`WhYim`L@SEh5kjH(O_
z3~USx4FCWC|3CR6zY4De0|P@dBLf(4O=e_~p2Wox2$JPvU|<kuU|{(7|Nnn>1_lOU
z1_lNZs7{bP2#Yc>FmN+4FbF}_fyAU37#L(27#KhXOG4H2ZZ2f`&B(W*a@lw6&Qd{h
z*5ohjA}%0z{{8>|KP%L9kZV9TfLsJ}9f%FX{0s~X0t^fc97wJaWME*J?8BnM$h*0a
zBb#~h9dQxUS_TG&ItB)YdZ?L=3=9lSpdf(qTNxM_+87uZ+8G!aI-p|zHU_R|oS2|9
ziN}LO3F;$I*ljN1>0wkQ%>)@%SB44()5(fv$~?*p3=E+70QmuA9%~H)1H+xkm3-=q
zW|I|p)j8CVEMskeOPWtsGz(^H0mU}s<UmcY$w&BY7Kt!nb>8F#J_SaQb-}2n^FXX8
z!G=v*dl)D05jPP)55i3X9*i7{NKV~cBIv_3`GCB`B)$`qJ$Q8{f8h(@kz-(BU`A3j
zxkTE3vNNyY<}cDbjFTNS7HA|g6fh(*WH2N$<T0c$<S?W%6fx*ABr}xEv=_JVb>KID
z#HUtr;{2h>9GW^jybKHskHCqRfnj2xgTNLE#`NElvi7DHJe?J_V@fh8${7EH%(cUA
zZU#f+e4pz(-DhZTD_WA)xl8^y$TUz?AY(?R$%;&3yr7%~ay&@Moym?G^AlVcQW?q^
zG8vK?QW@eIf*DE}5*dmZN*GER3K(J-ic$FS48;tI47m&`45kc*U@y5RNY`=|Z|>5N
lxlx$7&^rNSF0!@%{}T#2UPh35P__ZlpwvUtfLx@f0RTK)h4}yg

delta 692
zcmZoz!`QHfae@si7Xt$W<3>kqCccK%zc2iGcbQR^fq}t6esUF46=TihuT1B78I%|p
z7}yvX82<nN|9|pDVHI8p1_p*^Mg}n8p3KN1t-u47=3`)B`1k++e{m=cV)HUEFiZ?o
zm>k0)!pOe4kmWZcUxWC!b1=IY<iK{7L+nySvupAfb`b?u1_p+||Ns97nFcc%<RB2A
z18lkp%yf=y=E*8NDwFs;IOL#i0y%ke311K6B#Va04GJC{ApgMpGWm-_z~m!L2CT&l
z3=Fp>2U>bhK4NLNnMuZtk%Jk<09hX<fh`h@>Axps?M*FsIxA|&lw^?6tRVkA+Wb?P
zooN%-2gb=NJOX%Zcb<Hh$#C))1%F;fkXMzFte9M)=ns<J{6&$65z{IGxd4k?hD3%;
zhCBv6hGd4&dFM{&M<fZeJ>Au%e7R^bC^kU80^!e03=B^M7#Q9OGcZiyVqlm&LtX>Z
z#EZfzFvrWXGi`D@z_`gJj%o5GCMB)|ObiUdprpYtS<t(6@_l#3$#dO`7#TP7ds{Iw
z>P+_b(V6_rOKGw`69+3O?wKe53}~O+VCOKoL4<{oaq<U|>ctKrSbPy^Sv)zx(sq;7
f9#BZRpoi4t621#Ouy6<Y1Qf!POZa;h>1hA}hsgt3

diff --git a/embedded/mkrouter-v06/mkrouter-v06/Debug/Makefile b/embedded/mkrouter-v06/mkrouter-v06/Debug/Makefile
index a75817b..f44e312 100644
--- a/embedded/mkrouter-v06/mkrouter-v06/Debug/Makefile
+++ b/embedded/mkrouter-v06/mkrouter-v06/Debug/Makefile
@@ -38,7 +38,6 @@ SUBDIRS :=  \
 
 # Add inputs and outputs from these tool invocations to the build variables 
 C_SRCS +=  \
-../apahandler.c \
 ../apaport.c \
 ../board_driver_serial.c \
 ../board_driver_usb.c \
@@ -62,7 +61,6 @@ ASM_SRCS +=
 
 
 OBJS +=  \
-apahandler.o \
 apaport.o \
 board_driver_serial.o \
 board_driver_usb.o \
@@ -79,7 +77,6 @@ sam_ba_usb.o \
 uartport.o
 
 OBJS_AS_ARGS +=  \
-apahandler.o \
 apaport.o \
 board_driver_serial.o \
 board_driver_usb.o \
@@ -96,7 +93,6 @@ sam_ba_usb.o \
 uartport.o
 
 C_DEPS +=  \
-apahandler.d \
 apaport.d \
 board_driver_serial.d \
 board_driver_usb.d \
@@ -113,7 +109,6 @@ sam_ba_usb.d \
 uartport.d
 
 C_DEPS_AS_ARGS +=  \
-apahandler.d \
 apaport.d \
 board_driver_serial.d \
 board_driver_usb.d \
@@ -171,8 +166,6 @@ LINKER_SCRIPT_DEP+=  \
 
 
 
-
-
 
 
 
diff --git a/embedded/mkrouter-v06/mkrouter-v06/Debug/makedep.mk b/embedded/mkrouter-v06/mkrouter-v06/Debug/makedep.mk
index 3d40a92..1915db9 100644
--- a/embedded/mkrouter-v06/mkrouter-v06/Debug/makedep.mk
+++ b/embedded/mkrouter-v06/mkrouter-v06/Debug/makedep.mk
@@ -2,8 +2,6 @@
 # Automatically-generated file. Do not edit or delete the file
 ################################################################################
 
-apahandler.c
-
 apaport.c
 
 board_driver_serial.c
diff --git a/embedded/mkrouter-v06/mkrouter-v06/apahandler.c b/embedded/mkrouter-v06/mkrouter-v06/apahandler.c
index b30b07d..89a74e8 100644
--- a/embedded/mkrouter-v06/mkrouter-v06/apahandler.c
+++ b/embedded/mkrouter-v06/mkrouter-v06/apahandler.c
@@ -11,7 +11,10 @@
 void apa_handle_packet(uint8_t *packet, uint8_t length){
 	// dirty debug reply
 	
+	//sam_ba_port_put_data(packet, packet[0]);
+		
 	// through packet
+	
 	int i = 0;
 	int apa_handler_state = APA_HANDLER_OUTSIDE;
 	
diff --git a/embedded/mkrouter-v06/mkrouter-v06/apahandler.h b/embedded/mkrouter-v06/mkrouter-v06/apahandler.h
deleted file mode 100644
index 32c7104..0000000
--- a/embedded/mkrouter-v06/mkrouter-v06/apahandler.h
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * apahandler.h
- *
- * Created: 3/12/2018 11:55:40 AM
- *  Author: Jake
- */ 
-
-
-#ifndef APAHANDLER_H_
-#define APAHANDLER_H_
-
-#include "sam.h"
-
-#define APA_HANDLER_OUTSIDE 0
-#define APA_HANDLER_INSIDE 1
-
-#define DELIM_KEY_TEST 127 // toggles a light, to test network
-#define DELIM_KEY_STEPS 128 // steps (steps) uint32_t, speed (steps/s) uint32_t, dir uint8_t
-#define DELIM_KEY_BLOCK 129 // is 32 bit int
-
-void apa_handle_packet(uint8_t *packet, uint8_t length);
-void apa_return_packet(uint8_t *packet, uint8_t length);
-
-#endif /* APAHANDLER_H_ */
\ No newline at end of file
diff --git a/embedded/mkrouter-v06/mkrouter-v06/apaport.c b/embedded/mkrouter-v06/mkrouter-v06/apaport.c
index 12ea601..454d08a 100644
--- a/embedded/mkrouter-v06/mkrouter-v06/apaport.c
+++ b/embedded/mkrouter-v06/mkrouter-v06/apaport.c
@@ -64,7 +64,9 @@ void apaport_scan(apaport_t *apap, uint32_t maxpackets){
 		// now to handle
 		// [p][0] is length of packet
 		if(apap->packets[p][1] == APA_ROUTE_POINTER){
-			apa_handle_packet(apap->packets[p], apap->packets[p][0]);
+			pin_set(&stlPacket);
+			sam_ba_port_put_data(apap->packets[p], apap->packets[p][0]);
+			//apa_handle_packet(apap->packets[p], apap->packets[p][0]);
 		} else if(apap->packets[p][1] == APA_ROUTE_FLOOD){
 			// loop through bytes to find pointer and increment
 			// now ship it out on all ports
diff --git a/embedded/mkrouter-v06/mkrouter-v06/apaport.h b/embedded/mkrouter-v06/mkrouter-v06/apaport.h
index 60651f0..7d16e3a 100644
--- a/embedded/mkrouter-v06/mkrouter-v06/apaport.h
+++ b/embedded/mkrouter-v06/mkrouter-v06/apaport.h
@@ -9,7 +9,6 @@
 #ifndef APAPORT_H_
 #define APAPORT_H_
 
-#include "apahandler.h"
 #include "uartport.h"
 #include "pin.h"
 
diff --git a/embedded/mkrouter-v06/mkrouter-v06/hardware.h b/embedded/mkrouter-v06/mkrouter-v06/hardware.h
index 8ed7671..23f2175 100644
--- a/embedded/mkrouter-v06/mkrouter-v06/hardware.h
+++ b/embedded/mkrouter-v06/mkrouter-v06/hardware.h
@@ -16,6 +16,8 @@
 #include "uartport.h"
 #include "apaport.h"
 
+#include "sam_ba_monitor.h"
+
 // For if-case init
 
 #define HARDWARE_IS_APBA 0
diff --git a/embedded/mkrouter-v06/mkrouter-v06/mkrouter-v06.cproj b/embedded/mkrouter-v06/mkrouter-v06/mkrouter-v06.cproj
index 63d2367..bec32ff 100644
--- a/embedded/mkrouter-v06/mkrouter-v06/mkrouter-v06.cproj
+++ b/embedded/mkrouter-v06/mkrouter-v06/mkrouter-v06.cproj
@@ -159,12 +159,6 @@
     </ToolchainSettings>
   </PropertyGroup>
   <ItemGroup>
-    <Compile Include="apahandler.c">
-      <SubType>compile</SubType>
-    </Compile>
-    <Compile Include="apahandler.h">
-      <SubType>compile</SubType>
-    </Compile>
     <Compile Include="apaport.c">
       <SubType>compile</SubType>
     </Compile>
diff --git a/embedded/mkrouter-v06/mkrouter-v06/sam_ba_monitor.c b/embedded/mkrouter-v06/mkrouter-v06/sam_ba_monitor.c
index c5c4869..8e399a9 100644
--- a/embedded/mkrouter-v06/mkrouter-v06/sam_ba_monitor.c
+++ b/embedded/mkrouter-v06/mkrouter-v06/sam_ba_monitor.c
@@ -273,26 +273,58 @@ static void put_uint32(uint32_t n)
 }
 
 uint32_t tick = 0;
-uint8_t data_out[3] = {12, 48, 64};
+uint8_t data_out[3] = {12, 48, 64}; 
+
+#define APA_CDC_NUM_STATIC_PACKETS 6
+uint8_t packCDC[APA_CDC_NUM_STATIC_PACKETS][256]; // static memory buffer for packets
+uint8_t packCDC_num = 0;
+uint8_t packCDC_position = 0;
+uint8_t packCDC_readyNum = 0;
 
 static void sam_ba_monitor_loop(void)
 {
 	// get bytes, handle.. 
 	length = sam_ba_getdata(ptr_monitor_if, data, SIZEBUFMAX);
-	pin_clear(&stlPacket);
 
+	// this should be better: but before we send we have to make sure COM is open, else port locked
 	if(length > 0 && !usbComOpen){
 		usbComOpen = 1;
 		pin_clear(&stlUsb);
+		uint8_t hello[2] = {0,0};
+		sam_ba_putdata(ptr_monitor_if, &hello, 2);
+		return;
+	} 
+	
+	// chunk packets into packCDC
+	if(length > 0 && usbComOpen){
+		pin_clear(&stlPacket);
+		for(int i = 0; i < length; i ++){
+			packCDC[packCDC_num][packCDC_position] = data[i];
+			packCDC_position ++;
+			if(packCDC_position >= packCDC[packCDC_num][0]){
+				packCDC_num = (packCDC_num + 1) % APA_CDC_NUM_STATIC_PACKETS;
+				packCDC_readyNum ++;
+				packCDC_position = 0;
+			}
+		}
 	}
 	
-	// reply
-	sam_ba_putdata(ptr_monitor_if, data, length);
+	// handle all of the ready packets
+	while(packCDC_readyNum > 0){
+		uint8_t p = (packCDC_num + APA_CDC_NUM_STATIC_PACKETS - packCDC_readyNum) % APA_CDC_NUM_STATIC_PACKETS;
+		// we're going to forward them all, 1st byte is port out 
+		uint8_t port = packCDC[p][1];
+		if(port > NUM_UPS){
+			port = NUM_UPS - 1; // if overrun, go on last port
+		}
+		uart_sendchars_buffered(ups[port], packCDC[p], packCDC[p][0]);
+		packCDC_readyNum --;
+	}
+	
+	// reply USB direct to debug if USB coming thru
+	// sam_ba_putdata(ptr_monitor_if, data, length);
 	
 	// have to implement APA code here? and watch for multipackets?
-	for(int i = 0; i < length; i ++, ptr++){
-		// apa 
-	}
 	pin_set(&stlPacket);
 	
 	// dirt nasty heartbeat
-- 
GitLab