Do more flushing in packet test code
authorKeith Packard <keithp@keithp.com>
Sat, 31 Oct 2009 06:53:03 +0000 (23:53 -0700)
committerKeith Packard <keithp@keithp.com>
Sat, 31 Oct 2009 06:53:03 +0000 (23:53 -0700)
src/ao_packet.c

index 620cd0014da5ac104feb94fad5603313c5485132..0dce326c271b56dff69abfa8e276f710836eb17e 100644 (file)
@@ -198,8 +198,10 @@ ao_packet_putchar(char c)
 char
 ao_packet_getchar(void) __critical
 {
 char
 ao_packet_getchar(void) __critical
 {
-       while (rx_used == rx_len && ao_packet_enable)
+       while (rx_used == rx_len && ao_packet_enable) {
+               flush();
                ao_sleep(&rx_data);
                ao_sleep(&rx_data);
+       }
 
        if (!ao_packet_enable)
                return 0;
 
        if (!ao_packet_enable)
                return 0;
@@ -213,8 +215,11 @@ ao_packet_echo(void) __reentrant
        uint8_t c;
        while (ao_packet_enable) {
                c = ao_packet_getchar();
        uint8_t c;
        while (ao_packet_enable) {
                c = ao_packet_getchar();
-               if (ao_packet_enable)
+               if (ao_packet_enable) {
                        putchar(c);
                        putchar(c);
+                       if (c == (uint8_t) '\n')
+                               flush();
+               }
        }
        ao_exit();
 }
        }
        ao_exit();
 }
@@ -233,18 +238,14 @@ ao_packet_forward(void) __reentrant
        else
                ao_add_task(&ao_packet_task, ao_packet_slave, "slave");
        ao_add_task(&ao_packet_echo_task, ao_packet_echo, "echo");
        else
                ao_add_task(&ao_packet_task, ao_packet_slave, "slave");
        ao_add_task(&ao_packet_echo_task, ao_packet_echo, "echo");
-       while ((c = getchar()) != '~') {
+       while ((c = getchar()) != '~')
                ao_packet_putchar(c);
                ao_packet_putchar(c);
-               if (c == '\n')
-                       ao_packet_flush();
-       }
        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_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);
        }
-#endif
 }
 
 __code struct ao_cmds ao_packet_cmds[] = {
 }
 
 __code struct ao_cmds ao_packet_cmds[] = {