altos: Implement remote launch protocol
[fw/altos] / src / cc1111 / ao_packet_master.c
index b0fdf5a8804288386651c070ba6f5be8f7f703fc..0d0be30ea2faa5f02e2e320a99cf7224f9ff9068 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) {
        ao_packet_master_time = ao_time();
        ao_packet_master_delay = AO_PACKET_MASTER_DELAY_SHORT;
        while (ao_packet_enable) {
+               uint8_t r;
                memcpy(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);
                memcpy(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;
                        /* 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_packet_master_sleeping = 1;
                        ao_alarm(ao_packet_master_delay);
                        ao_sleep(&ao_packet_master_sleeping);
+                       ao_clear_alarm();
                        ao_packet_master_sleeping = 0;
                }
        }
                        ao_packet_master_sleeping = 0;
                }
        }