1 /*---------------------------------------------------------------------------* 2 Project: KPAD library version 2 3 File: kpad.h 4 Programmers: Keizo Ohta 5 HIRATSU Daisuke 6 Tojo Haruki 7 Tetsuya Sasaki 8 9 Copyright 2005-2009 Nintendo. All rights reserved. 10 11 These coded instructions, statements, and computer programs contain 12 proprietary information of Nintendo of America Inc. and/or Nintendo 13 Company Ltd., and are protected by Federal copyright law. They may 14 not be disclosed to third parties or copied or duplicated in any form, 15 in whole or in part, without the prior written consent of Nintendo. 16 *---------------------------------------------------------------------------*/ 17 18 #ifdef __KPADOLD_H__ 19 #error KPAD version 2 (kpad.h) cannot be used with KPADOld (kpadOld.h) 20 #endif 21 22 #ifndef __KPAD_H__ 23 #define __KPAD_H__ 24 25 #include <revolution/wpad.h> 26 #include <revolution/wpadTrain.h> 27 #include <revolution/wpadGuitar.h> 28 #include <revolution/wpadDrum.h> 29 #include <revolution/wpadTaiko.h> 30 #include <revolution/wpadBalance.h> 31 #include <revolution/wbc.h> 32 #include <revolution/wpadBulk.h> 33 #include <revolution/types.h> 34 #include <revolution/mtx/GeoTypes.h> 35 36 #ifdef __cplusplus 37 extern "C" { 38 #endif 39 40 41 #define KPAD_BUTTON_LEFT WPAD_BUTTON_LEFT 42 #define KPAD_BUTTON_RIGHT WPAD_BUTTON_RIGHT 43 #define KPAD_BUTTON_DOWN WPAD_BUTTON_DOWN 44 #define KPAD_BUTTON_UP WPAD_BUTTON_UP 45 #define KPAD_BUTTON_A WPAD_BUTTON_A 46 #define KPAD_BUTTON_B WPAD_BUTTON_B 47 #define KPAD_BUTTON_HOME WPAD_BUTTON_HOME 48 49 #define KPAD_BUTTON_PLUS WPAD_BUTTON_PLUS 50 #define KPAD_BUTTON_MINUS WPAD_BUTTON_MINUS 51 #define KPAD_BUTTON_1 WPAD_BUTTON_1 52 #define KPAD_BUTTON_2 WPAD_BUTTON_2 53 #define KPAD_BUTTON_Z WPAD_BUTTON_Z 54 #define KPAD_BUTTON_C WPAD_BUTTON_C 55 56 #define KPAD_CL_BUTTON_UP WPAD_CL_BUTTON_UP 57 #define KPAD_CL_BUTTON_LEFT WPAD_CL_BUTTON_LEFT 58 #define KPAD_CL_TRIGGER_ZR WPAD_CL_TRIGGER_ZR 59 #define KPAD_CL_BUTTON_X WPAD_CL_BUTTON_X 60 #define KPAD_CL_BUTTON_A WPAD_CL_BUTTON_A 61 #define KPAD_CL_BUTTON_Y WPAD_CL_BUTTON_Y 62 #define KPAD_CL_BUTTON_B WPAD_CL_BUTTON_B 63 #define KPAD_CL_TRIGGER_ZL WPAD_CL_TRIGGER_ZL 64 #define KPAD_CL_RESERVED WPAD_CL_RESERVED 65 #define KPAD_CL_TRIGGER_R WPAD_CL_TRIGGER_R 66 #define KPAD_CL_BUTTON_PLUS WPAD_CL_BUTTON_PLUS 67 #define KPAD_CL_BUTTON_HOME WPAD_CL_BUTTON_HOME 68 #define KPAD_CL_BUTTON_MINUS WPAD_CL_BUTTON_MINUS 69 #define KPAD_CL_TRIGGER_L WPAD_CL_TRIGGER_L 70 #define KPAD_CL_BUTTON_DOWN WPAD_CL_BUTTON_DOWN 71 #define KPAD_CL_BUTTON_RIGHT WPAD_CL_BUTTON_RIGHT 72 73 #define KPAD_BUTTON_MASK 0x0000ffff 74 #define KPAD_BUTTON_RPT 0x80000000 75 76 #define KPAD_RING_BUFS 16 77 #define KPAD_MAX_READ_BUFS KPAD_RING_BUFS 78 79 #define KPAD_READ_ERR_NONE 0 80 #define KPAD_READ_ERR_NO_DATA -1 81 #define KPAD_READ_ERR_NO_CONTROLLER -2 82 #define KPAD_READ_ERR_SETUP -3 83 #define KPAD_READ_ERR_LOCKED -4 84 #define KPAD_READ_ERR_INIT -5 85 86 #define KPAD_WBC_ERR_EXIST 1 87 #define KPAD_WBC_ERR_NONE 0 88 #define KPAD_WBC_ERR_NO_BATTERY -1 89 #define KPAD_WBC_ERR_SETUP -2 90 #define KPAD_WBC_ERR_WRONG_TEMP -3 91 #define KPAD_WBC_ERR_WRONG_ZERO -4 92 #define KPAD_WBC_ERR_WEIGHT_OVER -5 93 #define KPAD_WBC_ERR_CALIBRATION -6 94 #define KPAD_WBC_ERR_NO_ZEROPOINT -7 95 #define KPAD_WBC_ERR_ZEROPOINT -8 96 97 #define KPAD_WBC_ERR_TGC_READY 1 98 #define KPAD_WBC_ERR_TGC_NONE 0 99 #define KPAD_WBC_ERR_TGC_UNSTABLE -1 100 #define KPAD_WBC_ERR_TGC_UNKNOWN -2 101 #define KPAD_WBC_ERR_TGC_TIMEOUT -3 102 #define KPAD_WBC_ERR_TGC_BUSY -4 103 104 typedef enum KPADPlayMode { 105 KPAD_PLAY_MODE_LOOSE = 0, 106 KPAD_PLAY_MODE_TIGHT 107 } KPADPlayMode ; 108 109 typedef struct Vec2{ 110 f32 x; 111 f32 y; 112 } Vec2; 113 114 typedef struct Rect { 115 f32 left; 116 f32 top; 117 f32 right; 118 f32 bottom; 119 } Rect; 120 121 typedef union KPADEXStatus{ 122 struct { 123 Vec2 stick ; 124 125 Vec acc ; 126 f32 acc_value ; 127 f32 acc_speed ; 128 } fs ; 129 130 struct { 131 u32 hold ; 132 u32 trig ; 133 u32 release ; 134 135 Vec2 lstick ; 136 Vec2 rstick ; 137 138 f32 ltrigger ; 139 f32 rtrigger ; 140 } cl ; 141 142 struct { 143 double tgc_weight ; 144 double weight[ WPAD_PRESS_UNITS ] ; 145 double weight_ave[ WPAD_PRESS_UNITS ] ; 146 s32 weight_err ; 147 s32 tgc_weight_err ; 148 } bl ; 149 } KPADEXStatus ; 150 151 typedef struct KPADMPDir{ 152 Vec X ; 153 Vec Y ; 154 Vec Z ; 155 } KPADMPDir ; 156 157 typedef struct KPADMPStatus{ 158 Vec mpls ; 159 Vec angle ; 160 KPADMPDir dir ; 161 } KPADMPStatus ; 162 163 typedef struct KPADStatus{ 164 u32 hold ; 165 u32 trig ; 166 u32 release ; 167 168 Vec acc ; 169 f32 acc_value ; 170 f32 acc_speed ; 171 172 Vec2 pos ; 173 Vec2 vec ; 174 f32 speed ; 175 176 Vec2 horizon ; 177 Vec2 hori_vec ; 178 f32 hori_speed ; 179 180 f32 dist ; 181 f32 dist_vec ; 182 f32 dist_speed ; 183 184 Vec2 acc_vertical ; 185 186 u8 dev_type ; 187 s8 wpad_err ; 188 s8 dpd_valid_fg ; 189 u8 data_format ; 190 191 KPADEXStatus ex_status ; 192 193 KPADMPStatus mpls ; 194 195 u8 __paddings__[ 4 ] ; 196 197 } KPADStatus ; 198 199 typedef struct KPADUnifiedWpadStatus { 200 union { 201 WPADStatus core ; 202 WPADFSStatus fs ; 203 WPADCLStatus cl ; 204 WPADTRStatus tr ; 205 WPADBLStatus bl ; 206 WPADMPStatus mp ; 207 WPADBKStatus bk ; 208 } u ; 209 u8 fmt ; 210 u8 padding ; 211 } KPADUnifiedWpadStatus ; 212 213 void KPADInit ( void ) ; 214 void KPADInitEx ( KPADUnifiedWpadStatus uniRingBufs[], u32 length ) ; 215 void KPADShutdown( void ) ; 216 void KPADReset ( void ) ; 217 s32 KPADRead ( s32 chan, KPADStatus samplingBufs[], u32 length ) ; 218 s32 KPADReadEx ( s32 chan, KPADStatus samplingBufs[], u32 length, s32 *err ) ; 219 220 void KPADSetPosParam ( s32 chan, f32 play_radius, f32 sensitivity ) ; 221 void KPADSetHoriParam( s32 chan, f32 play_radius, f32 sensitivity ) ; 222 void KPADSetDistParam( s32 chan, f32 play_radius, f32 sensitivity ) ; 223 void KPADSetAccParam ( s32 chan, f32 play_radius, f32 sensitivity ) ; 224 225 void KPADGetPosParam ( s32 chan, f32 *play_radius, f32 *sensitivity ) ; 226 void KPADGetHoriParam( s32 chan, f32 *play_radius, f32 *sensitivity ) ; 227 void KPADGetDistParam( s32 chan, f32 *play_radius, f32 *sensitivity ) ; 228 void KPADGetAccParam ( s32 chan, f32 *play_radius, f32 *sensitivity ) ; 229 230 void KPADSetBtnRepeat( s32 chan, f32 delay_sec, f32 pulse_sec ) ; 231 232 void KPADSetObjInterval ( f32 interval ) ; 233 s32 KPADCalibrateDPD ( s32 chan ) ; 234 void KPADSetSensorHeight ( s32 chan, f32 level ) ; 235 f32 KPADGetSensorHeight ( s32 chan ) ; 236 237 // These APIs are not recommended. 238 // Please use KPADGetUnifiedWpadStatus() instead. 239 // These are provided for compatibility with KPADOld. But not 100% compatible. 240 241 // These APIs are obsolete in SDK3.2 or later 242 /* 243 WPADStatus *KPADGetWPADRingBuffer ( s32 chan ) ; 244 WPADFSStatus *KPADGetWPADFSRingBuffer( s32 chan ) ; 245 WPADCLStatus *KPADGetWPADCLRingBuffer( s32 chan ) ; 246 */ 247 248 void KPADSetFSStickClamp ( s8 min, s8 max ) ; 249 250 void KPADDisableDPD( s32 chan ) ; 251 void KPADEnableDPD ( s32 chan ) ; 252 253 #define KPAD_STATE_CTRL_DPD_START 0 254 #define KPAD_STATE_CTRL_DPD_FINISHED 1 255 256 typedef void ( *KPADControlDpdCallback )( s32 chan, s32 reason ) ; 257 258 void KPADSetControlDpdCallback( s32 chan, KPADControlDpdCallback callback ) ; 259 260 261 void KPADEnableAimingMode ( s32 chan ) ; 262 void KPADDisableAimingMode ( s32 chan ) ; 263 u8 KPADIsEnableAimingMode( s32 chan ) ; 264 265 void KPADGetProjectionPos( Vec2 *dst, const Vec2 *src, const Rect *projRect, f32 viRatio ) ; 266 267 void KPADGetUnifiedWpadStatus( s32 chan, KPADUnifiedWpadStatus *dst, u32 count ) ; 268 269 void KPADEnableStickCrossClamp ( void ) ; 270 void KPADDisableStickCrossClamp( void ) ; 271 272 WPADSamplingCallback KPADSetSamplingCallback( s32 chan, WPADSamplingCallback callback ) ; 273 WPADConnectCallback KPADSetConnectCallback ( s32 chan, WPADConnectCallback callback ) ; 274 275 void KPADSetReviseMode ( s32 chan, BOOL sw ) ; 276 f32 KPADReviseAcc ( Vec *acc ) ; 277 f32 KPADGetReviseAngle( void ) ; 278 279 void KPADSetPosPlayMode ( s32 chan, KPADPlayMode mode ) ; 280 void KPADSetHoriPlayMode( s32 chan, KPADPlayMode mode ) ; 281 void KPADSetDistPlayMode( s32 chan, KPADPlayMode mode ) ; 282 void KPADSetAccPlayMode ( s32 chan, KPADPlayMode mode ) ; 283 284 KPADPlayMode KPADGetPosPlayMode ( s32 chan ) ; 285 KPADPlayMode KPADGetHoriPlayMode( s32 chan ) ; 286 KPADPlayMode KPADGetDistPlayMode( s32 chan ) ; 287 KPADPlayMode KPADGetAccPlayMode ( s32 chan ) ; 288 289 #define KPAD_BUTTON_PROC_MODE_LOOSE 0 290 #define KPAD_BUTTON_PROC_MODE_TIGHT 1 291 292 void KPADSetButtonProcMode( s32 chan, u8 mode ) ; 293 u8 KPADGetButtonProcMode( s32 chan ) ; 294 295 void KPADResetWbcZeroPoint( void ) ; 296 void KPADResetWbcTgcWeight( void ) ; 297 298 void KPADDisableMpls( s32 chan ) ; 299 void KPADEnableMpls ( s32 chan, u8 mode ) ; 300 301 u8 KPADGetMplsStatus( s32 chan ) ; 302 303 #define KPAD_STATE_CTRL_MPLS_FAILED_CL -3 304 #define KPAD_STATE_CTRL_MPLS_FAILED_FS -2 305 #define KPAD_STATE_CTRL_MPLS_FAILED_EXP -2 306 #define KPAD_STATE_CTRL_MPLS_FAILED_STD -1 307 #define KPAD_STATE_CTRL_MPLS_START 0 308 #define KPAD_STATE_CTRL_MPLS_FINISHED 1 309 310 typedef void ( *KPADControlMplsCallback )( s32 chan, s32 reason ) ; 311 312 void KPADSetControlMplsCallback( s32 chan, KPADControlMplsCallback callback ) ; 313 314 u32 KPADGetMplsWorkSize ( void ) ; 315 void KPADSetMplsWorkarea ( void *ptr ) ; 316 void KPADResetMpls ( s32 chan ) ; 317 void KPADSetMplsAngle ( s32 chan, f32 ax, f32 ay, f32 az ) ; 318 void KPADSetMplsDirection ( s32 chan, KPADMPDir *dir ) ; 319 void KPADStartMplsCalibration ( s32 chan ) ; 320 f32 KPADWorkMplsCalibration ( s32 chan ) ; 321 void KPADStopMplsCalibration ( s32 chan ) ; 322 void KPADSetMplsDirectionMag ( s32 chan, f32 mag ) ; 323 324 void KPADEnableMplsZeroPlay ( s32 chan ) ; 325 void KPADEnableMplsDirRevise( s32 chan ) ; 326 void KPADEnableMplsAccRevise( s32 chan ) ; 327 void KPADEnableMplsDpdRevise( s32 chan ) ; 328 329 void KPADDisableMplsZeroPlay ( s32 chan ) ; 330 void KPADDisableMplsDirRevise( s32 chan ) ; 331 void KPADDisableMplsAccRevise( s32 chan ) ; 332 void KPADDisableMplsDpdRevise( s32 chan ) ; 333 334 f32 KPADIsEnableMplsZeroPlay ( s32 chan ) ; 335 f32 KPADIsEnableMplsZeroDrift( s32 chan ) ; 336 f32 KPADIsEnableMplsDirRevise( s32 chan ) ; 337 f32 KPADIsEnableMplsAccRevise( s32 chan ) ; 338 f32 KPADIsEnableMplsDpdRevise( s32 chan ) ; 339 340 void KPADSetMplsZeroPlayParam ( s32 chan, f32 radius ) ; 341 void KPADSetMplsDirReviseParam( s32 chan, f32 revise_pw ) ; 342 void KPADSetMplsAccReviseParam( s32 chan, f32 revise_pw, f32 revise_range ) ; 343 void KPADSetMplsDpdReviseParam( s32 chan, f32 revise_pw ) ; 344 void KPADSetMplsDirReviseBase ( s32 chan, KPADMPDir *base ) ; 345 346 void KPADGetMplsZeroPlayParam ( s32 chan, f32 *radius ) ; 347 void KPADGetMplsDirReviseParam( s32 chan, f32 *revise_pw ) ; 348 void KPADGetMplsAccReviseParam( s32 chan, f32 *revise_pw, f32 *revise_range ) ; 349 void KPADGetMplsDpdReviseParam( s32 chan, f32 *revise_pw ) ; 350 351 void KPADInitMplsZeroPlayParam ( s32 chan ) ; 352 void KPADInitMplsDirReviseParam( s32 chan ) ; 353 void KPADInitMplsAccReviseParam( s32 chan ) ; 354 void KPADInitMplsDpdReviseParam( s32 chan ) ; 355 356 typedef enum KPADMplsZeroDriftMode { 357 KPAD_MPLS_ZERODRIFT_LOOSE = 0, 358 KPAD_MPLS_ZERODRIFT_STANDARD, 359 KPAD_MPLS_ZERODRIFT_TIGHT 360 } KPADMplsZeroDriftMode ; 361 362 void KPADInitMplsZeroDriftMode( s32 chan ) ; 363 void KPADSetMplsZeroDriftMode ( s32 chan, KPADMplsZeroDriftMode mode ) ; 364 void KPADGetMplsZeroDriftMode ( s32 chan, KPADMplsZeroDriftMode *mode ) ; 365 366 void KPADSetMplsMagnification ( s32 chan, f32 pitch, f32 yaw, f32 roll ) ; 367 368 #ifdef __cplusplus 369 } 370 #endif 371 372 #endif // __KPAD_H__ 373