From 7455a892e8bf5402e7ff2c4bd2ddad05dfe76638 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Sat, 30 Mar 2013 01:31:12 -0700 Subject: [PATCH] altos: Lock cc115l radio mutex when using global radio values This moves the locking up above the global state variable uses so that multiple radio users (as if we had any) won't collide. Signed-off-by: Keith Packard --- src/drivers/ao_cc115l.c | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/src/drivers/ao_cc115l.c b/src/drivers/ao_cc115l.c index 6da1a678..0e019bc0 100644 --- a/src/drivers/ao_cc115l.c +++ b/src/drivers/ao_cc115l.c @@ -516,7 +516,7 @@ ao_radio_get(void) } static void -ao_radio_send_lots(ao_radio_fill_func fill, uint8_t mode); +_ao_radio_send_lots(ao_radio_fill_func fill, uint8_t mode); #define ao_radio_put() ao_mutex_put(&ao_radio_mutex) @@ -569,10 +569,12 @@ ao_radio_tone_fill(uint8_t *buf, int16_t len) static void ao_radio_tone_run(struct ao_radio_tone *tones, int ntones) { + ao_radio_get(); ao_radio_tone = tones; ao_radio_tone_current = 0; ao_radio_tone_offset = 0; - ao_radio_send_lots(ao_radio_tone_fill, AO_RADIO_MODE_RDF); + _ao_radio_send_lots(ao_radio_tone_fill, AO_RADIO_MODE_RDF); + ao_radio_put(); } void @@ -718,15 +720,19 @@ ao_radio_send_fill(uint8_t *buf, int16_t len) void ao_radio_send(const void *d, uint8_t size) { + int i; + + ao_radio_get(); ao_radio_send_len = ao_fec_encode(d, size, tx_data); ao_radio_send_buf = tx_data; - ao_radio_send_lots(ao_radio_send_fill, AO_RADIO_MODE_PACKET_TX); + _ao_radio_send_lots(ao_radio_send_fill, AO_RADIO_MODE_PACKET_TX); + ao_radio_put(); } #define AO_RADIO_LOTS 64 static void -ao_radio_send_lots(ao_radio_fill_func fill, uint8_t mode) +_ao_radio_send_lots(ao_radio_fill_func fill, uint8_t mode) { uint8_t buf[AO_RADIO_LOTS], *b; int cnt; @@ -735,7 +741,6 @@ ao_radio_send_lots(ao_radio_fill_func fill, uint8_t mode) uint8_t started = 0; uint8_t fifo_space; - ao_radio_get(); fifo_space = CC115L_FIFO_SIZE; ao_radio_done = 0; ao_radio_fifo = 0; @@ -795,13 +800,14 @@ ao_radio_send_lots(ao_radio_fill_func fill, uint8_t mode) ao_radio_idle(); ao_radio_wait_done(); ao_radio_pa_off(); - ao_radio_put(); } void ao_radio_send_aprs(ao_radio_fill_func fill) { - ao_radio_send_lots(fill, AO_RADIO_MODE_APRS); + ao_radio_get(); + _ao_radio_send_lots(fill, AO_RADIO_MODE_APRS); + ao_radio_put(); } #if CC115L_DEBUG -- 2.30.2