summaryrefslogtreecommitdiff
path: root/src/ao_packet_master.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/ao_packet_master.c')
-rw-r--r--src/ao_packet_master.c13
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));
}
}