summaryrefslogtreecommitdiff
path: root/src/cc1111/ao_radio.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/cc1111/ao_radio.c')
-rw-r--r--src/cc1111/ao_radio.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/cc1111/ao_radio.c b/src/cc1111/ao_radio.c
index cb2c2fdd..07b0d1b5 100644
--- a/src/cc1111/ao_radio.c
+++ b/src/cc1111/ao_radio.c
@@ -322,7 +322,7 @@ ao_radio_send(__xdata void *packet, uint8_t size) __reentrant
}
uint8_t
-ao_radio_recv(__xdata void *packet, uint8_t size) __reentrant
+ao_radio_recv(__xdata void *packet, uint8_t size, uint8_t timeout) __reentrant
{
ao_radio_abort = 0;
ao_radio_get(size - 2);
@@ -342,9 +342,13 @@ ao_radio_recv(__xdata void *packet, uint8_t size) __reentrant
/* Wait for DMA to be done, for the radio receive process to
* get aborted or for a receive timeout to fire
*/
+ if (timeout)
+ ao_alarm(timeout);
__critical while (!ao_radio_dma_done && !ao_radio_abort)
if (ao_sleep(&ao_radio_dma_done))
break;
+ if (timeout)
+ ao_clear_alarm();
/* If recv was aborted, clean up by stopping the DMA engine
* and idling the radio