altos: Add bit-bang i2c driver
[fw/altos] / src / kernel / ao_data.c
1 /*
2  * Copyright © 2012 Keith Packard <keithp@keithp.com>
3  *
4  * This program is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation; either version 2 of the License, or
7  * (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful, but
10  * WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License along
15  * with this program; if not, write to the Free Software Foundation, Inc.,
16  * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
17  */
18
19 #ifndef AO_FLIGHT_TEST
20 #include <ao.h>
21 #include <ao_data.h>
22 #endif
23
24 volatile struct ao_data ao_data_ring[AO_DATA_RING];
25 volatile uint8_t                ao_data_head;
26 volatile uint8_t                ao_data_present;
27
28 #ifndef ao_data_count
29 void
30 ao_data_get(struct ao_data *packet)
31 {
32         uint8_t i = ao_data_ring_prev(ao_data_head);
33         memcpy(packet, (void *) &ao_data_ring[i], sizeof (struct ao_data));
34 }
35 #endif
36
37 #if HAS_ACCEL
38 accel_t
39 ao_data_accel(volatile struct ao_data *packet) {
40         accel_t raw;
41         raw = ao_data_accel_raw(packet);
42         if (ao_config.pad_orientation != AO_PAD_ORIENTATION_ANTENNA_UP)
43                 raw = ao_data_accel_invert(raw);
44         return raw;
45 }
46 #endif