From 144bcab06ca30960fb7a4b0b2727e30ea48c9424 Mon Sep 17 00:00:00 2001
From: Jake Read <jake.read@cba.mit.edu>
Date: Thu, 7 Dec 2017 20:31:27 -0500
Subject: [PATCH] packet looping

---
 .../.vs/atsams70-tinyrouter/v14/.atsuo        | Bin 79360 -> 97280 bytes
 .../atsams70-tinyrouter/Debug/Makefile        |  20 ++---
 .../Debug/atsams70-tinyrouter.bin             | Bin 8592 -> 8664 bytes
 .../atsams70-tinyrouter/src/main.c            |  48 ++++++------
 .../atsams70-tinyrouter/src/node.h            |   5 ++
 .../atsams70-tinyrouter/src/packet.c          |   1 +
 .../atsams70-tinyrouter/src/packet_handling.c |   7 +-
 .../atsams70-tinyrouter/src/packet_handling.h |   2 +-
 .../atsams70-tinyrouter/src/tinyport.c        |   1 +
 js/serialserver.js                            |   3 +
 js/serialterminal.js                          |  70 ++++++++++++++++++
 11 files changed, 119 insertions(+), 38 deletions(-)
 create mode 100644 js/serialterminal.js

diff --git a/embedded/atsams70-tinyrouter/.vs/atsams70-tinyrouter/v14/.atsuo b/embedded/atsams70-tinyrouter/.vs/atsams70-tinyrouter/v14/.atsuo
index b7969d22e345530db6e335273301e2d407f90dc7..edbe47cf14888b7b780a959c3b96a96b3d0fc492 100644
GIT binary patch
delta 12226
zcmZp8!_x4Bb%KE+69W_oFfa%)FfcGPFfjc4|NlQo6vS5A7%0ue7m&6;XLbH%MoW;e
z>*gvpPsYiI1r2#S85kJS_&|aT3>=dgS)}X#|NsBrl!1Z4f`Ng7hk=0s#NWZdz`)7C
zz`)DEz@Wguz`(}9!0;C&frKTYYGFbkL!}uQ7!;x6Dhvz^Tnr2hI~f=l<QW(kWTE2f
z3=9m83=9mS3=9nB3=B*RdnN{ITbeO2FsMRRs4*}w7&9<17(snz#lXN|&A`B53zfHH
zU|_IkU|?`yU|^7%%*ZOtm^@jO)t)nqfq@|cq-Jugq_|8R0|P@m0|P?>0|P@M0|P@6
z)U>4x3=ESeu-@To@HvDni0YAp2<AC<XaIl$ngwJ9G|)iuuz&*v2y(!I<Y1VUfq_8`
z>Mf9%2m=Fy1Oo$u69WSSa=<AtFlaG|V+lD>=z~HIq?wz6fkBvo0Tgihp2&d)k_2Ip
zEAa*z)CbNC3=A#|3=FOe3=E_PA!myz$Rd!19E=PMoQw<%T#S&k$iv9Mz{|+Mzz5|E
zFfuR*GBPj-F)}a+Z|3FN&bW!kgOTMkC@Oq-8)UvPFfe>&U|{&hz`*dGfq~%%0|UcP
z1_lOJMh1q>FL)IgCv)&R5T|_d3;t+MMo<z0#o1(sNR7!Q0u5~Gpnw*g{7c~E<ikvc
zlfMZ16QM|0XR?Bt3I`}Hf^rDRFt+`myu&!TO3IG~lxD$VhaqCWq`W2{VKQJn&cML%
zXL6;qH;W0#gA?3!xKD$GK&luRCKvu`o!p`-CY;PL>+*Zn7t7cym3&tJEaG1@g<)c#
z@Z<w3cLXb+_r7|#(^=p)zuUsq_cdojB$OQ{iFvSq@;u1a$t7avS;2W`@&tFC$tB`F
zlZ*beOxCOs5!6yp{?VM)DSGRjVnE=wia3yVmb}!G;>iazZeWuYpPYEkaQbd;M*dAA
zhZ!dyPB&%zv-zhiJJTe+1_A&7wPBNga=Xo&VBQ=Q7t*|WLQDbUA_=C6Au_BT3=9mN
zlNGg;8UIa8^k>{OG0<3ZGXn#|76t}}tqcqda?q3pN+kRY3=F#%7#NhHV*fTK@`KEo
zWaK>gu#D~G2BRY!paKk(FCZQ??wJ(k!U4(-pu7bU3k%=?83xJ=V1X}T=Q$Zc*$HG7
zSfnA3g^^?OPf>psxFYnR@@HiP2jc{H9X3!o@r7aXuV7DzD?$!~Q%Ff@z~mz$28^Pc
zzlKLM3EtV)H%lw$Lr{)Er+`I9`!`UK@^Eu9FlaI`Fa&WjFibzl&bV}X9SftvWY_53
zn}S>zIY0#iD6fKDRbn5&0V)zfg&J7ki+#uD8nYH=+(B%^G<|{sqw#bDeMX__{@je#
zlN*#ACLhqaCY-@=f0n=Si~A0}<&CVh+5t5p3=;#z8E;KKXm)aQmqQur<VDJ)MUD)%
z$l0Xhz&L%iFr(V!NH;ziP-cfDVFm{DG%<OCtO4Vt$p@9}7ez2F@?qL!aD<TqRAz$;
zJ&<>~k#s|HfVF@??bFwiHy1sB8_j3+ZPK};`zJ3jmtj0N`JmEanLLJkh7^WW20exh
z1}Wb#%f?>qof6M>@RuqF-=Dm|T!Hb)=7ajoOel6tE(wvFEEH!5iNCn>oQxn}ae(q5
zs2Fg_Wtm(Ne;N|Y2`(I<A{10%ft<&d%D}*o?LPTef)|GXwDJRqPcBIeVFA@*AP!Fr
z0|P@GwEms!_<!Z({e>Kp|NY_Eyt8CFqo6$VEa{DL>*ijHF?i|j_<tduB(mAH+?SQl
zfB^<U!8-ZiAH~fFYwQ_uCWuKqBCKr;3=I7f1C<3QL30r(GfW0mZ4(ov8JAAZ<WXk@
z1vTEBXn-xUCxt+>Av^>4g9GwQsLW)6IAbuo1V^BDEXrV-lmOL_7PO3RlfNeT;|^6e
zNT^Q!73#^!h?dv=L6J2n{4n+$Zs-M)p4?z`n3Dmm;8-(RK|zJXoPmJ>R1bn8kMlAp
zkQqUV;jg6X<VEsIpzO`b&IqY(7$$>6l|+;{KrJRvQ3ck-&B(w2s+=Iwi$oMBJBJ&w
zfNHwUKhxRS7G*I_PEwZIER|=*L8bUtWu1KL?1#zyZJ#Fhx1F54|Fq`hXN~VBKWjX?
zxwA!tadTt)4?$6o`#|0SVQmHm22fS!0#m=aVb)3(R!~{vv{`TdC8k9=Oq&)ZatH>2
zRD-d=fnrcwWHQe^qs>cJ#V}7+cqX-Z-UAV4K~U2Qtb~E#0I0zvH`#vw!O8F6>u=US
za*=WKy-$yr6y8A<Ffa%l09ERs3;}95f}#K<HTmEl-N^_3s!a|(yn50%7gkUnYnU#;
z&se~lk(!v2S`?p_nUh)^GkpO+qv&LIjqd4ZxEcGoGeCOTZ1PHTau(Gwab>$h8aZ4H
zlNCR_*?jBF14hPglP9$8o$S!b#u=ZHn3s~1nU_BKLW34l&DY5j+6)=RH#7eD&p7#D
zTMwF=3Fow6fddN2$(=2llYcerW68@;Nu3Om1ch*a+Yk1OjqDFO_a#p5YyZf?$>0Jq
z7TvxH=d^?c3lfvFQ%m5E(90;Atk{yygHPbW<p1~Q*Lx)ehXy%?xnu-Hg!!5$Rs;pP
z1(@b$7Z|7HCL2|jmgjhv`($|MXD0?`dPF&=W`vi7IJ*W__(pjYre_(Y<a=i4L>lBf
z2begzTNH=-WhI(rI$MN#RCu@~X1G?koBA4-M;T=Mn^>5e7^jt1xtJTIR|Oa+C!1JW
zR+Xid)`$B$rn&`}7^O!9<QC^8xnz3gJ2|=r24#47IJ>(>dipzASf-|$r50I+rs_wP
zo0sLAmsdGu`Uj`w=a^`ldpMf;dRQ7(nOeGNM@FXSW#tBxySN&<yJw{qB~_Wbm6a40
zgoGJc`X~Db7F2lVMj05Jmih#08<;q!6l=Q#)?4I7hG#^ShgXDp`kN+t`{hS@`gt4q
zCgz)lTRNFmCMWCbyH+NbWF=>trMp@<8RkcY1RLn<2SsHCTO?LErnwcQrTYgYIVCx}
z>H7z`8@ZY}c@>rhCr6f<SA>~YS(X&!hP!6^Wt*3|S2*XICg)ltx)mn*xfh0ogc_yi
z)CW6ddL;%`BwIunRiv9nB>MzZ<d+z_BwLuL1-Q6-78qv+glFa(xJG(8M|c)RdU}MI
zn`c#d8x&R*8(Eh7r{#DR6$h1v`$ahBn^_trM&_h@ngtpK1-LmS<@kCSnWhDJdiwcU
zxHy|t<wrSsm<0M(npc#Vx|ZjAraP5}*5{UFX9tz1<$1cgnuca(r00j1<P=!AS5{_t
z1y&figc*2y1V(8GXKM!sI~Il{rG^E2YJ2+|1f;q;CK^QqdFMO1hdH|B2WL7(C8uVV
zTRN5%hg77Ohew(Q2YQ=kxTG0Gxu!>kx`vw?C#IF8I(g*!7#OD;`KPCAXB&j1)SFo(
zSLlai2jo^%MHrQ)mzEd=r?{4;XS#X?xt3K$WtBRWW~5}4R-|MY1e%$JS!QP!1sdh#
zrDi7ux~6y-yQc<+MCImZ=6Yr3R^^37<QrQ=nR#g!1c#L*C26~4<(TICXL}}R<(v6<
z1y_V*L<Q?-rsjqlR^=H6WaZ}Nn|m4On5ASTn)_GzRTdT*rG>f$n|T@+g_m3A<QaJD
zn;8|CL^$iG6*>kuMi^^nSmv9WC%NfIPByrqK3R4?4=bqC$T_+G<>}3RPk0!a7H~{@
zFt6U*8<DB}{1Tn~oZJFTjFO^!N(-`cLNY5OGfGl|b4#+_3-g^l^E0zkO3Z@|(!Cwi
zQwy9T16-5J3!MGTvQwR0%ZdV1+*}OJEDSwMJw3|GO%okWy)!Msy(@xz-13Zyg1yp%
z6Aj&i^rK4BjJ>ifQ}k0^N~-F8&3#k#{VmPS4TAzbG9xP!Gn|Y=lA}UhA|hQ~oczjt
zyh_}24I^{Xb3;taa?+fV+{^Pk3@uZ%i!xIU!h$>kqOwW?{PQe|0}4I-OhU@4@<Khz
zBg*_eO<XK8J+iVR%fo$*ebYQb{X&b)a=i*o{R~W<L(?J+EdtUi3$p8zf=t{J^OFPI
zb8;LlgMA|{ynTy|JUvQ%GD0mQgF>~743eYF{ED>;J;L&R%TojLLQBg%41C=Ky+fTn
zBZHIm^DT1owX?!~(z41EgK`rKO3e+N$^*Q#b4{uoeG6Q3LNd)mU3^`0a+180GlC8L
zqN?)C%_6D_j2+GV63yye%MA^K{Y{cW(>?sl{oUN1y@INeQwyrx(hbwn!u7QyLJfQ)
z11g+d0!>^^a-E7xT!JgB@`}BEDgu2<1N61s-HlQ_Ec~;)J)_DkJbcqa&E3<ogR2S*
z3iAsJLZb|mjY6V=9o-Eh3w#n?j6#x&jGR1zianCkv%F0GJu2(Xe7(wCij6YdT^(~w
zA`7wu^4!x+{0yCP12dhYDk6=G+%nVM%1RAV!wnK$lKh=BLj20hJ^aEW(~~VTvklz6
z(hZ!G(tLd)_0tRWO<mH;i^Fm}!je)dw6)ViLk#qN^Fza(Q{1DRO@l)M4LltavmH}Y
zOd@kEd@Cc;J<aMvihXjuGNa0?jDsVMQ}i<f3bTt6U7d_m&Abh~^PMv-e2Yt+vLdQX
zD$)aTN}SVj3_Vh_t6U;of?X{`EW!&y1APmf3rdr`qZ~c6yxa<MjRV6iv%=ghl7gZf
zgDcF_U4lv~GxUSX6U!_8%1aC@e1h^llY(5rN)odoy^8A%9Rmx)LS3EAw99<6a&jso
z%+oVMD>Flig2KJS-KxAR(*u&jT*|$D^GtnxTq?_q(n9q8O|`R9qKs3#+=G0w3X?+g
zbB$AtO9T8YLkipiLp`!hz4YCEQ?mjSbInW4lZx{Us<Ium9ZP~r^MW%h9K+q*%N-pZ
z9i6;_LQSV16J(SZP6k!qP+SP<`E73KILpX5TJeome4`Z~g%uwsXaGbCG+YO7$TrM+
zIhwad8<nGtN=h1)VxYlBXsrbvcL&XQxZvn#iqv3q{F2c-eh>j(L{Bhzw2eC2MjdUV
z4u&==xCaRu4rTz2YO%(^hJQHNKrFqC^vQ<JiR_r{(H87z3wE>xOJNI^9W(_F8hvl*
zIKKIIAKU2Q&FJ9G=-|!Z7`y>hjGGTmelnUTNAu)po*X23vT~-#Wd3{l!pKvr*VlL2
z&WlT%Z211|<|V7IjSjAk&MJ=1DpEA7C<t0{0v!N409xoLGueKB#G+p;j5nq~WMMoE
zT2IFgS-S}r5Ml+bRS@3%_pc@+;~j{y7F97$&=d%0B^q2vf|-Fqbn1D=<5LeXa&7+d
zzlUw|$JVULAKvS2)<2TLxV?dmk&k)uK~?+dwp@(t;H3~+x{QjGrytFPEVXzDbs30y
z1zj_XTpmpRbz$lxTubz}i7}=yGM)pwk2jH_m>~_knu>uzcyi+Ji;PT@8{O_tUJ#%F
z_KnD9{Xbt>iC?b40}28L$Z`$Q&5S>inMtuJo_Bg5JL9zJc_xf))6W|-E}JgL$Cxy^
zpp|v<`fq~MeGC|5CLb)Xo4$sHQDt(R7ti)fOpHN{lLMO_C%>P?Jv~)}Q3$)X<<r&l
z7^^2A_|^tuWKQ2}%qRph`xbbu$8<#nMqx(qkR4(L$#g?5EP^1FAdP9$*Xu9}P3Pxl
z{5Uz`iqiDyx{S5c9TXXbrmy8<?3-?3z$h|3mxnO}w1%aHao*&Edi$pb@G#1P*6Ss2
zZt!SeoNQ#dZTl@2Mla?`UI(UcRA5w@yx-e#dH_G8+Vp!GjK&~?7EM0zEn#zmTLa_d
zO+S++fB0dreVZ1e7vtm!3M$hLc^S1P&-dn<e#d}O9OSKm@?Xq!2TjI<(<dr08X?vs
zg8ev2bDD4l!_GDJM;wm!O}YBc%;<Q-s!N~+aKtS;6`bzE#h5wSPswPqL#r~LC9s-K
zlbO8sO}_Y1c=|s+MnQZbImz+P<U2Yk*w-(DR?R`M?9Bh#_B^2Vi<1vnT~Lo_$Y4lh
z$YV%h$YIE2$YV%n&|^quSaE)JUwY-Ie@ky#wDCQ6$zhln=qYK_tv&JTvf$PAWe_ud
Vf!0(BFfcrt7^p6QE;%uA0|1q2+)Dre

delta 3373
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
ZI%74+8_<ddW~VRQ**=W(CLdJT4*-9@X}JIZ

diff --git a/embedded/atsams70-tinyrouter/atsams70-tinyrouter/Debug/Makefile b/embedded/atsams70-tinyrouter/atsams70-tinyrouter/Debug/Makefile
index 23033bf..a975b35 100644
--- a/embedded/atsams70-tinyrouter/atsams70-tinyrouter/Debug/Makefile
+++ b/embedded/atsams70-tinyrouter/atsams70-tinyrouter/Debug/Makefile
@@ -218,63 +218,63 @@ LINKER_SCRIPT_DEP+=  \
 
 src/%.o: ../src/%.c
 	@echo Building file: $<
-	@echo Invoking: ARM/GNU C Compiler : 6.2.1
+	@echo Invoking: ARM/GNU C Compiler : 6.3.1
 	$(QUOTE)C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\arm\arm-gnu-toolchain\bin\arm-none-eabi-gcc.exe$(QUOTE)  -x c -mthumb -D__SAMS70N20__ -DDEBUG -Dscanf=iscanf -DBOARD=USER_BOARD -DARM_MATH_CM7=true -Dprintf=iprintf  -I"../src/ASF/common/boards" -I"../src/ASF/sam/utils" -I"../src/ASF/sam/utils/header_files" -I"../src/ASF/sam/utils/preprocessor" -I"../src/ASF/thirdparty/CMSIS/Include" -I"../src/ASF/thirdparty/CMSIS/Lib/GCC" -I"../src/ASF/sam/utils/fpu" -I"../src/ASF/common/utils" -I"../src/ASF/sam/utils/cmsis/sams70/source/templates" -I"../src/ASF/sam/utils/cmsis/sams70/include" -I"../src/ASF/common/boards/user_board" -I"../src" -I"../src/config" -I"../src/ASF/sam/drivers/pmc" -I"../src/ASF/common/services/clock" -I"../src/ASF/common/services/delay"  -O1 -fdata-sections -ffunction-sections -mlong-calls -g3 -Wall -mcpu=cortex-m7 -c -pipe -fno-strict-aliasing -Wall -Wstrict-prototypes -Wmissing-prototypes -Werror-implicit-function-declaration -Wpointer-arith -std=gnu99 -ffunction-sections -fdata-sections -Wchar-subscripts -Wcomment -Wformat=2 -Wimplicit-int -Wmain -Wparentheses -Wsequence-point -Wreturn-type -Wswitch -Wtrigraphs -Wunused -Wuninitialized -Wunknown-pragmas -Wfloat-equal -Wundef -Wshadow -Wbad-function-cast -Wwrite-strings -Wsign-compare -Waggregate-return -Wmissing-declarations -Wformat -Wmissing-format-attribute -Wno-deprecated-declarations -Wpacked -Wredundant-decls -Wnested-externs -Wlong-long -Wunreachable-code -Wcast-align --param max-inline-insns-single=500 -mfloat-abi=softfp -mfpu=fpv5-sp-d16 -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)"   -o "$@" "$<" 
 	@echo Finished building: $<
 	
 
 src/ASF/common/services/delay/sam/%.o: ../src/ASF/common/services/delay/sam/%.c
 	@echo Building file: $<
-	@echo Invoking: ARM/GNU C Compiler : 6.2.1
+	@echo Invoking: ARM/GNU C Compiler : 6.3.1
 	$(QUOTE)C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\arm\arm-gnu-toolchain\bin\arm-none-eabi-gcc.exe$(QUOTE)  -x c -mthumb -D__SAMS70N20__ -DDEBUG -Dscanf=iscanf -DBOARD=USER_BOARD -DARM_MATH_CM7=true -Dprintf=iprintf  -I"../src/ASF/common/boards" -I"../src/ASF/sam/utils" -I"../src/ASF/sam/utils/header_files" -I"../src/ASF/sam/utils/preprocessor" -I"../src/ASF/thirdparty/CMSIS/Include" -I"../src/ASF/thirdparty/CMSIS/Lib/GCC" -I"../src/ASF/sam/utils/fpu" -I"../src/ASF/common/utils" -I"../src/ASF/sam/utils/cmsis/sams70/source/templates" -I"../src/ASF/sam/utils/cmsis/sams70/include" -I"../src/ASF/common/boards/user_board" -I"../src" -I"../src/config" -I"../src/ASF/sam/drivers/pmc" -I"../src/ASF/common/services/clock" -I"../src/ASF/common/services/delay"  -O1 -fdata-sections -ffunction-sections -mlong-calls -g3 -Wall -mcpu=cortex-m7 -c -pipe -fno-strict-aliasing -Wall -Wstrict-prototypes -Wmissing-prototypes -Werror-implicit-function-declaration -Wpointer-arith -std=gnu99 -ffunction-sections -fdata-sections -Wchar-subscripts -Wcomment -Wformat=2 -Wimplicit-int -Wmain -Wparentheses -Wsequence-point -Wreturn-type -Wswitch -Wtrigraphs -Wunused -Wuninitialized -Wunknown-pragmas -Wfloat-equal -Wundef -Wshadow -Wbad-function-cast -Wwrite-strings -Wsign-compare -Waggregate-return -Wmissing-declarations -Wformat -Wmissing-format-attribute -Wno-deprecated-declarations -Wpacked -Wredundant-decls -Wnested-externs -Wlong-long -Wunreachable-code -Wcast-align --param max-inline-insns-single=500 -mfloat-abi=softfp -mfpu=fpv5-sp-d16 -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)"   -o "$@" "$<" 
 	@echo Finished building: $<
 	
 
 src/ASF/common/services/clock/sams70/%.o: ../src/ASF/common/services/clock/sams70/%.c
 	@echo Building file: $<
-	@echo Invoking: ARM/GNU C Compiler : 6.2.1
+	@echo Invoking: ARM/GNU C Compiler : 6.3.1
 	$(QUOTE)C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\arm\arm-gnu-toolchain\bin\arm-none-eabi-gcc.exe$(QUOTE)  -x c -mthumb -D__SAMS70N20__ -DDEBUG -Dscanf=iscanf -DBOARD=USER_BOARD -DARM_MATH_CM7=true -Dprintf=iprintf  -I"../src/ASF/common/boards" -I"../src/ASF/sam/utils" -I"../src/ASF/sam/utils/header_files" -I"../src/ASF/sam/utils/preprocessor" -I"../src/ASF/thirdparty/CMSIS/Include" -I"../src/ASF/thirdparty/CMSIS/Lib/GCC" -I"../src/ASF/sam/utils/fpu" -I"../src/ASF/common/utils" -I"../src/ASF/sam/utils/cmsis/sams70/source/templates" -I"../src/ASF/sam/utils/cmsis/sams70/include" -I"../src/ASF/common/boards/user_board" -I"../src" -I"../src/config" -I"../src/ASF/sam/drivers/pmc" -I"../src/ASF/common/services/clock" -I"../src/ASF/common/services/delay"  -O1 -fdata-sections -ffunction-sections -mlong-calls -g3 -Wall -mcpu=cortex-m7 -c -pipe -fno-strict-aliasing -Wall -Wstrict-prototypes -Wmissing-prototypes -Werror-implicit-function-declaration -Wpointer-arith -std=gnu99 -ffunction-sections -fdata-sections -Wchar-subscripts -Wcomment -Wformat=2 -Wimplicit-int -Wmain -Wparentheses -Wsequence-point -Wreturn-type -Wswitch -Wtrigraphs -Wunused -Wuninitialized -Wunknown-pragmas -Wfloat-equal -Wundef -Wshadow -Wbad-function-cast -Wwrite-strings -Wsign-compare -Waggregate-return -Wmissing-declarations -Wformat -Wmissing-format-attribute -Wno-deprecated-declarations -Wpacked -Wredundant-decls -Wnested-externs -Wlong-long -Wunreachable-code -Wcast-align --param max-inline-insns-single=500 -mfloat-abi=softfp -mfpu=fpv5-sp-d16 -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)"   -o "$@" "$<" 
 	@echo Finished building: $<
 	
 
 src/ASF/sam/drivers/pmc/%.o: ../src/ASF/sam/drivers/pmc/%.c
 	@echo Building file: $<
-	@echo Invoking: ARM/GNU C Compiler : 6.2.1
+	@echo Invoking: ARM/GNU C Compiler : 6.3.1
 	$(QUOTE)C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\arm\arm-gnu-toolchain\bin\arm-none-eabi-gcc.exe$(QUOTE)  -x c -mthumb -D__SAMS70N20__ -DDEBUG -Dscanf=iscanf -DBOARD=USER_BOARD -DARM_MATH_CM7=true -Dprintf=iprintf  -I"../src/ASF/common/boards" -I"../src/ASF/sam/utils" -I"../src/ASF/sam/utils/header_files" -I"../src/ASF/sam/utils/preprocessor" -I"../src/ASF/thirdparty/CMSIS/Include" -I"../src/ASF/thirdparty/CMSIS/Lib/GCC" -I"../src/ASF/sam/utils/fpu" -I"../src/ASF/common/utils" -I"../src/ASF/sam/utils/cmsis/sams70/source/templates" -I"../src/ASF/sam/utils/cmsis/sams70/include" -I"../src/ASF/common/boards/user_board" -I"../src" -I"../src/config" -I"../src/ASF/sam/drivers/pmc" -I"../src/ASF/common/services/clock" -I"../src/ASF/common/services/delay"  -O1 -fdata-sections -ffunction-sections -mlong-calls -g3 -Wall -mcpu=cortex-m7 -c -pipe -fno-strict-aliasing -Wall -Wstrict-prototypes -Wmissing-prototypes -Werror-implicit-function-declaration -Wpointer-arith -std=gnu99 -ffunction-sections -fdata-sections -Wchar-subscripts -Wcomment -Wformat=2 -Wimplicit-int -Wmain -Wparentheses -Wsequence-point -Wreturn-type -Wswitch -Wtrigraphs -Wunused -Wuninitialized -Wunknown-pragmas -Wfloat-equal -Wundef -Wshadow -Wbad-function-cast -Wwrite-strings -Wsign-compare -Waggregate-return -Wmissing-declarations -Wformat -Wmissing-format-attribute -Wno-deprecated-declarations -Wpacked -Wredundant-decls -Wnested-externs -Wlong-long -Wunreachable-code -Wcast-align --param max-inline-insns-single=500 -mfloat-abi=softfp -mfpu=fpv5-sp-d16 -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)"   -o "$@" "$<" 
 	@echo Finished building: $<
 	
 
 src/ASF/common/boards/user_board/%.o: ../src/ASF/common/boards/user_board/%.c
 	@echo Building file: $<
-	@echo Invoking: ARM/GNU C Compiler : 6.2.1
+	@echo Invoking: ARM/GNU C Compiler : 6.3.1
 	$(QUOTE)C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\arm\arm-gnu-toolchain\bin\arm-none-eabi-gcc.exe$(QUOTE)  -x c -mthumb -D__SAMS70N20__ -DDEBUG -Dscanf=iscanf -DBOARD=USER_BOARD -DARM_MATH_CM7=true -Dprintf=iprintf  -I"../src/ASF/common/boards" -I"../src/ASF/sam/utils" -I"../src/ASF/sam/utils/header_files" -I"../src/ASF/sam/utils/preprocessor" -I"../src/ASF/thirdparty/CMSIS/Include" -I"../src/ASF/thirdparty/CMSIS/Lib/GCC" -I"../src/ASF/sam/utils/fpu" -I"../src/ASF/common/utils" -I"../src/ASF/sam/utils/cmsis/sams70/source/templates" -I"../src/ASF/sam/utils/cmsis/sams70/include" -I"../src/ASF/common/boards/user_board" -I"../src" -I"../src/config" -I"../src/ASF/sam/drivers/pmc" -I"../src/ASF/common/services/clock" -I"../src/ASF/common/services/delay"  -O1 -fdata-sections -ffunction-sections -mlong-calls -g3 -Wall -mcpu=cortex-m7 -c -pipe -fno-strict-aliasing -Wall -Wstrict-prototypes -Wmissing-prototypes -Werror-implicit-function-declaration -Wpointer-arith -std=gnu99 -ffunction-sections -fdata-sections -Wchar-subscripts -Wcomment -Wformat=2 -Wimplicit-int -Wmain -Wparentheses -Wsequence-point -Wreturn-type -Wswitch -Wtrigraphs -Wunused -Wuninitialized -Wunknown-pragmas -Wfloat-equal -Wundef -Wshadow -Wbad-function-cast -Wwrite-strings -Wsign-compare -Waggregate-return -Wmissing-declarations -Wformat -Wmissing-format-attribute -Wno-deprecated-declarations -Wpacked -Wredundant-decls -Wnested-externs -Wlong-long -Wunreachable-code -Wcast-align --param max-inline-insns-single=500 -mfloat-abi=softfp -mfpu=fpv5-sp-d16 -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)"   -o "$@" "$<" 
 	@echo Finished building: $<
 	
 
 src/ASF/common/utils/interrupt/%.o: ../src/ASF/common/utils/interrupt/%.c
 	@echo Building file: $<
-	@echo Invoking: ARM/GNU C Compiler : 6.2.1
+	@echo Invoking: ARM/GNU C Compiler : 6.3.1
 	$(QUOTE)C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\arm\arm-gnu-toolchain\bin\arm-none-eabi-gcc.exe$(QUOTE)  -x c -mthumb -D__SAMS70N20__ -DDEBUG -Dscanf=iscanf -DBOARD=USER_BOARD -DARM_MATH_CM7=true -Dprintf=iprintf  -I"../src/ASF/common/boards" -I"../src/ASF/sam/utils" -I"../src/ASF/sam/utils/header_files" -I"../src/ASF/sam/utils/preprocessor" -I"../src/ASF/thirdparty/CMSIS/Include" -I"../src/ASF/thirdparty/CMSIS/Lib/GCC" -I"../src/ASF/sam/utils/fpu" -I"../src/ASF/common/utils" -I"../src/ASF/sam/utils/cmsis/sams70/source/templates" -I"../src/ASF/sam/utils/cmsis/sams70/include" -I"../src/ASF/common/boards/user_board" -I"../src" -I"../src/config" -I"../src/ASF/sam/drivers/pmc" -I"../src/ASF/common/services/clock" -I"../src/ASF/common/services/delay"  -O1 -fdata-sections -ffunction-sections -mlong-calls -g3 -Wall -mcpu=cortex-m7 -c -pipe -fno-strict-aliasing -Wall -Wstrict-prototypes -Wmissing-prototypes -Werror-implicit-function-declaration -Wpointer-arith -std=gnu99 -ffunction-sections -fdata-sections -Wchar-subscripts -Wcomment -Wformat=2 -Wimplicit-int -Wmain -Wparentheses -Wsequence-point -Wreturn-type -Wswitch -Wtrigraphs -Wunused -Wuninitialized -Wunknown-pragmas -Wfloat-equal -Wundef -Wshadow -Wbad-function-cast -Wwrite-strings -Wsign-compare -Waggregate-return -Wmissing-declarations -Wformat -Wmissing-format-attribute -Wno-deprecated-declarations -Wpacked -Wredundant-decls -Wnested-externs -Wlong-long -Wunreachable-code -Wcast-align --param max-inline-insns-single=500 -mfloat-abi=softfp -mfpu=fpv5-sp-d16 -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)"   -o "$@" "$<" 
 	@echo Finished building: $<
 	
 
 src/ASF/sam/utils/cmsis/sams70/source/templates/gcc/%.o: ../src/ASF/sam/utils/cmsis/sams70/source/templates/gcc/%.c
 	@echo Building file: $<
-	@echo Invoking: ARM/GNU C Compiler : 6.2.1
+	@echo Invoking: ARM/GNU C Compiler : 6.3.1
 	$(QUOTE)C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\arm\arm-gnu-toolchain\bin\arm-none-eabi-gcc.exe$(QUOTE)  -x c -mthumb -D__SAMS70N20__ -DDEBUG -Dscanf=iscanf -DBOARD=USER_BOARD -DARM_MATH_CM7=true -Dprintf=iprintf  -I"../src/ASF/common/boards" -I"../src/ASF/sam/utils" -I"../src/ASF/sam/utils/header_files" -I"../src/ASF/sam/utils/preprocessor" -I"../src/ASF/thirdparty/CMSIS/Include" -I"../src/ASF/thirdparty/CMSIS/Lib/GCC" -I"../src/ASF/sam/utils/fpu" -I"../src/ASF/common/utils" -I"../src/ASF/sam/utils/cmsis/sams70/source/templates" -I"../src/ASF/sam/utils/cmsis/sams70/include" -I"../src/ASF/common/boards/user_board" -I"../src" -I"../src/config" -I"../src/ASF/sam/drivers/pmc" -I"../src/ASF/common/services/clock" -I"../src/ASF/common/services/delay"  -O1 -fdata-sections -ffunction-sections -mlong-calls -g3 -Wall -mcpu=cortex-m7 -c -pipe -fno-strict-aliasing -Wall -Wstrict-prototypes -Wmissing-prototypes -Werror-implicit-function-declaration -Wpointer-arith -std=gnu99 -ffunction-sections -fdata-sections -Wchar-subscripts -Wcomment -Wformat=2 -Wimplicit-int -Wmain -Wparentheses -Wsequence-point -Wreturn-type -Wswitch -Wtrigraphs -Wunused -Wuninitialized -Wunknown-pragmas -Wfloat-equal -Wundef -Wshadow -Wbad-function-cast -Wwrite-strings -Wsign-compare -Waggregate-return -Wmissing-declarations -Wformat -Wmissing-format-attribute -Wno-deprecated-declarations -Wpacked -Wredundant-decls -Wnested-externs -Wlong-long -Wunreachable-code -Wcast-align --param max-inline-insns-single=500 -mfloat-abi=softfp -mfpu=fpv5-sp-d16 -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)"   -o "$@" "$<" 
 	@echo Finished building: $<
 	
 
 src/ASF/sam/utils/cmsis/sams70/source/templates/%.o: ../src/ASF/sam/utils/cmsis/sams70/source/templates/%.c
 	@echo Building file: $<
-	@echo Invoking: ARM/GNU C Compiler : 6.2.1
+	@echo Invoking: ARM/GNU C Compiler : 6.3.1
 	$(QUOTE)C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\arm\arm-gnu-toolchain\bin\arm-none-eabi-gcc.exe$(QUOTE)  -x c -mthumb -D__SAMS70N20__ -DDEBUG -Dscanf=iscanf -DBOARD=USER_BOARD -DARM_MATH_CM7=true -Dprintf=iprintf  -I"../src/ASF/common/boards" -I"../src/ASF/sam/utils" -I"../src/ASF/sam/utils/header_files" -I"../src/ASF/sam/utils/preprocessor" -I"../src/ASF/thirdparty/CMSIS/Include" -I"../src/ASF/thirdparty/CMSIS/Lib/GCC" -I"../src/ASF/sam/utils/fpu" -I"../src/ASF/common/utils" -I"../src/ASF/sam/utils/cmsis/sams70/source/templates" -I"../src/ASF/sam/utils/cmsis/sams70/include" -I"../src/ASF/common/boards/user_board" -I"../src" -I"../src/config" -I"../src/ASF/sam/drivers/pmc" -I"../src/ASF/common/services/clock" -I"../src/ASF/common/services/delay"  -O1 -fdata-sections -ffunction-sections -mlong-calls -g3 -Wall -mcpu=cortex-m7 -c -pipe -fno-strict-aliasing -Wall -Wstrict-prototypes -Wmissing-prototypes -Werror-implicit-function-declaration -Wpointer-arith -std=gnu99 -ffunction-sections -fdata-sections -Wchar-subscripts -Wcomment -Wformat=2 -Wimplicit-int -Wmain -Wparentheses -Wsequence-point -Wreturn-type -Wswitch -Wtrigraphs -Wunused -Wuninitialized -Wunknown-pragmas -Wfloat-equal -Wundef -Wshadow -Wbad-function-cast -Wwrite-strings -Wsign-compare -Waggregate-return -Wmissing-declarations -Wformat -Wmissing-format-attribute -Wno-deprecated-declarations -Wpacked -Wredundant-decls -Wnested-externs -Wlong-long -Wunreachable-code -Wcast-align --param max-inline-insns-single=500 -mfloat-abi=softfp -mfpu=fpv5-sp-d16 -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)"   -o "$@" "$<" 
 	@echo Finished building: $<
 	
 
 src/ASF/sam/utils/syscalls/gcc/%.o: ../src/ASF/sam/utils/syscalls/gcc/%.c
 	@echo Building file: $<
-	@echo Invoking: ARM/GNU C Compiler : 6.2.1
+	@echo Invoking: ARM/GNU C Compiler : 6.3.1
 	$(QUOTE)C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\arm\arm-gnu-toolchain\bin\arm-none-eabi-gcc.exe$(QUOTE)  -x c -mthumb -D__SAMS70N20__ -DDEBUG -Dscanf=iscanf -DBOARD=USER_BOARD -DARM_MATH_CM7=true -Dprintf=iprintf  -I"../src/ASF/common/boards" -I"../src/ASF/sam/utils" -I"../src/ASF/sam/utils/header_files" -I"../src/ASF/sam/utils/preprocessor" -I"../src/ASF/thirdparty/CMSIS/Include" -I"../src/ASF/thirdparty/CMSIS/Lib/GCC" -I"../src/ASF/sam/utils/fpu" -I"../src/ASF/common/utils" -I"../src/ASF/sam/utils/cmsis/sams70/source/templates" -I"../src/ASF/sam/utils/cmsis/sams70/include" -I"../src/ASF/common/boards/user_board" -I"../src" -I"../src/config" -I"../src/ASF/sam/drivers/pmc" -I"../src/ASF/common/services/clock" -I"../src/ASF/common/services/delay"  -O1 -fdata-sections -ffunction-sections -mlong-calls -g3 -Wall -mcpu=cortex-m7 -c -pipe -fno-strict-aliasing -Wall -Wstrict-prototypes -Wmissing-prototypes -Werror-implicit-function-declaration -Wpointer-arith -std=gnu99 -ffunction-sections -fdata-sections -Wchar-subscripts -Wcomment -Wformat=2 -Wimplicit-int -Wmain -Wparentheses -Wsequence-point -Wreturn-type -Wswitch -Wtrigraphs -Wunused -Wuninitialized -Wunknown-pragmas -Wfloat-equal -Wundef -Wshadow -Wbad-function-cast -Wwrite-strings -Wsign-compare -Waggregate-return -Wmissing-declarations -Wformat -Wmissing-format-attribute -Wno-deprecated-declarations -Wpacked -Wredundant-decls -Wnested-externs -Wlong-long -Wunreachable-code -Wcast-align --param max-inline-insns-single=500 -mfloat-abi=softfp -mfpu=fpv5-sp-d16 -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)"   -o "$@" "$<" 
 	@echo Finished building: $<
 	
