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