diff --git a/embedded/atsams70-usbcdc/.vs/atsams70-usbcdc/v14/.atsuo b/embedded/atsams70-usbcdc/.vs/atsams70-usbcdc/v14/.atsuo index b99671cfee44497af4e62ee3fe3c86b8fb4d9cdb..5ab1c8ce251f875c4591d926849a248579d4afb2 100644 Binary files a/embedded/atsams70-usbcdc/.vs/atsams70-usbcdc/v14/.atsuo and b/embedded/atsams70-usbcdc/.vs/atsams70-usbcdc/v14/.atsuo differ diff --git a/embedded/mkrouter-v04/.vs/mkrouter-v04/v14/.atsuo b/embedded/mkrouter-v04/.vs/mkrouter-v04/v14/.atsuo index a8662d2983c89c479af448fae747adfa9a1b875b..64e30274b17acc61f6deec3d279cf22bcc97bfd5 100644 Binary files a/embedded/mkrouter-v04/.vs/mkrouter-v04/v14/.atsuo and b/embedded/mkrouter-v04/.vs/mkrouter-v04/v14/.atsuo differ diff --git a/embedded/mkrouter-v04/mkrouter-v04/Debug/Makefile b/embedded/mkrouter-v04/mkrouter-v04/Debug/Makefile index 93993eb7c2a6e895648fee71357fd812e8e3a381..454072878bd440c508dd50aa1e874e338dcd8241 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 6c73410235af24d239c0c450878c643042a3dd9f..fc88d27034f1c8acb932162b8164731c7fa0a954 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 2224fe65cf2cca90068fa09fffc91924bf14a5f8..3ec3f73eef747a51841137e943cdcba31c516370 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 0000000000000000000000000000000000000000..f89cb7a59f448714d8f30978a98ae8111127d531 --- /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 0000000000000000000000000000000000000000..12673cbf54b348eb1518804ff1263e1e695ef9f5 --- /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 f0b81a0e4cf47ad673be045fc4305f5d63164125..4748bf302e33d681759d0a1748a119a58a228b37 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 57216e41f4b439b70c9124ab9343640565646b2f..912629e070d8e3eb19a63b32721de1ff772681d6 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 6cbd4c88ed47e8435e83aea610c67426b56a6468..e0cc5868b99e2c555547f134d73deedafa72d024 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 7cfc83b2e607ae14c436bf0dce2ac966902b5806..324a3419a33cde46e5795cacfca8df0ea1a3c144 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); } }