diff options
author | Anthony Towns <aj@erisian.com.au> | 2010-09-05 20:49:34 +1000 |
---|---|---|
committer | Anthony Towns <aj@erisian.com.au> | 2010-09-05 20:49:34 +1000 |
commit | ddc83b4c401be965a9947782becf20cc8c54e6a2 (patch) | |
tree | 3fa313271f3c3e42ca9cc76f8cca1937067ee907 /src/ao_packet_master.c | |
parent | afea6c264c5ebf12f1d629bd4bc724da86d11b7a (diff) | |
parent | 3d49d5f69b41c27003dbc5ccf1899014bd13bd99 (diff) |
Merge branch 'master' of git://git.gag.com/fw/altos
Diffstat (limited to 'src/ao_packet_master.c')
-rw-r--r-- | src/ao_packet_master.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/src/ao_packet_master.c b/src/ao_packet_master.c index 72bb908a..641b49f4 100644 --- a/src/ao_packet_master.c +++ b/src/ao_packet_master.c @@ -29,6 +29,8 @@ ao_packet_getchar(void) __critical ao_wake_task(&ao_packet_task); ao_usb_flush(); ao_sleep(&ao_stdin_ready); + if (!ao_packet_enable) + break; } return c; } @@ -121,12 +123,15 @@ ao_packet_forward(void) __reentrant if (c == '\r') c = '\n'; ao_packet_putchar(c); } + + /* Wait for a second if there is any pending data */ + for (c = 0; (ao_packet_tx_used || ao_tx_packet.len) && c < 10; c++) + ao_delay(AO_MS_TO_TICKS(100)); ao_packet_enable = 0; - ao_radio_abort(); while (ao_packet_echo_task.wchan || ao_packet_task.wchan) { - ao_wake_task(&ao_packet_echo_task); - ao_wake_task(&ao_packet_task); - ao_yield(); + if (ao_packet_echo_task.wchan) + ao_wake_task(&ao_packet_echo_task); + ao_delay(AO_MS_TO_TICKS(10)); } } |