altos: Time out reading packet data from cc1120 after 100ms
authorKeith Packard <keithp@keithp.com>
Fri, 11 Jan 2013 05:27:32 +0000 (21:27 -0800)
committerKeith Packard <keithp@keithp.com>
Fri, 11 Jan 2013 05:44:18 +0000 (21:44 -0800)
Sometimes the radio will give a spurious wakeup indicating that a
preamble seems to have arrived, but no packet data will appear. In
this case, abandon the packet reception and go back to waiting for a
preamble again. This releases the SPI bus for other users and also
avoids missing packets.

Signed-off-by: Keith Packard <keithp@keithp.com>
src/drivers/ao_cc1120.c

index 63d2f95539dd49d5198541e109cffbf83809a632..35be54a46ffffa89e7e1b385d01d0b486c8e9a44 100644 (file)
@@ -862,6 +862,7 @@ ao_radio_rx_wait(void)
        do {
                if (ao_radio_mcu_wake)
                        ao_radio_check_marc_status();
+               ao_alarm(AO_MS_TO_TICKS(100));
                ao_arch_block_interrupts();
                rx_waiting = 1;
                while (rx_data_cur - rx_data_consumed < AO_FEC_DECODE_BLOCK &&
@@ -873,6 +874,7 @@ ao_radio_rx_wait(void)
                }
                rx_waiting = 0;
                ao_arch_release_interrupts();
+               ao_clear_alarm();
        } while (ao_radio_mcu_wake);
        if (ao_radio_abort)
                return 0;