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