@@ -303,7 +303,7 @@ all: $(OUTPUT_FILE_PATH) $(ADDITIONAL_DEPENDENCIES)
 
 $(OUTPUT_FILE_PATH): $(OBJS) $(USER_OBJS) $(OUTPUT_FILE_DEP) $(LIB_DEP) $(LINKER_SCRIPT_DEP)
 	@echo Building target: $@
-	@echo Invoking: ARM/GNU Linker : 6.2.1
+	@echo Invoking: ARM/GNU Linker : 6.3.1
 	$(QUOTE)C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\arm\arm-gnu-toolchain\bin\arm-none-eabi-gcc.exe$(QUOTE) -o$(OUTPUT_FILE_PATH_AS_ARGS) $(OBJS_AS_ARGS) $(USER_OBJS) $(LIBS) -mthumb -Wl,-Map="atsams70-tinyrouter.map" -Wl,--start-group -larm_cortexM7lfsp_math_softfp -lm  -Wl,--end-group -L"../src/ASF/thirdparty/CMSIS/Lib/GCC"  -Wl,--gc-sections -mcpu=cortex-m7 -Wl,--entry=Reset_Handler -Wl,--cref -mthumb -T../src/ASF/sam/utils/linker_scripts/sams70/sams70n20/gcc/flash.ld  
 	@echo Finished building target: $@
 	"C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\arm\arm-gnu-toolchain\bin\arm-none-eabi-objcopy.exe" -O binary "atsams70-tinyrouter.elf" "atsams70-tinyrouter.bin"
