summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2009-12-19 11:34:16 -0800
committerKeith Packard <keithp@keithp.com>2009-12-19 11:35:35 -0800
commit10d1bbcd9709a5eee8d50989215242b16feb7232 (patch)
tree7de1577d347a3bb7d58208d3a7b973c860b16264
parenta15abc1882a3bdd2c980eed169f3b80337528390 (diff)
Use ao_radio_get/ao_radio_put in packet code.
The ao_radio_get function both acquires the mutex *and* configures the radio channel and frequency. Failing to use this in the packet code would leave the radio frequency unconfigured. Signed-off-by: Keith Packard <keithp@keithp.com>
-rw-r--r--src/ao.h5
-rw-r--r--src/ao_packet.c16
-rw-r--r--src/ao_radio.c3
3 files changed, 12 insertions, 12 deletions
diff --git a/src/ao.h b/src/ao.h
index 39f7bea2..096a4d80 100644
--- a/src/ao.h
+++ b/src/ao.h
@@ -836,6 +836,11 @@ void
ao_radio_general_isr(void) interrupt 16;
void
+ao_radio_get(void);
+
+#define ao_radio_put() ao_mutex_put(&ao_radio_mutex)
+
+void
ao_radio_set_telemetry(void);
void
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) {
diff --git a/src/ao_radio.c b/src/ao_radio.c
index 4dea6dce..1a0cf4fa 100644
--- a/src/ao_radio.c
+++ b/src/ao_radio.c
@@ -324,7 +324,7 @@ ao_radio_idle(void)
}
}
-static void
+void
ao_radio_get(void)
{
ao_config_get();
@@ -336,7 +336,6 @@ ao_radio_get(void)
RF_FREQ0 = (uint8_t) (ao_config.radio_cal);
}
-#define ao_radio_put() ao_mutex_put(&ao_radio_mutex)
void
ao_radio_send(__xdata struct ao_telemetry *telemetry) __reentrant