From: Keith Packard Date: Sat, 30 Mar 2013 08:31:12 +0000 (-0700) Subject: altos: Lock cc115l radio mutex when using global radio values X-Git-Tag: altosdroid_v1.2-1~63 X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=commitdiff_plain;h=7455a892e8bf5402e7ff2c4bd2ddad05dfe76638 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 --- 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