diff --git a/embedded/atsams70-tinyrouter/atsams70-tinyrouter/Debug/atsams70-tinyrouter.bin b/embedded/atsams70-tinyrouter/atsams70-tinyrouter/Debug/atsams70-tinyrouter.bin
index 2ed84e36c9185051d7b2b2f99cd24f64f6034d26..113528691ddfc0ecc936cfd83635e1e05bc3400b 100644
GIT binary patch
delta 1963
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
On>8iVIanI_925Yfr#JEd

delta 1942
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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 f692ee9..061f3cb 100644
--- a/embedded/atsams70-tinyrouter/atsams70-tinyrouter/src/main.c
+++ b/embedded/atsams70-tinyrouter/atsams70-tinyrouter/src/main.c
@@ -31,7 +31,8 @@
 #include <asf.h>
 #include "pin.h"
 #include "tinyport.h"
-#include "packet_handler.h"
+#include "packet_handling.h"
+#include "node.h"
 
 pin_t stlb;
 pin_t stlr;
@@ -204,19 +205,21 @@ void setallstatus(void){
 
 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;
-  }
-  nb->LUT = (uint8_t**)malloc(4096);
-  for (int i = 0; i < 4; i++) {
-    for (int port = 0; port < 4; port++) {
-      n->LUT[i][port] = 255;
-    }
-  }
-	//board_init(); // asf
+	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;
+		}
+	}
+	*/
+	board_init(); // asf
 	sysclk_init();	// asf clock
 
 	setupperipherals(); // peripheral clocks
