summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/arm/nds/libnds/include/nds/arm9/ndsmotion.h
blob: f3940f5f2fbea168fdce429c10f66ab7e9e532da (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
/*---------------------------------------------------------------------------------
	DS Motion Card/DS Motion Pak functionality

	Copyright (C) 2007
		Michael Noland (joat)
		Jason Rogers (dovoto)
		Dave Murphy (WinterMute)
		Keith Epstein (KeithE)

	This software is provided 'as-is', without any express or implied
	warranty.  In no event will the authors be held liable for any
	damages arising from the use of this software.

	Permission is granted to anyone to use this software for any
	purpose, including commercial applications, and to alter it and
	redistribute it freely, subject to the following restrictions:

	1.	The origin of this software must not be misrepresented; you
		must not claim that you wrote the original software. If you use
		this software in a product, an acknowledgment in the product
		documentation would be appreciated but is not required.
	2.	Altered source versions must be plainly marked as such, and
		must not be misrepresented as being the original software.
	3.	This notice may not be removed or altered from any source
		distribution.

---------------------------------------------------------------------------------*/

/*! \file ndsmotion.h
\brief interface code for the ds motion card, ds motion pak, MK6

*/
#ifndef NDS_MOTION_INCLUDE
#define NDS_MOTION_INCLUDE
//---------------------------------------------------------------------------------


typedef struct
{
	short xoff, yoff, zoff, goff;
	short xsens, ysens, zsens, gsens;
}MotionCalibration;

#ifdef __cplusplus
extern "C" {
#endif

/*! \fn int motion_init(void)
\brief  Initializes the DS Motion Sensor.
Run this before using any of the DS Motion Sensor functions
save the return value and pass it to the other motion_ functions
*/
int motion_init(void);

/*! \fn int motion_deinit(void)
\brief  Deinitializes the DS Motion Sensor
*/
void motion_deinit(void);

/*! \fn signed int motion_read_x(void)
\brief  read the X acceleration
*/
signed int motion_read_x(void);

/*! \fn signed int motion_read_y(void)
\brief  read the Y acceleration
*/
signed int motion_read_y(void);

/*! \fn signed int motion_read_z(void)
\brief  read the Z acceleration
*/
signed int motion_read_z(void);

/*! \fn signed int motion_read_gyro(void)
\brief  read the Z rotational speed
*/
signed int motion_read_gyro(void);

/*! \fn int motion_acceleration_x(void)
\brief gets acceleration value to mili G (where g is 9.8 m/s*s)
*/
int motion_acceleration_x(void);

/*! \fn int motion_acceleration_y(void)
\brief gets acceleration value to mili G (where g is 9.8 m/s*s)
*/
int motion_acceleration_y(void);

/*! \fn int motion_acceleration_z(void)
\brief gets acceleration value to mili G (where g is 9.8 m/s*s)
*/
int motion_acceleration_z(void);

/*! \fn void motion_set_sens_x(int sens)
\brief this should be passed the raw reading at 1g for accurate
acceleration calculations.  Default is 819
*/
void motion_set_sens_x(int sens);

/*! \fn void motion_set_sens_y(int sens)
\brief this should be passed the raw reading at 1g for accurate
acceleration calculations.  Default is 819
*/
void motion_set_sens_y(int sens);

/*! \fn void motion_set_sens_z(int sens)
\brief this should be passed the raw reading at 1g for accurate
acceleration calculations.  Default is 819
*/
void motion_set_sens_z(int sens);

/*! \fn void motion_set_sens_x(int sens)
\brief this should be passed the raw reading at 1g for accurate
acceleration calculations.  Default is 825
*/
void motion_set_sens_gyro(int sens);

/*! \fn void motion_set_offs_x(void)
\brief this should be called when the axis is under no acceleration
default is 2048
*/
void motion_set_offs_x(void);

/*! \fn void motion_set_offs_y(void)
\brief this should be called when the axis is under no acceleration
default is 2048
*/
void motion_set_offs_y(void);

/*! \fn void motion_set_offs_z(void)
\brief this should be called when the axis is under no acceleration
default is 2048
*/
void motion_set_offs_z(void);

/*! \fn void motion_set_offs_gyro(void)
\brief this should be called when the axis is under no rotation
default is 1680
*/
void motion_set_offs_gyro(void);

/*! \fn int motion_rotation(void)
\brief converts raw rotation value to degrees per second
*/
int motion_rotation(void);

/*! \fn MotionCalibration* motion_get_calibration(void)void
\brief This returns the current calibration settings for saving
*/
MotionCalibration* motion_get_calibration(void);

/*! \fn void motion_set_calibration(MotionCalibration* cal)
\brief This sets the calibration settings.  Intended
to restore saved calibration settings
*/
void motion_set_calibration(MotionCalibration* cal);

/*! \fn MotionCalibration* motion_enable_ain_1(void)
\brief This enables the analog input number 1.
Required before reading analog input number 1.
*/
void motion_enable_ain_1(void);

/*! \fn MotionCalibration* motion_enable_ain_2(void)
\brief This enables the analog input number 2.
Required before reading analog input number 2.
*/
void motion_enable_ain_2(void);

/*! \fn MotionCalibration* motion_read_ain_1(void)
\brief This reads the analog input number 1.
analog input number 1 needs to be enabled before reading.
*/
int motion_read_ain_1(void);

/*! \fn MotionCalibration* motion_read_ain_2(void)
\brief This reads the analog input number 2.
analog input number 2 needs to be enabled before reading.
*/
int motion_read_ain_2(void);

#ifdef __cplusplus
}
#endif

#endif