1 /*---------------------------------------------------------------------------*
2 Project: Horizon
3 File: hid_ExtraPadReader.h
4
5 Copyright (C)2009-2012 Nintendo Co., Ltd. All rights reserved.
6
7 These coded instructions, statements, and computer programs contain
8 proprietary information of Nintendo of America Inc. and/or Nintendo
9 Company Ltd., and are protected by Federal copyright law. They may
10 not be disclosed to third parties or copied or duplicated in any form,
11 in whole or in part, without the prior written consent of Nintendo.
12
13 $Rev:$
14 *---------------------------------------------------------------------------*/
15
16 #ifndef NN_HID_CTR_HID_EXTRAPADREADER_H_
17 #define NN_HID_CTR_HID_EXTRAPADREADER_H_
18
19 #include <nn/hid/CTR/hid_ExtraPad.h>
20 #include <nn/hid/CTR/hid_ExtraPadStatus.h>
21 #include <nn/hid/CTR/hid_AnalogStickClamper.h>
22 #include <nn/hid/CTR/hid_PadReader.h>
23
24
25 /*
26 *
27 */
28 namespace nn
29 {
30
31 namespace hid
32 {
33
34 namespace CTR
35 {
36
37
38 /* Please see man pages for details
39
40
41
42
43
44
45
46
47
48
49 */
50 class ExtraPadReader
51 {
52
53 public:
54
55 /* Please see man pages for details
56
57
58
59 */
60 typedef enum
61 {
62 /* Please see man pages for details */
63 STICK_CLAMP_MODE_CIRCLE = AnalogStickClamper::STICK_CLAMP_MODE_CIRCLE,
64 /* Please see man pages for details */
65 STICK_CLAMP_MODE_CROSS = AnalogStickClamper::STICK_CLAMP_MODE_CROSS,
66 /* Please see man pages for details */
67 STICK_CLAMP_MODE_MINIMUM = AnalogStickClamper::STICK_CLAMP_MODE_MINIMUM
68 }StickClampMode;
69
70 /* Please see man pages for details
71
72
73 */
74 /* Please see man pages for details
75
76
77
78
79 */
80
81 ExtraPadReader();
82
83 /* Please see man pages for details
84
85
86 */
87 virtual ~ExtraPadReader();
88
89 /* Please see man pages for details
90
91
92
93 */
94
95 /* Please see man pages for details
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110 */
111 void Read(ExtraPadStatus* pBufs, s32* pReadLen, s32 bufLen);
112
113 /* Please see man pages for details
114
115
116
117
118
119
120
121
122
123
124 */
125 bool ReadLatest(ExtraPadStatus* pBuf);
126
127
128 /* Please see man pages for details
129
130
131
132 */
133
134 /* Please see man pages for details
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149 */
150 void SetStickClamp(s16 min, s16 max);
151
152 /* Please see man pages for details
153
154
155
156
157
158
159 */
160 void GetStickClamp(s16* pMin, s16* pMax) const;
161
162 /* Please see man pages for details
163
164
165
166
167 */
168 StickClampMode GetStickClampMode() const;
169
170 /* Please see man pages for details
171
172
173
174
175
176
177
178
179 */
180 void SetStickClampMode(StickClampMode mode);
181
182 /* Please see man pages for details
183
184
185
186
187
188
189 */
190 f32 NormalizeStick(s16 x);
191
192 /* Please see man pages for details
193
194
195
196
197
198
199
200
201
202
203 */
204 void NormalizeStickWithScale( f32* normalized_x, f32* normalized_y, s16 x, s16 y );
205
206 /* Please see man pages for details
207
208
209
210
211
212
213
214
215
216
217
218
219 */
220 void SetNormalizeStickScaleSettings( f32 scale, s16 threshold );
221
222 /* Please see man pages for details
223
224
225
226
227
228 */
229 void GetNormalizeStickScaleSettings( f32* scale, s16* threshold ) const;
230
231 /* Please see man pages for details
232
233
234
235 */
236
237
238
239 /* Please see man pages for details
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254 */
255 void SetExtraStickClamp(s16 min, s16 max);
256
257 /* Please see man pages for details
258
259
260
261
262
263
264 */
265 void GetExtraStickClamp(s16* pMin, s16* pMax) const;
266
267 /* Please see man pages for details
268
269
270
271
272 */
273 StickClampMode GetExtraStickClampMode() const;
274
275 /* Please see man pages for details
276
277
278
279
280
281
282
283
284 */
285 void SetExtraStickClampMode(StickClampMode mode);
286
287 /* Please see man pages for details
288
289
290
291
292
293
294 */
295 f32 NormalizeExtraStick(s16 x);
296
297 /* Please see man pages for details
298
299
300
301
302
303
304
305
306
307
308 */
309 void NormalizeExtraStickWithScale( f32* normalized_x, f32* normalized_y, s16 x, s16 y );
310
311 /* Please see man pages for details
312
313
314
315
316
317
318
319
320
321
322
323
324 */
325 void SetNormalizeExtraStickScaleSettings( f32 scale, s16 threshold );
326
327 /* Please see man pages for details
328
329
330
331
332
333 */
334 void GetNormalizeExtraStickScaleSettings( f32* scale, s16* threshold ) const;
335
336 /*
337
338 */
339
340 private:
341 static AnalogStickClamper::ClampMode ClamperClampMode(StickClampMode mode);
342 static StickClampMode ReaderClampMode(AnalogStickClamper::ClampMode mode);
343 static void ConvertFromExtraPadStatusToPadStatus(PadStatus* pPadStatus, const ExtraPadStatus* pExtraPadStatus);
344
345 protected:
346
347 NN_PADDING4;
348 AnalogStickClamper m_ExtraStickClamper;
349 AnalogStickClamper m_StickClamper;
350 s32 m_IndexOfRead;
351 bit32 m_LatestHold;
352 PadReader m_PadReader;
353 bool m_IsReadLatestFirst;
354 NN_PADDING3;
355 NN_PADDING4;
356 s64 m_TickOfRead;
357 };
358
359
360 /* =======================================================================
361 inline definition
362 ======================================================================== */
363
SetExtraStickClamp(s16 min,s16 max)364 inline void ExtraPadReader::SetExtraStickClamp(s16 min, s16 max)
365 {
366 m_ExtraStickClamper.SetStickClamp(min,max);
367 }
368
GetExtraStickClamp(s16 * pMin,s16 * pMax)369 inline void ExtraPadReader::GetExtraStickClamp(s16* pMin, s16* pMax) const
370 {
371 m_ExtraStickClamper.GetStickClamp(pMin,pMax);
372 }
373
SetExtraStickClampMode(StickClampMode mode)374 inline void ExtraPadReader::SetExtraStickClampMode(StickClampMode mode)
375 {
376 m_ExtraStickClamper.SetStickClampMode(ClamperClampMode(mode));
377 }
378
GetExtraStickClampMode()379 inline ExtraPadReader::StickClampMode ExtraPadReader::GetExtraStickClampMode() const
380 {
381 return ReaderClampMode(m_ExtraStickClamper.GetStickClampMode());
382 }
383
NormalizeExtraStick(s16 x)384 inline f32 ExtraPadReader::NormalizeExtraStick(s16 x)
385 {
386 return m_ExtraStickClamper.NormalizeStick(x);
387 }
388
NormalizeExtraStickWithScale(f32 * normalized_x,f32 * normalized_y,s16 x,s16 y)389 inline void ExtraPadReader::NormalizeExtraStickWithScale( f32* normalized_x, f32* normalized_y, s16 x, s16 y )
390 {
391 m_ExtraStickClamper.NormalizeStickWithScale(normalized_x,normalized_y,x,y);
392 }
393
SetNormalizeExtraStickScaleSettings(f32 scale,s16 threshold)394 inline void ExtraPadReader::SetNormalizeExtraStickScaleSettings(f32 scale, s16 threshold)
395 {
396 m_ExtraStickClamper.SetNormalizeStickScaleSettings(scale,threshold);
397 }
398
GetNormalizeExtraStickScaleSettings(f32 * scale,s16 * threshold)399 inline void ExtraPadReader::GetNormalizeExtraStickScaleSettings(f32* scale, s16* threshold) const
400 {
401 m_ExtraStickClamper.GetNormalizeStickScaleSettings(scale,threshold);
402 }
403
404
405
406
407 }
408
409 }
410
411 }
412
413 #endif /* NN_HID_CTR_HID_EXTRAPADREADER_H_ */
414