summaryrefslogtreecommitdiff
path: root/src/core
diff options
context:
space:
mode:
Diffstat (limited to 'src/core')
-rw-r--r--src/core/ao.h7
-rw-r--r--src/core/ao_adc.h4
-rw-r--r--src/core/ao_data.c34
-rw-r--r--src/core/ao_data.h4
-rw-r--r--src/core/ao_flight.c2
-rw-r--r--src/core/ao_log_tiny.c2
-rw-r--r--src/core/ao_usb.h3
7 files changed, 50 insertions, 6 deletions
diff --git a/src/core/ao.h b/src/core/ao.h
index 71bfb6a1..7f344736 100644
--- a/src/core/ao.h
+++ b/src/core/ao.h
@@ -43,6 +43,12 @@
#define HAS_TASK 1
#endif
+#ifndef AO_PORT_TYPE
+#define AO_PORT_TYPE uint8_t
+#endif
+
+typedef AO_PORT_TYPE ao_port_t;
+
#if HAS_TASK
#include <ao_task.h>
#else
@@ -68,6 +74,7 @@
#define AO_PANIC_SPI 13 /* SPI communication failure */
#define AO_PANIC_CRASH 14 /* Processor crashed */
#define AO_PANIC_BUFIO 15 /* Mis-using bufio API */
+#define AO_PANIC_EXTI 16 /* Mis-using exti API */
#define AO_PANIC_SELF_TEST_CC1120 0x40 | 1 /* Self test failure */
#define AO_PANIC_SELF_TEST_HMC5883 0x40 | 2 /* Self test failure */
#define AO_PANIC_SELF_TEST_MPU6000 0x40 | 3 /* Self test failure */
diff --git a/src/core/ao_adc.h b/src/core/ao_adc.h
index 0dd87080..373db1c4 100644
--- a/src/core/ao_adc.h
+++ b/src/core/ao_adc.h
@@ -28,10 +28,6 @@ ao_adc_poll(void);
void
ao_adc_sleep(void);
-/* Get a copy of the last complete sample set */
-void
-ao_data_get(__xdata struct ao_data *packet);
-
/* Initialize the A/D converter */
void
ao_adc_init(void);
diff --git a/src/core/ao_data.c b/src/core/ao_data.c
new file mode 100644
index 00000000..38d2f7ff
--- /dev/null
+++ b/src/core/ao_data.c
@@ -0,0 +1,34 @@
+/*
+ * Copyright © 2012 Keith Packard <keithp@keithp.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+ */
+
+#include <ao.h>
+#include <ao_data.h>
+
+volatile __xdata struct ao_data ao_data_ring[AO_DATA_RING];
+volatile __data uint8_t ao_data_head;
+volatile __data uint8_t ao_data_present;
+
+void
+ao_data_get(__xdata struct ao_data *packet)
+{
+#if HAS_FLIGHT
+ uint8_t i = ao_data_ring_prev(ao_sample_data);
+#else
+ uint8_t i = ao_data_ring_prev(ao_data_head);
+#endif
+ memcpy(packet, (void *) &ao_data_ring[i], sizeof (struct ao_data));
+}
diff --git a/src/core/ao_data.h b/src/core/ao_data.h
index 7e2f85d8..b0f086f8 100644
--- a/src/core/ao_data.h
+++ b/src/core/ao_data.h
@@ -82,6 +82,10 @@ struct ao_data {
#define ao_data_ring_next(n) (((n) + 1) & (AO_DATA_RING - 1))
#define ao_data_ring_prev(n) (((n) - 1) & (AO_DATA_RING - 1))
+/* Get a copy of the last complete sample set */
+void
+ao_data_get(__xdata struct ao_data *packet);
+
extern volatile __xdata struct ao_data ao_data_ring[AO_DATA_RING];
extern volatile __data uint8_t ao_data_head;
extern volatile __data uint8_t ao_data_present;
diff --git a/src/core/ao_flight.c b/src/core/ao_flight.c
index 9d9d4c6e..782e2274 100644
--- a/src/core/ao_flight.c
+++ b/src/core/ao_flight.c
@@ -124,7 +124,7 @@ ao_flight(void)
ao_usb_disable();
#endif
-#if !HAS_ACCEL
+#if !HAS_ACCEL && PACKET_HAS_SLAVE
/* Disable packet mode in pad state on TeleMini */
ao_packet_slave_stop();
#endif
diff --git a/src/core/ao_log_tiny.c b/src/core/ao_log_tiny.c
index 492658ea..67767dc9 100644
--- a/src/core/ao_log_tiny.c
+++ b/src/core/ao_log_tiny.c
@@ -105,7 +105,7 @@ ao_log(void)
*/
ao_sleep(DATA_TO_XDATA(&ao_sample_data));
while (ao_log_data != ao_sample_data) {
- sum += ao_data_ring[ao_log_data].adc.pres;
+ sum += ao_data_pres(&ao_data_ring[ao_log_data]);
count++;
ao_log_data = ao_data_ring_next(ao_log_data);
}
diff --git a/src/core/ao_usb.h b/src/core/ao_usb.h
index 6bc77608..35e64e65 100644
--- a/src/core/ao_usb.h
+++ b/src/core/ao_usb.h
@@ -102,8 +102,11 @@ extern __code __at (0x00aa) uint8_t ao_usb_descriptors [];
#define AO_USB_INT_EP 1
#define AO_USB_INT_SIZE 8
+#ifndef AO_USB_OUT_EP
#define AO_USB_OUT_EP 4
#define AO_USB_IN_EP 5
+#endif
+
/*
* USB bulk packets can only come in 8, 16, 32 and 64
* byte sizes, so we'll use 64 for everything