altos: Switch drivers to ao_arch_block/release_interrupts
[fw/altos] / src / drivers / ao_cc1120.c
index 97a434d8975131338034ad1783c1e0e61bae5c7a..bad313ebaad23bdac7886812c48d3f51678ec7f6 100644 (file)
@@ -21,6 +21,9 @@
 #include <ao_fec.h>
 #include <ao_packet.h>
 
+#define AO_RADIO_MAX_RECV      sizeof(struct ao_packet)
+#define AO_RADIO_MAX_SEND      sizeof(struct ao_packet)
+
 uint8_t ao_radio_wake;
 uint8_t ao_radio_mutex;
 uint8_t ao_radio_abort;
@@ -466,10 +469,10 @@ ao_rdf_run(void)
 {
        ao_radio_start_tx();
 
-       cli();
+       ao_arch_block_interrupts();
        while (!ao_radio_wake && !ao_radio_abort)
                ao_sleep(&ao_radio_wake);
-       sei();
+       ao_arch_release_interrupts();
        if (!ao_radio_wake)
                ao_radio_idle();
        ao_radio_put();
@@ -515,7 +518,7 @@ ao_radio_rdf_abort(void)
 }
 
 static void
-ao_radio_test(void)
+ao_radio_test_cmd(void)
 {
        uint8_t mode = 2;
        uint8_t radio_on;
@@ -559,18 +562,19 @@ ao_radio_test(void)
        }
 }
 
+static uint8_t tx_data[(AO_RADIO_MAX_SEND + 4) * 2];
+
 void
 ao_radio_send(const void *d, uint8_t size)
 {
        uint8_t         marc_status;
-       static uint8_t  encode[256];
-       uint8_t         *e = encode;
+       uint8_t         *e = tx_data;
        uint8_t         encode_len;
        uint8_t         this_len;
        uint8_t         started = 0;
        uint8_t         fifo_space;
 
-       encode_len = ao_fec_encode(d, size, encode);
+       encode_len = ao_fec_encode(d, size, tx_data);
 
        ao_radio_get(encode_len);
 
@@ -599,10 +603,10 @@ ao_radio_send(const void *d, uint8_t size)
                        
                do {
                        ao_radio_wake = 0;
-                       cli();
+                       ao_arch_block_interrupts();
                        while (!ao_radio_wake)
                                ao_sleep(&ao_radio_wake);
-                       sei();
+                       ao_arch_release_interrupts();
                        if (!encode_len)
                                break;
                        fifo_space = ao_radio_tx_fifo_space();
@@ -611,8 +615,6 @@ ao_radio_send(const void *d, uint8_t size)
        ao_radio_put();
 }
 
-#define AO_RADIO_MAX_RECV      90
-
 static uint8_t rx_data[(AO_RADIO_MAX_RECV + 4) * 2 * 8];
 static uint16_t        rx_data_count;
 static uint16_t        rx_data_consumed;
@@ -658,14 +660,14 @@ ao_radio_rx_isr(void)
 static uint16_t
 ao_radio_rx_wait(void)
 {
-       cli();
+       ao_arch_block_interrupts();
        rx_waiting = 1;
        while (rx_data_cur - rx_data_consumed < AO_FEC_DECODE_BLOCK &&
               !ao_radio_abort) {
                ao_sleep(&ao_radio_wake);
        }
        rx_waiting = 0;
-       sei();
+       ao_arch_release_interrupts();
        if (ao_radio_abort)
                return 0;
        rx_data_consumed += AO_FEC_DECODE_BLOCK;
@@ -1008,7 +1010,7 @@ ao_radio_test_recv()
 #endif
 
 static const struct ao_cmds ao_radio_cmds[] = {
-       { ao_radio_test,        "C <1 start, 0 stop, none both>\0Radio carrier test" },
+       { ao_radio_test_cmd,    "C <1 start, 0 stop, none both>\0Radio carrier test" },
 #if CC1120_DEBUG
        { ao_radio_show,        "R\0Show CC1120 status" },
        { ao_radio_beep,        "b\0Emit an RDF beacon" },
@@ -1026,14 +1028,16 @@ ao_radio_init(void)
        ao_radio_configured = 0;
        ao_spi_init_cs (AO_CC1120_SPI_CS_PORT, (1 << AO_CC1120_SPI_CS_PIN));
 
+#if 0
        AO_CC1120_SPI_CS_PORT->bsrr = ((uint32_t) (1 << AO_CC1120_SPI_CS_PIN));
        for (i = 0; i < 10000; i++) {
-               if ((SPI_2_GPIO->idr & (1 << SPI_2_MISO)) == 0)
+               if ((SPI_2_PORT->idr & (1 << SPI_2_MISO_PIN)) == 0)
                        break;
        }
        AO_CC1120_SPI_CS_PORT->bsrr = (1 << AO_CC1120_SPI_CS_PIN);
        if (i == 10000)
-               ao_panic(AO_PANIC_SELF_TEST);
+               ao_panic(AO_PANIC_SELF_TEST_CC1120);
+#endif
 
        /* Enable the EXTI interrupt for the appropriate pin */
        ao_enable_port(AO_CC1120_INT_PORT);