1 /*---------------------------------------------------------------------------*
2   Project:  Horizon
3   File:     hid_DeviceStatus.h
4 
5   Copyright (C)2009 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: 36826 $
14  *---------------------------------------------------------------------------*/
15 
16 /*! @file
17     @brief      デバイスのサンプリングデータを格納する構造体を定義します。
18 
19 */
20 
21 #ifndef NN_HID_CTR_HID_DEVICESTATUS_H_
22 #define NN_HID_CTR_HID_DEVICESTATUS_H_
23 
24 #include <nn/types.h>
25 #include <nn/math/math_Types.h>
26 #include <nn/config.h>
27 
28 namespace nn {
29 namespace hid {
30 namespace CTR {
31 
32 /*! @brief      A ボタン  */
33 const bit32 BUTTON_A                = 0x00000001;
34 /*! @brief      B ボタン  */
35 const bit32 BUTTON_B                = 0x00000002;
36 const bit32 PSEUDO_BUTTON_SELECT    = 0x00000004;
37 /*!
38   @brief      SELECTボタン
39 
40               nn::hid::CTR::EnableSelectButton 関数で SELECT ボタンのサンプリングを
41               有効にした場合のみ取得することができます。
42 */
43 const bit32 BUTTON_SELECT_FOR_DEBUGGING = 0x00000004;
44 /*! @brief      START ボタン  */
45 const bit32 BUTTON_START            = 0x00000008;
46 /*! @brief      十字ボタン 右*/
47 const bit32 BUTTON_RIGHT            = 0x00000010;
48 /*! @brief      十字ボタン 左*/
49 const bit32 BUTTON_LEFT             = 0x00000020;
50 /*! @brief      十字ボタン 上*/
51 const bit32 BUTTON_UP               = 0x00000040;
52 /*! @brief      十字ボタン 下*/
53 const bit32 BUTTON_DOWN             = 0x00000080;
54 /*! @brief      R ボタン  */
55 const bit32 BUTTON_R                = 0x00000100;
56 /*! @brief      L ボタン  */
57 const bit32 BUTTON_L                = 0x00000200;
58 /*! @brief      X ボタン  */
59 const bit32 BUTTON_X                = 0x00000400;
60 /*! @brief      Y ボタン  */
61 const bit32 BUTTON_Y                = 0x00000800;
62 /*!
63     @brief      DEBUG ボタン
64 
65     デバッガソフトウェアにある DBG ボタンに対応しています。
66 */
67 const bit32 BUTTON_DEBUG            = 0x00001000;
68 const bit32 BUTTON_RESERVED         = 0x00002000;
69 /*! @brief      アナログスティックによる十字ボタンエミュレーションの右*/
70 const bit32 BUTTON_EMULATION_RIGHT  = 0x10000000;
71 /*! @brief      アナログスティックによる十字ボタンエミュレーションの左*/
72 const bit32 BUTTON_EMULATION_LEFT   = 0x20000000;
73 /*! @brief      アナログスティックによる十字ボタンエミュレーションの上*/
74 const bit32 BUTTON_EMULATION_UP     = 0x40000000;
75 /*! @brief      アナログスティックによる十字ボタンエミュレーションの下*/
76 const bit32 BUTTON_EMULATION_DOWN   = 0x80000000;
77 
78 /*! @brief      十字ボタン(エミュレーションを含む)以外の入力マスク*/
79 const bit32 BUTTON_MASK             = BUTTON_A | BUTTON_B | BUTTON_START |
80                                       BUTTON_R | BUTTON_L | BUTTON_X | BUTTON_Y | BUTTON_DEBUG;
81 /*! @brief      十字ボタン(エミュレーションを除く)の入力マスク*/
82 const bit32 PLUS_BUTTON_MASK        = BUTTON_RIGHT | BUTTON_LEFT | BUTTON_UP | BUTTON_DOWN;
83 /*! @brief      十字ボタンエミュレーションの入力マスク*/
84 const bit32 PLUS_BUTTON_EMULATION_MASK  = BUTTON_EMULATION_RIGHT | BUTTON_EMULATION_LEFT | BUTTON_EMULATION_UP | BUTTON_EMULATION_DOWN;
85 /*! @brief      全ての入力 */
86 const bit32 ALL_MASK                = BUTTON_MASK | PLUS_BUTTON_MASK | PLUS_BUTTON_EMULATION_MASK;
87 
88 /*! @brief  アナログスティックのサンプリングデータを格納する構造体です。
89 
90 */
91 typedef struct
92 {
93     /*! @brief  x 座標 ( - nn::hid::CTR::LIMIT_OF_STICK_CLAMP_MAX <= x <= nn::hid::CTR::LIMIT_OF_STICK_CLAMP_MAX )*/
94     s16         x;
95     /*! @brief  y 座標 ( - nn::hid::CTR::LIMIT_OF_STICK_CLAMP_MAX <= y <= nn::hid::CTR::LIMIT_OF_STICK_CLAMP_MAX )*/
96     s16         y;
97 } AnalogStickStatus;
98 
99 /*!
100     @brief  ボタン、アナログスティックのサンプリングデータを格納する構造体です。
101 */
102 typedef struct
103 {
104     /*! @brief  ボタンを押している間、ボタンに対応するビット(BUTTON_*)をセットします。*/
105     bit32             hold;
106     /*! @brief  ボタンを押した時だけ、ボタンに対応するビット(BUTTON_*)をセットします。*/
107     bit32             trigger;
108     /*! @brief  ボタンを離した時だけ、ボタンに対応するビット(BUTTON_*)をセットします。*/
109     bit32             release;
110     /*! @brief  アナログスティックの入力値です。 AnalogStickStatus を参照してください。*/
111     AnalogStickStatus stick;
112 } PadStatus;
113 
114 /*!
115     @brief  タッチパネルのサンプリングデータを格納する構造体です。
116 
117            液晶画面の左上隅を原点とした液晶のドットに対応した座標をとります。
118            タッチペンでタッチできない外周 5 ドット は内側へクランプされます。
119 */
120 typedef struct
121 {
122     /*! @brief  x 座標 ( 5 <= x <= 314 )*/
123     u16         x;
124     /*! @brief  y 座標 ( 5 <= y <= 234 )*/
125     u16         y;
126     /*! @brief  接触判定 ( 0 : ペンアップ、1 : タッチ )*/
127     u8          touch;
128     NN_PADDING3;
129 } TouchPanelStatus;
130 
131 /*!
132     @brief  加速度センサのサンプリングデータを格納する構造体です。
133 */
134 typedef struct
135 {
136     /*! @brief  x 座標 ( - nn::hid::CTR::MAX_OF_ACCELEROMETER_VALUE <= x <= nn::hid::CTR::MAX_OF_ACCELEROMETER_VALUE )*/
137     s16         x;
138     /*! @brief  y 座標 ( - nn::hid::CTR::MAX_OF_ACCELEROMETER_VALUE <= y <= nn::hid::CTR::MAX_OF_ACCELEROMETER_VALUE )*/
139     s16         y;
140     /*! @brief  z 座標 ( - nn::hid::CTR::MAX_OF_ACCELEROMETER_VALUE <= z <= nn::hid::CTR::MAX_OF_ACCELEROMETER_VALUE )*/
141     s16         z;
142 }AccelerometerStatus;
143 
144 /*!
145     @brief  加速度センサの加速度値 ( 単位は G ) を格納する構造体です。
146 */
147 typedef struct
148 {
149     /*! @brief  x 座標 ( -1.81 <= x <= 1.81 )<BR> 注意 ) 値域は変更の可能性があります。*/
150     f32         x;
151     /*! @brief  y 座標 ( -1.81 <= y <= 1.81 )<BR> 注意 ) 値域は変更の可能性があります。*/
152     f32         y;
153     /*! @brief  z 座標 ( -1.81 <= z <= 1.81 )<BR> 注意 ) 値域は変更の可能性があります。*/
154     f32         z;
155 }AccelerationFloat;
156 
157 /*!
158     @brief          三次元姿勢を格納する構造体です。
159 */
160 struct Direction{
161 public :
162     /*! @brief 姿勢のx成分です */
163     nn::math::VEC3 x;/**/
164 
165     /*! @brief 姿勢のy成分です */
166     nn::math::VEC3 y;
167 
168     /*! @brief 姿勢のz成分です */
169     nn::math::VEC3 z;
170 
171 public :
172     /*! @brief コンストラクタです */
DirectionDirection173     Direction()
174     {};
175 
176     /*! @brief メンバをベクトルからコピーするコンストラクタです */
DirectionDirection177     Direction(const nn::math::VEC3& vecx,const nn::math::VEC3& vecy,const nn::math::VEC3& vecz)
178     :x(vecx),y(vecy),z(vecz){}
179 
180     /*! @brief 行列の対応要素からメンバに値をコピーするコンストラクタです */
DirectionDirection181     Direction(const nn::math::MTX33 &mtx33)
182     :x(mtx33.v[0]),y(mtx33.v[1]),z(mtx33.v[2]){}
183 
184     /*! @brief メンバからMTX33構造体を生成します */
ToMTX33Direction185     nn::math::MTX33 ToMTX33()
186     {
187         return nn::math::MTX33(
188             x.x,x.y,x.z,
189             y.x,y.y,y.z,
190             z.x,z.y,z.z);
191     }
192 };
193 
194 /*!
195     @brief          ジャイロセンサから取得した情報を保持するための構造体です。
196 
197     GyroscopeStatus 構造体は speed, angle, direction メンバで構成され、speed, angle は nn::math::VEC3 型で定義されています。<BR>
198     VEC3 型の x は Pitch 方向、y は Yaw 方向、 z に Roll 方向の成分として扱われます。<BR>
199     speed は各方向の角速度を表し、360dps (角度/秒)を 1.0 とする値が格納されます。<BR>
200     angle は各方向の角度を表し、360度を 1.0 とする値が格納されます。<BR>
201     direction は 3x3 行列で表現される三次元姿勢になります。
202 */
203 typedef struct {
204     /*! @brief      各方向ごとの角速度の値です。360dps を 1.0 とする値です。 */
205     nn::math::VEC3  speed;
206     /*! @brief      各方向ごとの角速度の値を積算して得られる回転角の値です。360度 を 1.0 とする値です。 */
207     nn::math::VEC3  angle;
208     /*! @brief      ジャイロの三次元姿勢です。 */
209     Direction       direction;
210 } GyroscopeStatus;
211 
212 /*! @brief      デバッグパッド の  十字ボタン 上  */
213 const bit16 DEBUG_PAD_BUTTON_UP           = 0x00000001;
214 /*! @brief      デバッグパッド の  十字ボタン 左 */
215 const bit16 DEBUG_PAD_BUTTON_LEFT         = 0x00000002;
216 /*! @brief      デバッグパッド の ZR トリガー  */
217 const bit16 DEBUG_PAD_TRIGGER_ZR          = 0x00000004;
218 /*! @brief      デバッグパッド の X ボタン  */
219 const bit16 DEBUG_PAD_BUTTON_X            = 0x00000008;
220 /*! @brief      デバッグパッド の A ボタン  */
221 const bit16 DEBUG_PAD_BUTTON_A            = 0x00000010;
222 /*! @brief      デバッグパッド の Y ボタン  */
223 const bit16 DEBUG_PAD_BUTTON_Y            = 0x00000020;
224 /*! @brief      デバッグパッド の B ボタン  */
225 const bit16 DEBUG_PAD_BUTTON_B            = 0x00000040;
226 /*! @brief      デバッグパッド の ZL トリガー  */
227 const bit16 DEBUG_PAD_TRIGGER_ZL          = 0x00000080;
228 const bit16 DEBUG_PAD_RESERVED            = 0x00000100;
229 /*! @brief      デバッグパッド の R トリガー  */
230 const bit16 DEBUG_PAD_TRIGGER_R           = 0x00000200;
231 /*! @brief      デバッグパッド の + ボタン  */
232 const bit16 DEBUG_PAD_BUTTON_PLUS         = 0x00000400;
233 /*! @brief      デバッグパッド の HOME ボタン*/
234 const bit16 DEBUG_PAD_BUTTON_HOME         = 0x00000800;
235 /*! @brief      デバッグパッド の - ボタン  */
236 const bit16 DEBUG_PAD_BUTTON_MINUS        = 0x00001000;
237 /*! @brief      デバッグパッド の L トリガー  */
238 const bit16 DEBUG_PAD_TRIGGER_L           = 0x00002000;
239 /*! @brief      デバッグパッド の  十字ボタン 下 */
240 const bit16 DEBUG_PAD_BUTTON_DOWN         = 0x00004000;
241 /*! @brief      デバッグパッド の  十字ボタン 右 */
242 const bit16 DEBUG_PAD_BUTTON_RIGHT        = 0x00008000;
243 
244 
245 /*!
246     @brief  デバッグパッドのボタン、アナログスティックのサンプリングデータを格納する構造体です。
247 */
248 typedef struct
249 {
250     /*! @brief  ボタンを押している間、ボタンに対応するビット(DEBUG_PAD_*)をセットします。*/
251     bit16             hold;
252     /*! @brief  ボタンを押した時だけ、ボタンに対応するビット(DEBUG_PAD_*)をセットします。*/
253     bit16             trigger;
254     /*! @brief  ボタンを離した時だけ、ボタンに対応するビット(DEBUG_PAD_*)をセットします。*/
255     bit16             release;
256     NN_PADDING2;
257     /*! @brief  左スティックの x 軸( -1.0f ~ 1.0f )*/
258     f32               leftStickX;
259     /*! @brief  左スティックの y 軸( -1.0f ~ 1.0f )*/
260     f32               leftStickY;
261     /*! @brief  右スティックの x 軸( -1.0f ~ 1.0f )*/
262     f32               rightStickX;
263     /*! @brief  右スティックの y 軸( -1.0f ~ 1.0f )*/
264     f32               rightStickY;
265 } DebugPadStatus;
266 
267 
268 
269 } // namespace CTR
270 } // namespace hid
271 } // namespace nn
272 
273 #endif  //  NN_HID_CTR_HID_DEVICESTATUS_H_
274