• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  $License:
3    Copyright 2011 InvenSense, Inc.
4 
5  Licensed under the Apache License, Version 2.0 (the "License");
6  you may not use this file except in compliance with the License.
7  You may obtain a copy of the License at
8 
9  http://www.apache.org/licenses/LICENSE-2.0
10 
11  Unless required by applicable law or agreed to in writing, software
12  distributed under the License is distributed on an "AS IS" BASIS,
13  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  See the License for the specific language governing permissions and
15  limitations under the License.
16   $
17  */
18 /***************************************************************************** *
19  * $Id: dmpDefault.c 5627 2011-06-10 22:34:18Z nroyer $
20  ******************************************************************************/
21 
22 /* WARNING: autogenerated code, do not modify */
23 /**
24  *  @defgroup DMPDEFAULT
25  *  @brief    Data and configuration for MLDmpDefaultOpen.
26  *
27  *  @{
28  *      @file   inv_setup_dmp.c
29  *      @brief  Data and configuration for MLDmpDefaultOpen.
30  */
31 
32 #include "mltypes.h"
33 #include "dmpDefault.h"
34 #include "dmpKey.h"
35 #include "dmpmap.h"
36 #include "ml.h"
37 #include "mpu.h"
38 #include "mldl.h"
39 #include "mldl_cfg.h"
40 
41 #define CFG_25  703
42 #define CFG_24  699
43 #define CFG_26  707
44 #define CFG_21  802
45 #define CFG_20  645
46 #define CFG_23  814
47 #define CFG_TAP4  808
48 #define CFG_TAP5  809
49 #define CFG_TAP6  810
50 #define CFG_1  783
51 #define CFG_TAP0  802
52 #define CFG_TAP1  804
53 #define CFG_TAP2  805
54 #define CFG_TAP3  806
55 #define FCFG_AZ  878
56 #define CFG_ORIENT_IRQ_1  715
57 #define CFG_ORIENT_IRQ_2  738
58 #define CFG_ORIENT_IRQ_3  743
59 #define CFG_TAP_QUANTIZE  647
60 #define FCFG_3  936
61 #define CFG_TAP_CLEAR_STICKY  817
62 #define FCFG_1  868
63 #define CFG_ACCEL_FILTER  968
64 #define FCFG_2  872
65 #define CFG_3D  521
66 #define CFG_3B  517
67 #define CFG_3C  519
68 #define FCFG_5  942
69 #define FCFG_4  857
70 #define FCFG_FSCALE  877
71 #define CFG_TAP_JERK  639
72 #define FCFG_6  996
73 #define CFG_12  797
74 #define FCFG_7  930
75 #define CFG_14  790
76 #define CFG_15  790
77 #define CFG_16  815
78 #define CFG_18  551
79 #define CFG_6  823
80 #define CFG_7  564
81 #define CFG_4  526
82 #define CFG_5  749
83 #define CFG_3  515
84 #define CFG_GYRO_SOURCE  777
85 #define CFG_8  772
86 #define CFG_9  778
87 #define CFG_ORIENT_2  733
88 #define CFG_ORIENT_1  713
89 #define FCFG_ACCEL_INPUT  904
90 #define CFG_TAP7  811
91 #define CFG_TAP_SAVE_ACCB  687
92 #define FCFG_ACCEL_INIT  831
93 
94 
95 #define D_0_22  (22)
96 #define D_0_24  (24)
97 #define D_0_36  (36)
98 #define D_0_52  (52)
99 #define D_0_96  (96)
100 #define D_0_104 (104)
101 #define D_0_108 (108)
102 #define D_0_163 (163)
103 #define D_0_188 (188)
104 #define D_0_192 (192)
105 #define D_0_224 (224)
106 #define D_0_228 (228)
107 #define D_0_232 (232)
108 #define D_0_236 (236)
109 
110 #define D_1_2 (256 + 2)
111 #define D_1_4 (256 + 4)
112 #define D_1_8 (256 + 8)
113 #define D_1_10 (256 + 10)
114 #define D_1_24 (256 + 24)
115 #define D_1_28 (256 + 28)
116 #define D_1_92 (256 + 92)
117 #define D_1_96 (256 + 96)
118 #define D_1_98 (256 + 98)
119 #define D_1_106 (256 + 106)
120 #define D_1_108 (256 + 108)
121 #define D_1_112 (256 + 112)
122 #define D_1_128 (256 + 144)
123 #define D_1_152 (256 + 12)
124 #define D_1_168 (256 + 168)
125 #define D_1_175 (256 + 175)
126 #define D_1_178 (256 + 178)
127 #define D_1_236 (256 + 236)
128 #define D_1_244 (256 + 244)
129 
130 
131 static const tKeyLabel dmpTConfig[] = {
132     {KEY_CFG_25, CFG_25},
133     {KEY_CFG_24, CFG_24},
134     {KEY_CFG_26, CFG_26},
135     {KEY_CFG_21, CFG_21},
136     {KEY_CFG_20, CFG_20},
137     {KEY_CFG_23, CFG_23},
138     {KEY_CFG_TAP4, CFG_TAP4},
139     {KEY_CFG_TAP5, CFG_TAP5},
140     {KEY_CFG_TAP6, CFG_TAP6},
141     {KEY_CFG_1, CFG_1},
142     {KEY_CFG_TAP0, CFG_TAP0},
143     {KEY_CFG_TAP1, CFG_TAP1},
144     {KEY_CFG_TAP2, CFG_TAP2},
145     {KEY_CFG_TAP3, CFG_TAP3},
146     {KEY_FCFG_AZ, FCFG_AZ},
147     {KEY_CFG_ORIENT_IRQ_1, CFG_ORIENT_IRQ_1},
148     {KEY_CFG_ORIENT_IRQ_2, CFG_ORIENT_IRQ_2},
149     {KEY_CFG_ORIENT_IRQ_3, CFG_ORIENT_IRQ_3},
150     {KEY_CFG_TAP_QUANTIZE, CFG_TAP_QUANTIZE},
151     {KEY_FCFG_3, FCFG_3},
152     {KEY_CFG_TAP_CLEAR_STICKY, CFG_TAP_CLEAR_STICKY},
153     {KEY_FCFG_1, FCFG_1},
154     //{KEY_CFG_ACCEL_FILTER, CFG_ACCEL_FILTER},
155     {KEY_FCFG_2, FCFG_2},
156     {KEY_CFG_3D, CFG_3D},
157     {KEY_CFG_3B, CFG_3B},
158     {KEY_CFG_3C, CFG_3C},
159     {KEY_FCFG_5, FCFG_5},
160     {KEY_FCFG_4, FCFG_4},
161     {KEY_FCFG_FSCALE, FCFG_FSCALE},
162     {KEY_CFG_TAP_JERK, CFG_TAP_JERK},
163     {KEY_FCFG_6, FCFG_6},
164     {KEY_CFG_12, CFG_12},
165     {KEY_FCFG_7, FCFG_7},
166     {KEY_CFG_14, CFG_14},
167     {KEY_CFG_15, CFG_15},
168     {KEY_CFG_16, CFG_16},
169     {KEY_CFG_18, CFG_18},
170     {KEY_CFG_6, CFG_6},
171     {KEY_CFG_7, CFG_7},
172     {KEY_CFG_4, CFG_4},
173     {KEY_CFG_5, CFG_5},
174     {KEY_CFG_3, CFG_3},
175     {KEY_CFG_GYRO_SOURCE, CFG_GYRO_SOURCE},
176     {KEY_CFG_8, CFG_8},
177     {KEY_CFG_9, CFG_9},
178     {KEY_CFG_ORIENT_2, CFG_ORIENT_2},
179     {KEY_CFG_ORIENT_1, CFG_ORIENT_1},
180     {KEY_FCFG_ACCEL_INPUT, FCFG_ACCEL_INPUT},
181     {KEY_CFG_TAP7, CFG_TAP7},
182     {KEY_CFG_TAP_SAVE_ACCB, CFG_TAP_SAVE_ACCB},
183     {KEY_FCFG_ACCEL_INIT, FCFG_ACCEL_INIT},
184 
185     {KEY_D_0_22, D_0_22},
186     {KEY_D_0_24, D_0_24},
187     {KEY_D_0_36, D_0_36},
188     {KEY_D_0_52, D_0_52},
189     {KEY_D_0_96, D_0_96},
190     {KEY_D_0_104, D_0_104},
191     {KEY_D_0_108, D_0_108},
192     {KEY_D_0_163, D_0_163},
193     {KEY_D_0_188, D_0_188},
194     {KEY_D_0_192, D_0_192},
195     {KEY_D_0_224, D_0_224},
196     {KEY_D_0_228, D_0_228},
197     {KEY_D_0_232, D_0_232},
198     {KEY_D_0_236, D_0_236},
199 
200     {KEY_DMP_PREVPTAT, DMP_PREVPTAT},
201     {KEY_D_1_2, D_1_2},
202     {KEY_D_1_4, D_1_4},
203     {KEY_D_1_8, D_1_8},
204     {KEY_D_1_10, D_1_10},
205     {KEY_D_1_24, D_1_24},
206     {KEY_D_1_28, D_1_28},
207     {KEY_D_1_92, D_1_92},
208     {KEY_D_1_96, D_1_96},
209     {KEY_D_1_98, D_1_98},
210     {KEY_D_1_106, D_1_106},
211     {KEY_D_1_108, D_1_108},
212     {KEY_D_1_112, D_1_112},
213     {KEY_D_1_128, D_1_128},
214     {KEY_D_1_152, D_1_152},
215     {KEY_D_1_168, D_1_168},
216     {KEY_D_1_175, D_1_175},
217     {KEY_D_1_178, D_1_178},
218     {KEY_D_1_236, D_1_236},
219     {KEY_D_1_244, D_1_244},
220 
221     {KEY_DMP_TAPW_MIN, DMP_TAPW_MIN},
222     {KEY_DMP_TAP_THR_X, DMP_TAP_THX},
223     {KEY_DMP_TAP_THR_Y, DMP_TAP_THY},
224     {KEY_DMP_TAP_THR_Z, DMP_TAP_THZ},
225     {KEY_DMP_SH_TH_Y, DMP_SH_TH_Y},
226     {KEY_DMP_SH_TH_X, DMP_SH_TH_X},
227     {KEY_DMP_SH_TH_Z, DMP_SH_TH_Z},
228     {KEY_DMP_ORIENT, DMP_ORIENT}
229 };
230 
231 #define NUM_LOCAL_KEYS (sizeof(dmpTConfig)/sizeof(dmpTConfig[0]))
232 static const unsigned short sConfig = 0x013f;
233 #define SCD (1024)
234 static const unsigned char dmpMemory[SCD] = {
235     0xfb, 0x00, 0x00, 0x3e, 0x00, 0x0b, 0x00, 0x36, 0x5a, 0xd6, 0x96, 0x06, 0x3f, 0xa3, 0x00, 0x00,
236     0x20, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x77, 0x8e, 0x00, 0x01, 0x00, 0x01,
237     0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
238     0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
239     0x00, 0x00, 0x03, 0xe8, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x7f, 0xff, 0xff, 0xfe, 0x80, 0x01,
240     0x02, 0x00, 0x00, 0x01, 0x04, 0x00, 0x00, 0x03, 0x06, 0x00, 0x00, 0x05, 0x01, 0xe9, 0xa2, 0x0f,
241     0x00, 0x3e, 0x03, 0x30, 0x40, 0x00, 0x00, 0x00, 0x02, 0xca, 0xe3, 0x09, 0x3e, 0x80, 0x00, 0x00,
242     0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00,
243     0x00, 0x00, 0x00, 0x3e, 0x00, 0x02, 0xb4, 0x8b, 0x00, 0x00, 0x7a, 0xdf, 0x00, 0x02, 0x5b, 0x2f,
244     0xfc, 0xba, 0xfa, 0x00, 0x01, 0x00, 0x80, 0x00, 0x02, 0x01, 0x80, 0x00, 0x03, 0x02, 0x80, 0x00,
245     0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xb4, 0x8b, 0x00, 0x00, 0x7a, 0xdf, 0x00, 0x02, 0x5b, 0x2f,
246     0x00, 0x7d, 0x32, 0xba, 0x00, 0x0a, 0x1e, 0xd1, 0x00, 0x3a, 0xe8, 0x25, 0x00, 0x00, 0x00, 0x00,
247     0x3f, 0xd7, 0x96, 0x08, 0xff, 0xb3, 0x39, 0xf5, 0xfe, 0x11, 0x1b, 0x62, 0xfb, 0xf4, 0xb4, 0x52,
248     0xfb, 0x8c, 0x6f, 0x5d, 0xfd, 0x5d, 0x08, 0xd9, 0x00, 0x7c, 0x73, 0x3b, 0x00, 0x6c, 0x12, 0xcc,
249     0x32, 0x00, 0x13, 0x9d, 0x32, 0x00, 0xd0, 0xd6, 0x32, 0x00, 0x08, 0x00, 0x40, 0x00, 0x01, 0xf4,
250     0x0d, 0x68, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0xd6, 0x00, 0x00, 0x27, 0x10,
251 
252     0xfb, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
253     0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00,
254     0x00, 0x00, 0xfa, 0x36, 0xff, 0xbc, 0x30, 0x8e, 0x00, 0x05, 0xfb, 0xf0, 0xff, 0xd9, 0x5b, 0xc8,
255     0x3e, 0x80, 0x00, 0x00, 0x3e, 0x80, 0x00, 0x00, 0x3e, 0x80, 0x00, 0x00, 0x12, 0x82, 0x2d, 0x90,
256     0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0xff, 0xff, 0x00, 0x05, 0x02, 0x00, 0x00, 0x0c,
257     0x00, 0x03, 0x80, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x03, 0x80, 0x00, 0x40, 0x00, 0x00, 0x00,
258     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x14,
259     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
260     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
261     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0xff, 0x00,
262     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
263     0x80, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb2, 0x6a, 0x00, 0x00, 0x00, 0x00,
264     0xff, 0xec, 0x3f, 0xc8, 0xff, 0xee, 0x00, 0x00, 0xff, 0xfe, 0x40, 0x00, 0xff, 0xff, 0xff, 0xc8,
265     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
266     0xff, 0xff, 0xff, 0xff, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00,
267     0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x03, 0x65, 0x00, 0x00, 0x00, 0x99, 0x00, 0x00, 0x02, 0xf5,
268 
269     0x9e, 0xc5, 0xa3, 0x8a, 0x22, 0x8a, 0x6e, 0x8a, 0x56, 0x8a, 0x5e, 0x9f, 0xc1, 0x83, 0x06, 0x26,
270     0x46, 0x66, 0x0e, 0x2e, 0x4e, 0x6e, 0x9d, 0xc4, 0xad, 0x00, 0x2c, 0x54, 0x7c, 0xf9, 0xc5, 0xa3,
271     0xc1, 0xc3, 0x8f, 0x96, 0x19, 0xa6, 0x81, 0xda, 0x0c, 0xd9, 0x2e, 0xd8, 0xa3, 0x86, 0x31, 0x81,
272     0xa6, 0xd9, 0x30, 0x26, 0xd8, 0xd8, 0xfa, 0xc1, 0x8c, 0xc2, 0x99, 0xc5, 0xa3, 0x2d, 0x55, 0x7d,
273     0x81, 0x91, 0xac, 0x38, 0xad, 0x3a, 0xc3, 0x83, 0x91, 0xac, 0x2d, 0xd9, 0x28, 0xd8, 0x4d, 0xd9,
274     0x48, 0xd8, 0x6d, 0xd9, 0x68, 0xd8, 0x8c, 0x9d, 0xae, 0x29, 0xd9, 0x04, 0xae, 0xd8, 0x51, 0xd9,
275     0x04, 0xae, 0xd8, 0x79, 0xd9, 0x04, 0xd8, 0x81, 0xfb, 0x9d, 0xad, 0x00, 0x8d, 0xae, 0x19, 0x81,
276     0xad, 0xd9, 0x01, 0xd8, 0xfa, 0xae, 0xda, 0x26, 0xd8, 0x8e, 0x91, 0x29, 0x83, 0xa7, 0xd9, 0xad,
277     0xad, 0xad, 0xad, 0xfb, 0x2a, 0xd8, 0xd8, 0xf9, 0xc0, 0xac, 0x89, 0x91, 0x3e, 0x5e, 0x76, 0xfb,
278     0xac, 0x2e, 0x2e, 0xf9, 0xc1, 0x8c, 0x5a, 0x9c, 0xac, 0x2c, 0x28, 0x28, 0x28, 0x9c, 0xac, 0x30,
279     0x18, 0xa8, 0x98, 0x81, 0x28, 0x34, 0x3c, 0x97, 0x24, 0xa7, 0x28, 0x34, 0x3c, 0x9c, 0x24, 0xfa,
280     0xc0, 0x89, 0xac, 0x91, 0x2c, 0x4c, 0x6c, 0x8a, 0x9b, 0x2d, 0xd9, 0xd8, 0xd8, 0x51, 0xd9, 0xd8,
281     0xd8, 0x79, 0xd9, 0xd8, 0xd8, 0xf9, 0x9e, 0x88, 0xa3, 0x31, 0xda, 0xd8, 0xd8, 0x91, 0x2d, 0xd9,
282     0x28, 0xd8, 0x4d, 0xd9, 0x48, 0xd8, 0x6d, 0xd9, 0x68, 0xd8, 0xc1, 0x83, 0x93, 0x35, 0x3d, 0x80,
283     0x25, 0xda, 0xd8, 0xd8, 0x85, 0x69, 0xda, 0xd8, 0xd8, 0xf9, 0xc2, 0x93, 0x81, 0xa3, 0x28, 0x34,
284     0x3c, 0xfb, 0x91, 0xab, 0x8b, 0x18, 0xa3, 0x09, 0xd9, 0xab, 0x97, 0x0a, 0x91, 0x3c, 0xc0, 0x87,
285 
286     0x9c, 0xc5, 0xa3, 0xdd, 0xf9, 0xa3, 0xa3, 0xa3, 0xa3, 0x95, 0xf9, 0xa3, 0xa3, 0xa3, 0x9d, 0xf9,
287     0xa3, 0xa3, 0xa3, 0xa3, 0xf9, 0x90, 0xa3, 0xa3, 0xa3, 0xa3, 0x91, 0xc3, 0x99, 0xf9, 0xa3, 0xa3,
288     0xa3, 0x98, 0xf9, 0xa3, 0xa3, 0xa3, 0xa3, 0x97, 0xa3, 0xa3, 0xa3, 0xa3, 0xfb, 0x9b, 0xa3, 0xa3,
289     0xdc, 0xc5, 0xa7, 0xf9, 0x26, 0x26, 0x26, 0xd8, 0xd8, 0xff, 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0xc1,
290     0xc2, 0xc4, 0x81, 0xa0, 0x90, 0xfa, 0x2c, 0x80, 0x74, 0xfb, 0x70, 0xfa, 0x7c, 0xc0, 0x86, 0x98,
291     0xa8, 0xf9, 0xc9, 0x88, 0xa1, 0xfa, 0x0e, 0x97, 0x80, 0xf9, 0xa9, 0x2e, 0x2e, 0x2e, 0xaa, 0x2e,
292     0x2e, 0x2e, 0xfa, 0xaa, 0xc9, 0x2c, 0xcb, 0xa9, 0x4c, 0xcd, 0x6c, 0xf9, 0x89, 0xa5, 0xca, 0xcd,
293     0xcf, 0xc3, 0x9e, 0xa9, 0x3e, 0x5e, 0x7e, 0x85, 0xa5, 0x1a, 0x3e, 0x5e, 0xc2, 0xa5, 0x99, 0xfb,
294     0x08, 0x34, 0x5c, 0xf9, 0xa9, 0xc9, 0xcb, 0xcd, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97,
295     0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0xa9,
296     0xf9, 0x89, 0x26, 0x46, 0x66, 0x8a, 0xa8, 0x96, 0x36, 0x56, 0x76, 0xaa, 0x98, 0x82, 0x87, 0x2d,
297     0x35, 0x3d, 0xc5, 0xa3, 0xc2, 0xc1, 0x97, 0x80, 0x4a, 0x4e, 0x4e, 0xa3, 0xfa, 0x48, 0xcd, 0xc9,
298     0xf9, 0xc4, 0xa9, 0x99, 0x83, 0x0d, 0x35, 0x5d, 0x89, 0xc5, 0xa3, 0x2d, 0x55, 0x7d, 0xc3, 0x93,
299     0xa3, 0x0e, 0x16, 0x1e, 0xa9, 0x2c, 0x54, 0x7c, 0xc0, 0xc2, 0x83, 0x97, 0xaf, 0x08, 0xc4, 0xa8,
300     0x11, 0xc1, 0x8f, 0xc5, 0xaf, 0x98, 0xf8, 0x24, 0x08, 0x44, 0x10, 0x64, 0x18, 0xf9, 0xa3, 0x29,
301     0x55, 0x7d, 0xaf, 0x83, 0xc3, 0x93, 0xaf, 0xf8, 0x00, 0x28, 0x50, 0xc4, 0xc2, 0xc0, 0xf9, 0x97,
302 };
303 static tKeyLabel keys[NUM_KEYS];
304 
inv_setup_dmpGetAddress(unsigned short key)305 static unsigned short inv_setup_dmpGetAddress(unsigned short key)
306 {
307     static int isSorted = 0;
308     if ( !isSorted ) {
309         int kk;
310         for (kk=0; kk<NUM_KEYS; ++kk) {
311             keys[ kk ].addr = 0xffff;
312             keys[ kk ].key = kk;
313         }
314         for (kk=0; kk<NUM_LOCAL_KEYS; ++kk) {
315             keys[ dmpTConfig[kk].key ].addr = dmpTConfig[kk].addr;
316         }
317         isSorted = 1;
318     }
319     if ( key >= NUM_KEYS )
320         return 0xffff;
321     return keys[ key ].addr;
322 }
323 
324 
325 /**
326  *  @brief
327  *  @return INV_SUCCESS or a non-zero error code.
328  */
inv_setup_dmp(void)329 inv_error_t inv_setup_dmp(void)
330 {
331     inv_error_t result;
332     inv_set_get_address( inv_setup_dmpGetAddress );
333 
334     result = inv_clock_source(MPU_CLK_SEL_PLLGYROZ);
335     if (result) {
336         LOG_RESULT_LOCATION(result);
337         return result;
338     }
339     result = inv_dl_cfg_sampling(MPU_FILTER_42HZ, 4);
340     if (result) {
341         LOG_RESULT_LOCATION(result);
342         return result;
343     }
344     result = inv_set_full_scale(2000.f);
345     if (result) {
346         LOG_RESULT_LOCATION(result);
347         return result;
348     }
349     result = inv_load_dmp(dmpMemory, SCD, sConfig);
350     if (result) {
351         LOG_RESULT_LOCATION(result);
352         return result;
353     }
354     result = inv_set_ignore_system_suspend(FALSE);
355     if (result) {
356         LOG_RESULT_LOCATION(result);
357         return result;
358     }
359 
360     if (inv_accel_present())
361     {
362         struct ext_slave_config config;
363         long odr;
364         config.key = MPU_SLAVE_CONFIG_ODR_SUSPEND;
365         config.len = sizeof(long);
366         config.apply = FALSE;
367         config.data = &odr;
368 
369         odr = 0;
370         result = inv_mpu_config_accel(inv_get_dl_config(),
371                                   inv_get_serial_handle(),
372                                   inv_get_serial_handle(),
373                                   &config);
374         if (result) {
375             LOG_RESULT_LOCATION(result);
376             return result;
377         }
378         config.key = MPU_SLAVE_CONFIG_ODR_RESUME;
379         odr = 200000;
380         result = inv_mpu_config_accel(inv_get_dl_config(),
381                                   inv_get_serial_handle(),
382                                   inv_get_serial_handle(),
383                                   &config);
384         if (result) {
385             LOG_RESULT_LOCATION(result);
386             return result;
387         }
388         config.key = MPU_SLAVE_CONFIG_IRQ_SUSPEND;
389         odr = MPU_SLAVE_IRQ_TYPE_NONE;
390         result = inv_mpu_config_accel(inv_get_dl_config(),
391                                   inv_get_serial_handle(),
392                                   inv_get_serial_handle(),
393                                   &config);
394         if (result) {
395             LOG_RESULT_LOCATION(result);
396             return result;
397         }
398 
399         config.key = MPU_SLAVE_CONFIG_IRQ_RESUME;
400         odr = MPU_SLAVE_IRQ_TYPE_NONE;
401         result = inv_mpu_config_accel(inv_get_dl_config(),
402                          inv_get_serial_handle(),
403                          inv_get_serial_handle(),
404                          &config);
405         if (result) {
406             LOG_RESULT_LOCATION(result);
407             return result;
408         }
409 
410     }
411 
412     return result;
413 }
414 /**
415  * @}
416  */
417 
418