altos: Eliminate 'pin' field from GPIO functions
[fw/altos] / src / drivers / ao_cc1200.c
index 1f2a3ba9e0ded765fc67488ce98eae0a5800b9a7..105e0d50a80aa072a2147248d1cf57edd4a0e8e2 100644 (file)
@@ -51,7 +51,11 @@ extern const uint32_t        ao_radio_cal;
 #define FOSC   40000000
 #endif
 
-#define ao_radio_select()      ao_spi_get_mask(AO_CC1200_SPI_CS_PORT,(1 << AO_CC1200_SPI_CS_PIN),AO_CC1200_SPI_BUS,AO_SPI_SPEED_FAST)
+#ifndef AO_CC1200_SPI_SPEED
+#error AO_CC1200_SPI_SPEED undefined
+#endif
+
+#define ao_radio_select()      ao_spi_get_mask(AO_CC1200_SPI_CS_PORT,(1 << AO_CC1200_SPI_CS_PIN),AO_CC1200_SPI_BUS,AO_CC1200_SPI_SPEED)
 #define ao_radio_deselect()    ao_spi_put_mask(AO_CC1200_SPI_CS_PORT,(1 << AO_CC1200_SPI_CS_PIN),AO_CC1200_SPI_BUS)
 #define ao_radio_spi_send(d,l) ao_spi_send((d), (l), AO_CC1200_SPI_BUS)
 #define ao_radio_spi_send_fixed(d,l) ao_spi_send_fixed((d), (l), AO_CC1200_SPI_BUS)
@@ -188,7 +192,7 @@ ao_radio_fifo_write_fixed(uint8_t data, uint8_t len)
 static uint8_t
 ao_radio_int_pin(void)
 {
-       return ao_gpio_get(AO_CC1200_INT_PORT, AO_CC1200_INT_PIN, AO_CC1200_INT);
+       return ao_gpio_get(AO_CC1200_INT_PORT, AO_CC1200_INT_PIN);
 }
 
 static uint8_t
@@ -803,18 +807,12 @@ ao_radio_rdf_abort(void)
        ao_wakeup(&ao_radio_wake);
 }
 
-static void
-ao_radio_test_cmd(void)
+static uint8_t radio_on;
+
+void
+ao_radio_test_on(void)
 {
-       uint8_t mode = 2;
-       static uint8_t radio_on;
-       ao_cmd_white();
-       if (ao_cmd_lex_c != '\n') {
-               ao_cmd_decimal();
-               mode = (uint8_t) ao_cmd_lex_u32;
-       }
-       mode++;
-       if ((mode & 2) && !radio_on) {
+       if (!radio_on) {
 #if HAS_MONITOR
                ao_monitor_disable();
 #endif
@@ -837,12 +835,12 @@ ao_radio_test_cmd(void)
 #endif
                radio_on = 1;
        }
-       if (mode == 3) {
-               printf ("Hit a character to stop..."); flush();
-               getchar();
-               putchar('\n');
-       }
-       if ((mode & 1) && radio_on) {
+}
+
+void
+ao_radio_test_off(void)
+{
+       if (radio_on) {
                ao_radio_idle();
                ao_radio_put();
                radio_on = 0;
@@ -855,6 +853,25 @@ ao_radio_test_cmd(void)
        }
 }
 
+static void
+ao_radio_test_cmd(void)
+{
+       uint8_t mode = 2;
+       ao_cmd_white();
+       if (ao_cmd_lex_c != '\n')
+               mode = ao_cmd_decimal();
+       mode++;
+       if ((mode & 2))
+               ao_radio_test_on();
+       if (mode == 3) {
+               printf ("Hit a character to stop..."); flush();
+               getchar();
+               putchar('\n');
+       }
+       if ((mode & 1))
+               ao_radio_test_off();
+}
+
 void
 ao_radio_send(const void *d, uint8_t size)
 {
@@ -969,7 +986,7 @@ ao_radio_dump_state(struct ao_radio_state *s)
 #endif
 
 uint8_t
-ao_radio_recv(__xdata void *d, uint8_t size, uint8_t timeout)
+ao_radio_recv(void *d, uint8_t size, uint8_t timeout)
 {
        uint8_t success = 0;
 
@@ -1308,7 +1325,7 @@ static void ao_radio_packet(void) {
 void
 ao_radio_test_recv(void)
 {
-       uint8_t bytes[34];
+       static uint8_t  bytes[34];
        uint8_t b;
 
        if (ao_radio_recv(bytes, 34, 0)) {
@@ -1343,14 +1360,15 @@ ao_radio_aprs(void)
 static void
 ao_radio_strobe_test(void)
 {
+       uint8_t addr;
        uint8_t r;
 
-       ao_cmd_hex();
+       addr = ao_cmd_hex();
        if (ao_cmd_status != ao_cmd_success)
                return;
-       r = ao_radio_strobe(ao_cmd_lex_i);
+       r = ao_radio_strobe(addr);
        printf ("Strobe %02x -> %02x (rdy %d state %d)\n",
-               ao_cmd_lex_i,
+               addr,
                r,
                r >> 7,
                (r >> 4) & 0x7);
@@ -1362,14 +1380,12 @@ ao_radio_write_test(void)
        uint16_t        addr;
        uint8_t         data;
 
-       ao_cmd_hex();
+       addr = ao_cmd_hex();
        if (ao_cmd_status != ao_cmd_success)
                return;
-       addr = ao_cmd_lex_i;
-       ao_cmd_hex();
+       data = ao_cmd_hex();
        if (ao_cmd_status != ao_cmd_success)
                return;
-       data = ao_cmd_lex_i;
        printf ("Write %04x = %02x\n", addr, data);
        ao_radio_reg_write(addr, data);
 }
@@ -1380,10 +1396,9 @@ ao_radio_read_test(void)
        uint16_t        addr;
        uint8_t         data;
 
-       ao_cmd_hex();
+       addr = ao_cmd_hex();
        if (ao_cmd_status != ao_cmd_success)
                return;
-       addr = ao_cmd_lex_i;
        data = ao_radio_reg_read(addr);
        printf ("Read %04x = %02x\n", addr, data);
 }