From 8c063d60a5248f48f4244f077eb3a7f84de912a5 Mon Sep 17 00:00:00 2001 From: Jake <jake.read@cba.mit.edu> Date: Mon, 12 Mar 2018 12:37:38 -0400 Subject: [PATCH] update with packet handling architecture --- .../.vs/atsams70-usbcdc/v14/.atsuo | Bin 17920 -> 47104 bytes .../mkrouter-v04/.vs/mkrouter-v04/v14/.atsuo | Bin 85504 -> 85504 bytes .../mkrouter-v04/mkrouter-v04/Debug/Makefile | 7 +++ .../mkrouter-v04/Debug/makedep.mk | 2 + .../mkrouter-v04/mkrouter-v04.cproj | 6 +++ .../mkrouter-v04/src/apahandler.c | 28 ++++++++++++ .../mkrouter-v04/src/apahandler.h | 16 +++++++ .../mkrouter-v04/mkrouter-v04/src/apaport.c | 42 +++++++----------- .../mkrouter-v04/mkrouter-v04/src/apaport.h | 1 + .../mkrouter-v04/mkrouter-v04/src/hardware.h | 14 +++--- embedded/mkrouter-v04/mkrouter-v04/src/main.c | 34 +++++++++----- 11 files changed, 107 insertions(+), 43 deletions(-) create mode 100644 embedded/mkrouter-v04/mkrouter-v04/src/apahandler.c create mode 100644 embedded/mkrouter-v04/mkrouter-v04/src/apahandler.h diff --git a/embedded/atsams70-usbcdc/.vs/atsams70-usbcdc/v14/.atsuo b/embedded/atsams70-usbcdc/.vs/atsams70-usbcdc/v14/.atsuo index b99671cfee44497af4e62ee3fe3c86b8fb4d9cdb..5ab1c8ce251f875c4591d926849a248579d4afb2 100644 GIT binary patch literal 47104 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 aeV7J@g#*3Q8^b{$0el$!=yOufqXz)^Ur}TL delta 864 zcmZqpz|_#gIKe=c0R{vZ7}yvX7#JBC82<hL{~sjGIN6a!cw@pFMn>kz3uP2|A5NSR zv+Xh?A4raOaut*3<ipH{jK-6{GWm0eGcYiSF)%PpPEZq>oWP#K0aC>c6L`QR!e+$4 zz`(&U`4_WN2nPcL11AFm0~Z4W14s=I0|Nsu)M9=H1_l8J1_nU}1_mJp1_ogU1_lwR z9LNHYMG_1Q43Z2C3{ngX4AKk?3^E{l3b;fV|7{GcW}L+2!^jAB@PwRcAP2KDFfceU zf*j1r`2YX^|4bm|V0XGpO#Z>-J^3(`;ba3Q7REc11O2@x9}%_@1t|kzP*D8+|NlRT z{<m3B<u&6ZE|JYVDsLDUg)lBYpv5@3A)IBR0n20#t_BXUqW}N@PoBV~A_?N?L){Hx z!|}#IW5!856->(+Cs*-!ae(~I4s*~0Z;8o2cmh~Jo(G5I111qh!^x$*eyofvAVo21 z5|bY=iLe@g0(0_Dd9TTbgX||aDL8R}!V(k~Fl}sl3=9lm43mE;cyWNj6BLeMxrD%E zPDW4=fMNhF0*W0K1_p*WrpdpAy(S-FHeghqTq+Vg*~7zPlBhE$BPd~j0uih_!FRzV zQH9A09?FxQMQtZHc(`zgGB7ZJ;t(wVKvZFprwhoG$t9i_CcAjpOm2{IVF9JI$zbPu zWw3xE4y-sqHiZKe%b*wq3q0^vm=xr~0SbFi41>iIf*ymTs3bUm1C$ixKp_E&zXwbr zlN+K~7&#{YboGKLaXZh+2ucp1BnHv!t}r>m-vtz_i$d7>e4$B>5tP*BCQnS1V`gLk z(~PW>ucbU?1hXesr>)!Uklw%~6$VX$Amt2<j0_WwEx-9{N3H_{<K%=|16Gi)nI|_2 V8%~<lGPy<AX7d3p2gXHnqyT8V`iB4j diff --git a/embedded/mkrouter-v04/.vs/mkrouter-v04/v14/.atsuo b/embedded/mkrouter-v04/.vs/mkrouter-v04/v14/.atsuo index a8662d2983c89c479af448fae747adfa9a1b875b..64e30274b17acc61f6deec3d279cf22bcc97bfd5 100644 GIT binary patch delta 172 zcmZpe!`d*1b%Md<58j*-0t^gn3=9m63=9na{{R2a0A-7A43uVKE8zGeCbVmE5!=Pd z&dhIl|NsC0e*psngBSw?gWSYG;mH9kEF6FT|Nk$}z`(FMhDC>wk#}<^>w3=37ThP8 zHVIX*GG3cpDPBGKi?GgS1&IgDj2kvHO8sY?%sAI*`Z^9q_Q{rV?<Z$y=}j!)m>j3N ZXpsWXA{nMl8W~K@83x-k3>as~0sv}>ICKC2 delta 270 zcmZpe!`d*1b%KE+69W_oFfgz%FfcGOFfjc4|NlQol$n8nL1<&3G!yfOIWm*;*;*O> zHh*QZX5?MKz`*eL|NsA@3=9l%69a`O2e7bkh%+!S{Qv*||K=DL9mdHWoE4kcEI0)~ zW(6=XFa$C%Fa$9$Fl_eVH{h6DA?!W*u(%<sKLZ29z0E(x*;y9pFimEhYczcw2P6At zOBHv<$qgC`lP`EEOfHUhSfs!+NxMQggJIA6iUl`b8#cGBeXKw6kmXN?iGh-vmuSQ= zPE3r@oB?&fOa=yqSquyevl$o|<}ffY%w=F;m<RP1$brHe1M3+lH~MEZXBceHFkqY^ F3jk#~S?vG- diff --git a/embedded/mkrouter-v04/mkrouter-v04/Debug/Makefile b/embedded/mkrouter-v04/mkrouter-v04/Debug/Makefile index 93993eb..4540728 100644 --- a/embedded/mkrouter-v04/mkrouter-v04/Debug/Makefile +++ b/embedded/mkrouter-v04/mkrouter-v04/Debug/Makefile @@ -78,6 +78,7 @@ SUBDIRS := \ # Add inputs and outputs from these tool invocations to the build variables C_SRCS += \ +../src/apahandler.c \ ../src/apaport.c \ ../src/pin.c \ ../src/ringbuffer.c \ @@ -101,6 +102,7 @@ ASM_SRCS += OBJS += \ +src/apahandler.o \ src/apaport.o \ src/pin.o \ src/ringbuffer.o \ @@ -117,6 +119,7 @@ src/ASF/sam/utils/syscalls/gcc/syscalls.o \ src/main.o OBJS_AS_ARGS += \ +src/apahandler.o \ src/apaport.o \ src/pin.o \ src/ringbuffer.o \ @@ -133,6 +136,7 @@ src/ASF/sam/utils/syscalls/gcc/syscalls.o \ src/main.o C_DEPS += \ +src/apahandler.d \ src/apaport.d \ src/pin.d \ src/ringbuffer.d \ @@ -149,6 +153,7 @@ src/ASF/sam/utils/syscalls/gcc/syscalls.d \ src/main.d C_DEPS_AS_ARGS += \ +src/apahandler.d \ src/apaport.d \ src/pin.d \ src/ringbuffer.d \ @@ -205,6 +210,8 @@ LINKER_SCRIPT_DEP+= \ + + diff --git a/embedded/mkrouter-v04/mkrouter-v04/Debug/makedep.mk b/embedded/mkrouter-v04/mkrouter-v04/Debug/makedep.mk index 6c73410..fc88d27 100644 --- a/embedded/mkrouter-v04/mkrouter-v04/Debug/makedep.mk +++ b/embedded/mkrouter-v04/mkrouter-v04/Debug/makedep.mk @@ -2,6 +2,8 @@ # Automatically-generated file. Do not edit or delete the file ################################################################################ +src\apahandler.c + src\apaport.c src\pin.c diff --git a/embedded/mkrouter-v04/mkrouter-v04/mkrouter-v04.cproj b/embedded/mkrouter-v04/mkrouter-v04/mkrouter-v04.cproj index 2224fe6..3ec3f73 100644 --- a/embedded/mkrouter-v04/mkrouter-v04/mkrouter-v04.cproj +++ b/embedded/mkrouter-v04/mkrouter-v04/mkrouter-v04.cproj @@ -475,6 +475,12 @@ <Folder Include="src\config\" /> </ItemGroup> <ItemGroup> + <Compile Include="src\apahandler.c"> + <SubType>compile</SubType> + </Compile> + <Compile Include="src\apahandler.h"> + <SubType>compile</SubType> + </Compile> <Compile Include="src\apaport.c"> <SubType>compile</SubType> </Compile> diff --git a/embedded/mkrouter-v04/mkrouter-v04/src/apahandler.c b/embedded/mkrouter-v04/mkrouter-v04/src/apahandler.c new file mode 100644 index 0000000..f89cb7a --- /dev/null +++ b/embedded/mkrouter-v04/mkrouter-v04/src/apahandler.c @@ -0,0 +1,28 @@ +/* + * apahandler.c + * + * Created: 3/12/2018 11:55:30 AM + * Author: Jake + */ + +#include "hardware.h" +#include "apahandler.h" + +void apa_handle_packet(uint8_t *packet, uint8_t length){ + // dirty debug reply + uart_sendchars_buffered(&up0, packet, length); + // through packet + for(int i = 0; i < length; i ++){ + if(packet[i] == APA_END_ADDR_DELIMITER){ + // data begins + // check we have data after addr delimiter + if(i + 1 < length){ + int thelight = packet[i+1] % 10; + pin_toggle(lights[thelight]); + break; + } else { + break; + } + } + } +} \ No newline at end of file diff --git a/embedded/mkrouter-v04/mkrouter-v04/src/apahandler.h b/embedded/mkrouter-v04/mkrouter-v04/src/apahandler.h new file mode 100644 index 0000000..12673cb --- /dev/null +++ b/embedded/mkrouter-v04/mkrouter-v04/src/apahandler.h @@ -0,0 +1,16 @@ +/* + * apahandler.h + * + * Created: 3/12/2018 11:55:40 AM + * Author: Jake + */ + + +#ifndef APAHANDLER_H_ +#define APAHANDLER_H_ + +#include <asf.h> + +void apa_handle_packet(uint8_t *packet, uint8_t length); + +#endif /* APAHANDLER_H_ */ \ No newline at end of file diff --git a/embedded/mkrouter-v04/mkrouter-v04/src/apaport.c b/embedded/mkrouter-v04/mkrouter-v04/src/apaport.c index f0b81a0..4748bf3 100644 --- a/embedded/mkrouter-v04/mkrouter-v04/src/apaport.c +++ b/embedded/mkrouter-v04/mkrouter-v04/src/apaport.c @@ -31,40 +31,36 @@ void apaport_reset(apaport_t *apap){ void apaport_scan(apaport_t *apap, uint32_t maxpackets){ // scan through for completely received packets while(apap->packets_ready <= maxpackets){ + // check that we have bytes to read out of the buffer if(rb_empty(apap->uart->rbrx)){ pin_set(apap->stlr); break; } - // pull bytes out of buffer and segment into packets - pin_clear(apap->stlg); - delay_ms(1); - pin_set(apap->stlg); - delay_ms(1); - + // pull bytes out of buffer into the packet structure apap->packets[apap->packet_num][apap->packet_position] = rb_get(apap->uart->rbrx); apap->packet_position ++; - + // now segment, point to them if(apap->packet_position >= apap->packets[apap->packet_num][0]){ // length is 1st byte, like array[n] not array[n-1] // now volley for next pass + // packet_num is index of head of packet buffer (just an array) apap->packet_num = (apap->packet_num + 1) % APAPORT_NUM_STATIC_PACKETS; // inc. and loop + // packets_ready is the number of ready-state packets in that buffer (array) apap->packets_ready ++; + // the position, in bytes, where we are currently operating. + // at this point, we have come to the end, so we're resetting counter for the next apap->packet_position = 0; } - } // end 1st scan for packets, now we know we have apaport->packet_num packets completely received - - // handle packets + } + // end 1st scan for packets, now we know we have apaport->packet_num packets completely received + // now we handle those packets while(apap->packets_ready > 0){ + // the particular packet index uint32_t p = (apap->packet_num + APAPORT_NUM_STATIC_PACKETS - apap->packets_ready) % APAPORT_NUM_STATIC_PACKETS; - // handle these! - delay_ms(50); - pin_clear(apap->stlg); - delay_ms(50); - pin_set(apap->stlg); // now to handle + // [p][0] is length of packet if(apap->packets[p][1] == APA_ADDR_POINTER){ - // packet is ours! mark and somehow get to level up? - // application_apa_handler_t takes it? + apa_handle_packet(apap->packets[p], apap->packets[p][0]); } else if(apap->packets[p][1] == APA_ADDR_FLOOD){ // loop through bytes to find pointer and increment apapacket_increment_pointer(apap->packets[p], apap->portnum); @@ -91,14 +87,13 @@ void apaport_scan(apaport_t *apap, uint32_t maxpackets){ // double / triple check pointer to pointer uart_sendchars_buffered(apap->uarts[port], apap->packets[p], apap->packets[p][0]); } - // debug reply - uart_sendchars_buffered(apap->uart, apap->packets[p], apap->packets[p][0]); + // debug reply (at the moment, reply is handled in apa_handle_packet + // uart_sendchars_buffered(apap->uart, apap->packets[p], apap->packets[p][0]); apap->packets_ready --; } } void apapacket_increment_pointer(uint8_t *packet, uint8_t portnum){ - // implement after debug for(int i = 2; i < packet[0]; i ++){ // loop through bytes to find pointer and increment if(packet[i] == APA_ADDR_POINTER){ @@ -107,18 +102,13 @@ void apapacket_increment_pointer(uint8_t *packet, uint8_t portnum){ break; // we can finish scan now, not looping senselessly through rest of packet } } - /* - if(apap->packets[p][i] == APA_ADDR_POINTER){ - apap->packets[p][i-1] = APA_ADDR_POINTER; // increment pointer forwards - apap->packets[p][i] = apap->portnum; // port received on is this one - } - */ } // UNIT TESTS: /* flood packets multiple receptions? handle in app? + packets no end addr bar delimiter, packets no pointer, general white noise packets varying length packets wrong length ? very hard to catch w/o hella state ... timeout? packets no end addr delimiter? diff --git a/embedded/mkrouter-v04/mkrouter-v04/src/apaport.h b/embedded/mkrouter-v04/mkrouter-v04/src/apaport.h index 57216e4..912629e 100644 --- a/embedded/mkrouter-v04/mkrouter-v04/src/apaport.h +++ b/embedded/mkrouter-v04/mkrouter-v04/src/apaport.h @@ -10,6 +10,7 @@ #define APAPORT_H_ #include <asf.h> +#include "apahandler.h" #include "uartport.h" #include "pin.h" diff --git a/embedded/mkrouter-v04/mkrouter-v04/src/hardware.h b/embedded/mkrouter-v04/mkrouter-v04/src/hardware.h index 6cbd4c8..e0cc586 100644 --- a/embedded/mkrouter-v04/mkrouter-v04/src/hardware.h +++ b/embedded/mkrouter-v04/mkrouter-v04/src/hardware.h @@ -32,7 +32,10 @@ pin_t np4stlr; pin_t np4stlg; pin_t np4stlb; -pin_t *lights[] = {&np0stlr, &np0stlb, &np1stlr, &np1stlb, &np2stlr, &np2stlb, &np3stlr, &np3stlb, &np4stlr, &np4stlb}; +// array of ptrs to lights +// init in main.c +#define NUM_LIGHTS 12 +pin_t *lights[NUM_LIGHTS]; // ringbuffers ringbuffer_t up0rbrx; @@ -53,11 +56,12 @@ uartport_t up2; uartport_t up3; uartport_t up4; -// array of ptrs to uarts -uartport_t *ups[] = {&up0, &up1, &up2, &up3, &up4}; - -// apaports +// array of ptrs to uartports +// inits in main.c +#define NUM_UPS 5 +uartport_t *ups[NUM_UPS]; +// apaports apaport_t apap0; diff --git a/embedded/mkrouter-v04/mkrouter-v04/src/main.c b/embedded/mkrouter-v04/mkrouter-v04/src/main.c index 7cfc83b..324a341 100644 --- a/embedded/mkrouter-v04/mkrouter-v04/src/main.c +++ b/embedded/mkrouter-v04/mkrouter-v04/src/main.c @@ -123,6 +123,27 @@ void initports(void){ uart_init(&up4, 81, UART_IS_PERIPHERAL_C); } +void listsetup(void){ + // array of ptrs to lights + lights[0] = &np0stlr; + lights[1] = &np0stlb; + lights[2] = &np1stlr; + lights[3] = &np1stlb; + lights[4] = &np2stlr; + lights[5] = &np2stlb; + lights[6] = &np3stlr; + lights[7] = &np3stlb; + lights[8] = &np4stlr; + lights[9] = &np4stlb; + + // array of ptrs to uarts + ups[0] = &up0; + ups[1] = &up1; + ups[2] = &up2; + ups[3] = &up3; + ups[4] = &up4; +} + int main (void){ sysclk_init(); board_init(); @@ -130,26 +151,15 @@ int main (void){ setupinterrupts(); lightsetup(); initports(); + listsetup(); apaport_build(&apap0, 0, &up0, ups, 5, &np0stlr, &np0stlg, &np0stlb); - // does it use numports, or global? - apaport_reset(&apap0); while(1){ - //lightstoggle(); apaport_scan(&apap0, 2); pin_toggle(&np4stlg); - /* - uint8_t hello[] = {'h', 'e', 'l', 'l', 'o'}; - for(int i = 0; i < 5; i ++){ - if(!rb_empty(ups[i]->rbrx)){ - uart_sendchars_buffered(ups[i], hello, 5); - uart_sendchar_buffered(ups[i], rb_get(ups[i]->rbrx)); - } - } - */ delay_ms(75); } } -- GitLab