typo
[protos/imu.git] / imu.h
1 /*
2  * Copyright (c) 2014, Olivier MATZ <zer0@droids-corp.org>
3  * Copyright (c) 2014, Fabrice DESCLAUX <serpilliere@droids-corp.org>
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions are met:
7  *
8  *     * Redistributions of source code must retain the above copyright
9  *       notice, this list of conditions and the following disclaimer.
10  *     * Redistributions in binary form must reproduce the above copyright
11  *       notice, this list of conditions and the following disclaimer in the
12  *       documentation and/or other materials provided with the distribution.
13  *     * Neither the name of the University of California, Berkeley nor the
14  *       names of its contributors may be used to endorse or promote products
15  *       derived from this software without specific prior written permission.
16  *
17  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY
18  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
20  * DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY
21  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
22  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
23  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
24  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
26  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27  */
28
29 #ifndef IMU_H_
30 #define IMU_H_
31
32 struct imu_info {
33         /* gyro */
34         double gx;
35         double gy;
36         double gz;
37
38         /* accelero */
39         double ax;
40         double ay;
41         double az;
42
43         /* magneto */
44         double mx;
45         double my;
46         double mz;
47
48         /* temperature */
49         double temp;
50 };
51
52 struct quaternion {
53         double q0;
54         double q1;
55         double q2;
56         double q3;
57 };
58
59 struct euler {
60         double roll;
61         double pitch;
62         double yaw;
63 };
64
65 /* initialize the IMU */
66 void imu_init(void);
67
68 /* if sd log file is opened, log the status of IMU on the sdcard */
69 int imu_log(void);
70
71 /* return a filled imu_info structure corresponding to the latest axes read in
72  * the timer callback. Does not lock irq, so it's up to the user to do that. */
73 void imu_get_info(struct imu_info *imu);
74
75 /* return the latest position in a quaternion struct read in the timer
76  * callback. Does not lock irq, so it's up to the user to do that. */
77 void imu_get_pos_quat(struct quaternion *pos);
78
79 /* return the latest position in an euler struct read in the timer
80  * callback. Does not lock irq, so it's up to the user to do that. */
81 void imu_get_pos_euler(struct euler *pos);
82
83 #endif