altos: Add support for UART0 in async mode
[fw/altos] / src / cc1111 / ao_packet_master.c
index b0fdf5a8804288386651c070ba6f5be8f7f703fc..66f94288fabd5cd6a0888907344f6a58c2ca1bf2 100644 (file)
@@ -80,13 +80,16 @@ ao_packet_master(void)
        ao_packet_master_time = ao_time();
        ao_packet_master_delay = AO_PACKET_MASTER_DELAY_SHORT;
        while (ao_packet_enable) {
-               memcpy(ao_tx_packet.callsign, ao_config.callsign, AO_MAX_CALLSIGN);
+               uint8_t r;
+               ao_xmemcpy(ao_tx_packet.callsign, ao_config.callsign, AO_MAX_CALLSIGN);
                ao_packet_send();
                if (ao_tx_packet.len)
                        ao_packet_master_busy();
                ao_packet_master_check_busy();
                ao_alarm(ao_packet_master_delay);
-               if (ao_packet_recv()) {
+               r = ao_packet_recv();
+               ao_clear_alarm();
+               if (r) {
                        /* if we can transmit data, do so */
                        if (ao_packet_tx_used && ao_tx_packet.len == 0)
                                continue;
@@ -95,6 +98,7 @@ ao_packet_master(void)
                        ao_packet_master_sleeping = 1;
                        ao_alarm(ao_packet_master_delay);
                        ao_sleep(&ao_packet_master_sleeping);
+                       ao_clear_alarm();
                        ao_packet_master_sleeping = 0;
                }
        }
@@ -110,7 +114,7 @@ ao_packet_forward(void) __reentrant
 
        flush();
 #if HAS_MONITOR
-       ao_set_monitor(0);
+       ao_monitor_disable();
 #endif
        ao_add_task(&ao_packet_task, ao_packet_master, "master");
        ao_add_task(&ao_packet_echo_task, ao_packet_echo, "echo");
@@ -128,6 +132,9 @@ ao_packet_forward(void) __reentrant
                ao_wakeup(&ao_stdin_ready);
                ao_delay(AO_MS_TO_TICKS(10));
        }
+#if HAS_MONITOR
+       ao_monitor_enable();
+#endif
 }