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