1 /*---------------------------------------------------------------------------*
2   Project:  Horizon
3   File:     hid_PadReader.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: 46347 $
14  *---------------------------------------------------------------------------*/
15 
16 /* Please see man pages for details
17 
18 
19 */
20 #ifndef NN_HID_CTR_HID_PADREADER_H_
21 #define NN_HID_CTR_HID_PADREADER_H_
22 
23 #include <nn/Handle.h>
24 #include <nn/Result.h>
25 #include <nn/types.h>
26 #include <nn/hid/CTR/hid_AnalogStickClamper.h>
27 #include <nn/hid/CTR/hid_Result.h>
28 #include <nn/hid/CTR/hid_Api.h>
29 #include <nn/hid/CTR/hid_pad.h>
30 #include <nn/hid/CTR/hid_DeviceStatus.h>
31 #include <nn/util/util_NonCopyable.h>
32 
33 namespace nn {
34 namespace hid {
35 namespace CTR {
36 
37 /* Please see man pages for details
38 
39 
40 
41 */
42 
43 class PadReader : private nn::util::NonCopyable<PadReader>
44 {
45 public:
46     /* Please see man pages for details
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     typedef enum
73     {
74         /* Please see man pages for details */
75         STICK_CLAMP_MODE_CIRCLE  = AnalogStickClamper::STICK_CLAMP_MODE_CIRCLE,
76         /* Please see man pages for details */
77         STICK_CLAMP_MODE_CROSS   = AnalogStickClamper::STICK_CLAMP_MODE_CROSS,
78         /* Please see man pages for details */
79         STICK_CLAMP_MODE_MINIMUM = AnalogStickClamper::STICK_CLAMP_MODE_MINIMUM
80     } StickClampMode;
81 
82     /* Please see man pages for details
83 
84 
85 
86 
87 
88 
89     */
90     PadReader(Pad& pad=GetPad( ));
91 
92     /* Please see man pages for details
93 
94 
95     */
~PadReader()96     ~PadReader( ) {};
97 
98     /* Please see man pages for details
99 
100 
101 
102 
103 
104 
105 
106 
107 
108 
109 
110     */
111     void Read(PadStatus* 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 
126     */
127     bool ReadLatest(PadStatus* pBuf);
128 
129     /* Please see man pages for details
130 
131 
132 
133 
134 
135 
136 
137 
138 
139 
140 
141 
142 
143 
144     */
145     void SetStickClamp(s16 min, s16 max);
146 
147     /* Please see man pages for details
148 
149 
150 
151 
152 
153     */
154     void GetStickClamp(s16* pMin, s16* pMax) const;
155 
156     /* Please see man pages for details
157 
158 
159 
160     */
161     StickClampMode GetStickClampMode( ) const;
162 
163     /* Please see man pages for details
164 
165 
166 
167 
168 
169 
170 
171 
172     */
173     void SetStickClampMode(StickClampMode mode);
174 
175     /* Please see man pages for details
176 
177 
178 
179 
180 
181 
182     */
183     f32 NormalizeStick(s16 x);
184 
185     /* Please see man pages for details
186 
187 
188 
189 
190 
191 
192 
193 
194 
195 
196     */
197     void NormalizeStickWithScale( f32* normalized_x, f32* normalized_y, s16 x, s16 y );
198 
199     /* Please see man pages for details
200 
201 
202 
203 
204 
205 
206 
207 
208 
209 
210 
211 
212     */
213     void SetNormalizeStickScaleSettings( f32 scale, s16 threshold  );
214 
215     /* Please see man pages for details
216 
217 
218 
219 
220 
221     */
222     void GetNormalizeStickScaleSettings( f32* scale, s16* threshold  ) const;
223 
224 
225     /* Please see man pages for details
226 
227     */
228     static const s8 MAX_READ_NUM = 7;
229 
230 private:
231     static AnalogStickClamper::ClampMode  ClamperClampMode(const StickClampMode mode);
232     static StickClampMode ReaderClampMode(const AnalogStickClamper::ClampMode mode);
233 protected:
234     static void HideKeyInfo(PadStatus* padStatus);
235 
236 
237 protected:
238     Pad&                m_Pad;                  //8
239     s32                 m_IndexOfRead;          //4
240     bit32               m_LatestHold;           //4
241     AnalogStickClamper  m_StickClamper;         //36
242     bool                m_IsReadLatestFirst;   //1
243     NN_PADDING3;                              //3
244     NN_PADDING4;
245 
246     s64                 m_TickOfRead;           //8
247 };
248 
249 
250 // inline definition
GetStickClamp(s16 * pMin,s16 * pMax)251 inline void PadReader::GetStickClamp(s16* pMin, s16* pMax) const
252 {
253     m_StickClamper.GetStickClamp(pMin,pMax);
254 }
255 
GetStickClampMode()256 inline PadReader::StickClampMode PadReader::GetStickClampMode( ) const
257 {
258     return ReaderClampMode(m_StickClamper.GetStickClampMode());
259 }
260 
SetStickClampMode(StickClampMode mode)261 inline void PadReader::SetStickClampMode(StickClampMode mode)
262 {
263     m_StickClamper.SetStickClampMode(ClamperClampMode(mode));
264 }
265 
266 /* Please see man pages for details
267 
268 
269 
270 
271 
272 
273 */
274 bool EnableSelectButton();
275 
276 /* Please see man pages for details
277 
278 
279 
280 */
281 void DisableSelectButton();
282 
283 
284 // Private function that does not require reference
285 bool IsSelectButtonEnabled();
286 
287 
288 } // namespace CTR {
289 } // namespace hid {
290 } // namespace nn {
291 
292 #endif  // #ifndef NN_HID_CTR_HID_PADREADER_H_
293