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-2006 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/types.h> 27 #include <revolution/mtx/GeoTypes.h> 28 29 #ifdef __cplusplus 30 extern "C" { 31 #endif 32 33 34 #define KPAD_BUTTON_LEFT WPAD_BUTTON_LEFT 35 #define KPAD_BUTTON_RIGHT WPAD_BUTTON_RIGHT 36 #define KPAD_BUTTON_DOWN WPAD_BUTTON_DOWN 37 #define KPAD_BUTTON_UP WPAD_BUTTON_UP 38 #define KPAD_BUTTON_A WPAD_BUTTON_A 39 #define KPAD_BUTTON_B WPAD_BUTTON_B 40 #define KPAD_BUTTON_HOME WPAD_BUTTON_HOME 41 42 #define KPAD_BUTTON_PLUS WPAD_BUTTON_PLUS 43 #define KPAD_BUTTON_MINUS WPAD_BUTTON_MINUS 44 #define KPAD_BUTTON_1 WPAD_BUTTON_1 45 #define KPAD_BUTTON_2 WPAD_BUTTON_2 46 #define KPAD_BUTTON_Z WPAD_BUTTON_Z 47 #define KPAD_BUTTON_C WPAD_BUTTON_C 48 49 #define KPAD_CL_BUTTON_UP WPAD_CL_BUTTON_UP 50 #define KPAD_CL_BUTTON_LEFT WPAD_CL_BUTTON_LEFT 51 #define KPAD_CL_TRIGGER_ZR WPAD_CL_TRIGGER_ZR 52 #define KPAD_CL_BUTTON_X WPAD_CL_BUTTON_X 53 #define KPAD_CL_BUTTON_A WPAD_CL_BUTTON_A 54 #define KPAD_CL_BUTTON_Y WPAD_CL_BUTTON_Y 55 #define KPAD_CL_BUTTON_B WPAD_CL_BUTTON_B 56 #define KPAD_CL_TRIGGER_ZL WPAD_CL_TRIGGER_ZL 57 #define KPAD_CL_RESERVED WPAD_CL_RESERVED 58 #define KPAD_CL_TRIGGER_R WPAD_CL_TRIGGER_R 59 #define KPAD_CL_BUTTON_PLUS WPAD_CL_BUTTON_PLUS 60 #define KPAD_CL_BUTTON_HOME WPAD_CL_BUTTON_HOME 61 #define KPAD_CL_BUTTON_MINUS WPAD_CL_BUTTON_MINUS 62 #define KPAD_CL_TRIGGER_L WPAD_CL_TRIGGER_L 63 #define KPAD_CL_BUTTON_DOWN WPAD_CL_BUTTON_DOWN 64 #define KPAD_CL_BUTTON_RIGHT WPAD_CL_BUTTON_RIGHT 65 66 #define KPAD_BUTTON_MASK 0x0000ffff 67 #define KPAD_BUTTON_RPT 0x80000000 68 69 #define KPAD_RING_BUFS 16 70 #define KPAD_MAX_READ_BUFS KPAD_RING_BUFS 71 72 typedef enum KPADPlayMode { 73 KPAD_PLAY_MODE_LOOSE = 0, 74 KPAD_PLAY_MODE_TIGHT 75 } KPADPlayMode ; 76 77 typedef struct Vec2{ 78 f32 x; 79 f32 y; 80 } Vec2; 81 82 typedef struct Rect { 83 f32 left; 84 f32 top; 85 f32 right; 86 f32 bottom; 87 } Rect; 88 89 typedef union KPADEXStatus{ 90 struct { 91 Vec2 stick ; 92 93 Vec acc ; 94 f32 acc_value ; 95 f32 acc_speed ; 96 } fs ; 97 98 struct { 99 u32 hold; 100 u32 trig; 101 u32 release; 102 103 Vec2 lstick; 104 Vec2 rstick; 105 106 f32 ltrigger; 107 f32 rtrigger; 108 } cl ; 109 } KPADEXStatus ; 110 111 typedef struct KPADStatus{ 112 u32 hold ; 113 u32 trig ; 114 u32 release ; 115 116 Vec acc ; 117 f32 acc_value ; 118 f32 acc_speed ; 119 120 Vec2 pos ; 121 Vec2 vec ; 122 f32 speed ; 123 124 Vec2 horizon ; 125 Vec2 hori_vec ; 126 f32 hori_speed ; 127 128 f32 dist ; 129 f32 dist_vec ; 130 f32 dist_speed ; 131 132 Vec2 acc_vertical ; 133 134 u8 dev_type ; 135 s8 wpad_err ; 136 s8 dpd_valid_fg ; 137 u8 data_format ; 138 139 KPADEXStatus ex_status ; 140 } KPADStatus ; 141 142 void KPADInit ( void ) ; 143 void KPADReset( void ) ; 144 s32 KPADRead ( s32 chan, KPADStatus samplingBufs[], u32 length ) ; 145 146 void KPADSetPosParam ( s32 chan, f32 play_radius, f32 sensitivity ) ; 147 void KPADSetHoriParam( s32 chan, f32 play_radius, f32 sensitivity ) ; 148 void KPADSetDistParam( s32 chan, f32 play_radius, f32 sensitivity ) ; 149 void KPADSetAccParam ( s32 chan, f32 play_radius, f32 sensitivity ) ; 150 151 void KPADGetPosParam ( s32 chan, f32 *play_radius, f32 *sensitivity ) ; 152 void KPADGetHoriParam( s32 chan, f32 *play_radius, f32 *sensitivity ) ; 153 void KPADGetDistParam( s32 chan, f32 *play_radius, f32 *sensitivity ) ; 154 void KPADGetAccParam ( s32 chan, f32 *play_radius, f32 *sensitivity ) ; 155 156 void KPADSetBtnRepeat( s32 chan, f32 delay_sec, f32 pulse_sec ) ; 157 158 void KPADSetObjInterval ( f32 interval ) ; 159 s32 KPADCalibrateDPD ( s32 chan ) ; 160 void KPADSetSensorHeight ( s32 chan, f32 level ) ; 161 162 // These APIs are not recommended. 163 // Please use KPADGetUnifiedWpadStatus() instead. 164 // These are provided for compatibility with KPADOld. But not 100% compatible. 165 166 WPADStatus *KPADGetWPADRingBuffer ( s32 chan ) ; 167 WPADFSStatus *KPADGetWPADFSRingBuffer( s32 chan ) ; 168 WPADCLStatus *KPADGetWPADCLRingBuffer( s32 chan ) ; 169 170 void KPADSetFSStickClamp ( s8 min, s8 max ) ; 171 172 void KPADDisableDPD( s32 chan ) ; 173 void KPADEnableDPD ( s32 chan ) ; 174 175 #define KPAD_STATE_CTRL_DPD_START 0 176 #define KPAD_STATE_CTRL_DPD_FINISHED 1 177 178 typedef void ( *KPADControlDpdCallback )( s32 chan, s32 reason ) ; 179 180 void KPADSetControlDpdCallback( s32 chan, KPADControlDpdCallback callback ) ; 181 182 183 void KPADEnableAimingMode ( s32 chan ) ; 184 void KPADDisableAimingMode( s32 chan ) ; 185 186 void KPADGetProjectionPos( Vec2 *dst, const Vec2 *src, const Rect *projRect, f32 viRatio ) ; 187 188 189 typedef struct KPADUnifiedWpadStatus { 190 union { 191 WPADStatus core ; 192 WPADFSStatus fs ; 193 WPADCLStatus cl ; 194 } u ; 195 u8 fmt ; 196 u8 padding ; 197 } KPADUnifiedWpadStatus ; 198 199 void KPADGetUnifiedWpadStatus( s32 chan, KPADUnifiedWpadStatus *dst, u32 count ) ; 200 201 void KPADEnableStickCrossClamp ( void ) ; 202 void KPADDisableStickCrossClamp( void ) ; 203 204 void KPADSetSamplingCallback( s32 chan, WPADSamplingCallback callback ) ; 205 206 void KPADSetReviseMode ( s32 chan, BOOL sw ) ; 207 f32 KPADReviseAcc ( Vec *acc ) ; 208 f32 KPADGetReviseAngle( void ) ; 209 210 void KPADSetPosPlayMode ( s32 chan, KPADPlayMode mode ) ; 211 void KPADSetHoriPlayMode( s32 chan, KPADPlayMode mode ) ; 212 void KPADSetDistPlayMode( s32 chan, KPADPlayMode mode ) ; 213 void KPADSetAccPlayMode ( s32 chan, KPADPlayMode mode ) ; 214 215 KPADPlayMode KPADGetPosPlayMode ( s32 chan ) ; 216 KPADPlayMode KPADGetHoriPlayMode( s32 chan ) ; 217 KPADPlayMode KPADGetDistPlayMode( s32 chan ) ; 218 KPADPlayMode KPADGetAccPlayMode ( s32 chan ) ; 219 220 #ifdef __cplusplus 221 } 222 #endif 223 224 #endif // __KPAD_H__ 225