From a0001db1bf251d02930c61a9688b5a264931f640 Mon Sep 17 00:00:00 2001 From: Jake Read <jake.read@cba.mit.edu> Date: Thu, 7 Dec 2017 20:58:59 -0500 Subject: [PATCH] non-blocking put --- .gitignore | 1 + .../Debug/atsams70-tinyrouter.bin | Bin 8664 -> 0 bytes .../atsams70-tinyrouter/src/main.c | 36 ++++-------------- .../atsams70-tinyrouter/src/tinyport.c | 17 +++++---- js/serialterminal.js | 3 +- 5 files changed, 19 insertions(+), 38 deletions(-) delete mode 100644 embedded/atsams70-tinyrouter/atsams70-tinyrouter/Debug/atsams70-tinyrouter.bin diff --git a/.gitignore b/.gitignore index fe57583..61f56c7 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ jake/ **.elf **.hex +**.bin **.lss **.map **.srec diff --git a/embedded/atsams70-tinyrouter/atsams70-tinyrouter/Debug/atsams70-tinyrouter.bin b/embedded/atsams70-tinyrouter/atsams70-tinyrouter/Debug/atsams70-tinyrouter.bin deleted file mode 100644 index 113528691ddfc0ecc936cfd83635e1e05bc3400b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8664 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 Vhl2tL|NsC0KLZ03Lj#|K0svT>6pR1> diff --git a/embedded/atsams70-tinyrouter/atsams70-tinyrouter/src/main.c b/embedded/atsams70-tinyrouter/atsams70-tinyrouter/src/main.c index 061f3cb..bd0add5 100644 --- a/embedded/atsams70-tinyrouter/atsams70-tinyrouter/src/main.c +++ b/embedded/atsams70-tinyrouter/atsams70-tinyrouter/src/main.c @@ -203,8 +203,7 @@ void setallstatus(void){ pin_set(&p4lb); } -int main (void) -{ +int main (void){ /* node_t* n = (node_t*)malloc(sizeof(node_t)); n->myAddress = ADDRESS; @@ -266,51 +265,30 @@ int main (void) packetlooper = ports[i].packet; packet_clean(&ports[i].packet); // reset packet states ports[i].haspacket = TP_NO_PACKET; - - for(int c = 0; c <= packetlooper.size; c ++){ // blocking echo - tp_putchar(&ports[i], packetlooper.raw[c]); - } + + tp_putdata(&ports[i], packetlooper.raw, packetlooper.size + 1); // non-blocking put 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 - // pull a packet from the buffer, - // handle_packet() - /* - if(!rb_empty(ports[i].rbrx)){ - tp_putchar(&ports[i], rb_get(ports[i].rbrx)); } - */ } + } // end while + + delay_cycles(1); // one clock tick to relax interrupt scheduler - // loop over packet buffer and handle packets +} // end main - delay_cycles(1); // one clock tick to relax interrupt scheduler - //pin_set(&stlb); - } -} void UART2_Handler(){ if(UART2->UART_SR & UART_SR_RXRDY){ tp_rxhandler(&tp1); } - /* if(UART2->UART_SR & UART_SR_TXRDY){ tp_txhandler(&tp1); } - */ } void UART0_Handler(){ diff --git a/embedded/atsams70-tinyrouter/atsams70-tinyrouter/src/tinyport.c b/embedded/atsams70-tinyrouter/atsams70-tinyrouter/src/tinyport.c index 8140a7b..fbf2ae9 100644 --- a/embedded/atsams70-tinyrouter/atsams70-tinyrouter/src/tinyport.c +++ b/embedded/atsams70-tinyrouter/atsams70-tinyrouter/src/tinyport.c @@ -59,7 +59,7 @@ void tp_putchar(tinyport_t *tp, uint8_t data){ int tp_putdata(tinyport_t *tp, uint8_t *data, uint8_t size){ // drops block of mems into ringbuffer (need to update rb for this) rb_putdata(tp->rbtx, data, size); - tp_txout(tp); + tp->uart->UART_IER |= UART_IER_TXRDY; } void tp_rxhandler(tinyport_t *tp){ @@ -112,14 +112,15 @@ void tp_packetparser(tinyport_t *tp){ } // end while } // end packetparser -void tp_txout(tinyport_t *tp){ - // set txready interrupt on - // handler puts chars on ports until no chars left -} - void tp_txhandler(tinyport_t *tp){ - while(!(tp->uart->UART_SR & UART_SR_TXRDY)); // blocking - tp->uart->UART_THR = rb_get(tp->rbtx); + if(!rb_empty(tp->rbtx)){ + pin_clear(tp->stlr); + 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); + } + //while(!(tp->uart->UART_SR & UART_SR_TXRDY)); // blocking } void tp_testlights(tinyport_t *tp){ diff --git a/js/serialterminal.js b/js/serialterminal.js index 769854b..dc3f520 100644 --- a/js/serialterminal.js +++ b/js/serialterminal.js @@ -16,7 +16,8 @@ const rl = readline.createInterface({ rl.on('line', parseLineIn); -var buf = Buffer.from([255,8,8,8,8,8,8,10,11]) +// [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]) function parseLineIn(data) { if (debug) { -- GitLab