@@ -259,24 +262,26 @@ int main (void)
 		for(int i = 0; i < 4; i++){ // loop over ports and check for packets, add packets to packet buffer
 			if(ports[i].haspacket){
 
-				packetlooper = ports[i].packet; // pull into buffer
+				// TODO: update heartbeat / buffer depth
+				packetlooper = ports[i].packet;
 				packet_clean(&ports[i].packet); // reset packet states
 				ports[i].haspacket = TP_NO_PACKET;
-				// TODO: update heartbeat / buffer depth
-
-				pin_clear(ports[i].stlb); // for debugging: we have seen a packet on this port
-
-				for(int c = 0; c < packetlooper.size; c ++){ // blocking echo
+								
+				for(int c = 0; c <= packetlooper.size; c ++){ // blocking echo
 					tp_putchar(&ports[i], packetlooper.raw[c]);
 				}
-
-				handle_packet();
+				
+				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
@@ -292,6 +297,7 @@ int main (void)
 		// loop over packet buffer and handle packets
 
 		delay_cycles(1); // one clock tick to relax interrupt scheduler
+		//pin_set(&stlb);
 	}
 }
 
diff --git a/embedded/atsams70-tinyrouter/atsams70-tinyrouter/src/node.h b/embedded/atsams70-tinyrouter/atsams70-tinyrouter/src/node.h
index 3452b30..dd7b828 100644
--- a/embedded/atsams70-tinyrouter/atsams70-tinyrouter/src/node.h
+++ b/embedded/atsams70-tinyrouter/atsams70-tinyrouter/src/node.h
@@ -1,3 +1,6 @@
+#ifndef NODE_H_
+#define NODE_H_
+
 #define ADDRESS 0
 
 typedef struct {
@@ -5,3 +8,5 @@ typedef struct {
 	uint8_t** LUT; // 1024 x 4
 	uint16_t myAddress;
 } node_t;
+
+#endif
\ No newline at end of file
diff --git a/embedded/atsams70-tinyrouter/atsams70-tinyrouter/src/packet.c b/embedded/atsams70-tinyrouter/atsams70-tinyrouter/src/packet.c
index baf205b..b1bdda1 100644
--- a/embedded/atsams70-tinyrouter/atsams70-tinyrouter/src/packet.c
+++ b/embedded/atsams70-tinyrouter/atsams70-tinyrouter/src/packet.c
@@ -10,6 +10,7 @@
 packet_t packet_new(void){
 	packet_t packet;
 	packet.counter = 0;
+	packet.size = 255;
 	
 	return packet;
 }
diff --git a/embedded/atsams70-tinyrouter/atsams70-tinyrouter/src/packet_handling.c b/embedded/atsams70-tinyrouter/atsams70-tinyrouter/src/packet_handling.c
index e67e246..0a22465 100644
--- a/embedded/atsams70-tinyrouter/atsams70-tinyrouter/src/packet_handling.c
+++ b/embedded/atsams70-tinyrouter/atsams70-tinyrouter/src/packet_handling.c
@@ -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;
   }
 
@@ -134,8 +134,3 @@ void handle_packet(node_t* n, packet_t* p, uint8_t port) {
       break;
   }
 }
