diff options
Diffstat (limited to 'src/ao_packet.c')
-rw-r--r-- | src/ao_packet.c | 16 |
1 files changed, 6 insertions, 10 deletions
diff --git a/src/ao_packet.c b/src/ao_packet.c index 3ce7e9ab..98fdcb90 100644 --- a/src/ao_packet.c +++ b/src/ao_packet.c @@ -33,8 +33,9 @@ void ao_packet_send(void) { ao_led_on(AO_LED_RED); - ao_config_get(); - ao_mutex_get(&ao_radio_mutex); + ao_radio_get(); + + /* If any tx data is pending then copy it into the tx packet */ if (ao_packet_tx_used && ao_tx_packet.len == 0) { memcpy(&ao_tx_packet.d, tx_data, ao_packet_tx_used); ao_tx_packet.len = ao_packet_tx_used; @@ -42,9 +43,7 @@ ao_packet_send(void) ao_packet_tx_used = 0; ao_wakeup(&tx_data); } - ao_radio_idle(); ao_radio_done = 0; - RF_CHANNR = ao_config.radio_channel; ao_dma_set_transfer(ao_radio_dma, &ao_tx_packet, &RFDXADDR, @@ -59,7 +58,7 @@ ao_packet_send(void) RFST = RFST_STX; __critical while (!ao_radio_done) ao_sleep(&ao_radio_done); - ao_mutex_put(&ao_radio_mutex); + ao_radio_put(); ao_led_off(AO_LED_RED); } @@ -69,10 +68,7 @@ ao_packet_recv(void) uint8_t dma_done; ao_led_on(AO_LED_GREEN); - ao_config_get(); - ao_mutex_get(&ao_radio_mutex); - ao_radio_idle(); - RF_CHANNR = ao_config.radio_channel; + ao_radio_get(); ao_dma_set_transfer(ao_radio_dma, &RFDXADDR, &ao_rx_packet, @@ -89,7 +85,7 @@ ao_packet_recv(void) if (ao_sleep(&ao_radio_dma_done) != 0) ao_radio_abort(); dma_done = ao_radio_dma_done; - ao_mutex_put(&ao_radio_mutex); + ao_radio_put(); ao_led_off(AO_LED_GREEN); if (dma_done & AO_DMA_DONE) { |