-
-int main() {
-
-  return 0;
-}
diff --git a/embedded/atsams70-tinyrouter/atsams70-tinyrouter/src/packet_handling.h b/embedded/atsams70-tinyrouter/atsams70-tinyrouter/src/packet_handling.h
index b0cb2ec..993837a 100644
--- a/embedded/atsams70-tinyrouter/atsams70-tinyrouter/src/packet_handling.h
+++ b/embedded/atsams70-tinyrouter/atsams70-tinyrouter/src/packet_handling.h
@@ -9,7 +9,7 @@
 #ifndef PACKET_HANDLING_H_
 #define PACKET_HANDLING_H_
 
-
+#include "node.h"
 
 int parse_type(packet_t* p);
 
diff --git a/embedded/atsams70-tinyrouter/atsams70-tinyrouter/src/tinyport.c b/embedded/atsams70-tinyrouter/atsams70-tinyrouter/src/tinyport.c
index 1138af4..8140a7b 100644
--- a/embedded/atsams70-tinyrouter/atsams70-tinyrouter/src/tinyport.c
+++ b/embedded/atsams70-tinyrouter/atsams70-tinyrouter/src/tinyport.c
@@ -97,6 +97,7 @@ void tp_packetparser(tinyport_t *tp){
 				if(tp->packet.counter >= tp->packet.size){ // 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);
 				} else if(tp->packet.counter == 6){ 
 					tp->packet.size = data; // 7th byte in packet structure is size
 				}
diff --git a/js/serialserver.js b/js/serialserver.js
index 0bef22c..d6812ff 100644
--- a/js/serialserver.js
+++ b/js/serialserver.js
@@ -34,14 +34,17 @@ wss.on('connection',function(ws) {
    //
    // check address
    //
+   /*
    if (ws._socket.remoteAddress != client_address) {
       console.log("connection rejected from "+ws._socket.remoteAddress)
       ws.send('socket closed')
       ws.close()
       }
+
    else {
       console.log("connection accepted from "+ws._socket.remoteAddress)
       }
+   */
    //
    // handle messages
    //
diff --git a/js/serialterminal.js b/js/serialterminal.js
new file mode 100644
index 0000000..769854b
--- /dev/null
+++ b/js/serialterminal.js
@@ -0,0 +1,70 @@
+
+var debug = true;
+
+//----------------------------------------- readline
+// command-line / terminal inputs are handled
+// just as inputs from web terminal
+// communications are kept human-friendly at network layer
+// at some speed cost, but very development friendly
+
+const readline = require('readline');
+
+const rl = readline.createInterface({
+	input: process.stdin,
+	output: process.stdout
+});
+
+rl.on('line', parseLineIn);
+
+var buf = Buffer.from([255,8,8,8,8,8,8,10,11])
+
+function parseLineIn(data) {
+	if (debug) {
+		console.log("rl: parseLineIn: " + data);
+	}
+	if(data == 'packet'){
+		console.log('packet out !');
+		data_out(buf);
+	} else {
+		data_out(data);
+	}	
+}
+
+//----------------------------------------- readline
+
+var SerialPort = require('serialport');
+
+var ByteLength = SerialPort.parsers.ByteLength;
+
+var port = new SerialPort('COM15', {
+	baudRate: 115200,
+	dataBits: 8,
+	parity: 'none',
+	flowControl: false,
+});
+
+var parser = port.pipe(new ByteLength({length: 1}));
+
+parser.on('data', data_in);
+
+function data_in(data){
+	console.log(data[0]);
+}
+
+function data_out(data){
+	port.write(data, function(err){
+		if(err) {
+			return console.log('Error on write: ', err.message);
+		}
+	});
+}
+
+port.on('error', function(err){
+	console.log('Error: ', err.message);
+});
+
+/*
+port.on('readable', function(){
+	console.log('Data: ', port.read());
+});
+*/
\ No newline at end of file
-- 
GitLab