1 /*---------------------------------------------------------------------------* 2 Project: KPAD library 3 File: kpadold.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 __KPAD_H__ 19 #error KPADOld (kpadOld.h) cannot be used with KPAD version 2 (kpad.h) 20 #endif 21 22 #ifndef __KPADOLD_H__ 23 #define __KPADOLD_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 #ifndef WPADEMU 43 #define KPAD_BUTTON_PLUS WPAD_BUTTON_PLUS 44 #define KPAD_BUTTON_MINUS WPAD_BUTTON_MINUS 45 #define KPAD_BUTTON_1 WPAD_BUTTON_1 46 #define KPAD_BUTTON_2 WPAD_BUTTON_2 47 #define KPAD_BUTTON_Z WPAD_BUTTON_Z 48 #define KPAD_BUTTON_C WPAD_BUTTON_C 49 #else 50 #define KPAD_BUTTON_START WPAD_BUTTON_START 51 #define KPAD_BUTTON_SELECT WPAD_BUTTON_SELECT 52 #define KPAD_BUTTON_SMALL_A WPAD_BUTTON_SMALL_A 53 #define KPAD_BUTTON_SMALL_B WPAD_BUTTON_SMALL_B 54 #define KPAD_BUTTON_Z1 WPAD_BUTTON_Z1 55 #define KPAD_BUTTON_Z2 WPAD_BUTTON_Z2 56 #endif // end of WPADEMU 57 58 #define KPAD_CL_BUTTON_UP WPAD_CL_BUTTON_UP 59 #define KPAD_CL_BUTTON_LEFT WPAD_CL_BUTTON_LEFT 60 #define KPAD_CL_TRIGGER_ZR WPAD_CL_TRIGGER_ZR 61 #define KPAD_CL_BUTTON_X WPAD_CL_BUTTON_X 62 #define KPAD_CL_BUTTON_A WPAD_CL_BUTTON_A 63 #define KPAD_CL_BUTTON_Y WPAD_CL_BUTTON_Y 64 #define KPAD_CL_BUTTON_B WPAD_CL_BUTTON_B 65 #define KPAD_CL_TRIGGER_ZL WPAD_CL_TRIGGER_ZL 66 #define KPAD_CL_RESERVED WPAD_CL_RESERVED 67 #define KPAD_CL_TRIGGER_R WPAD_CL_TRIGGER_R 68 #define KPAD_CL_BUTTON_PLUS WPAD_CL_BUTTON_PLUS 69 #define KPAD_CL_BUTTON_HOME WPAD_CL_BUTTON_HOME 70 #define KPAD_CL_BUTTON_MINUS WPAD_CL_BUTTON_MINUS 71 #define KPAD_CL_TRIGGER_L WPAD_CL_TRIGGER_L 72 #define KPAD_CL_BUTTON_DOWN WPAD_CL_BUTTON_DOWN 73 #define KPAD_CL_BUTTON_RIGHT WPAD_CL_BUTTON_RIGHT 74 75 76 #ifdef WPADEMU 77 #define KPAD_GC_BUTTON_LEFT PAD_BUTTON_LEFT 78 #define KPAD_GC_BUTTON_RIGHT PAD_BUTTON_RIGHT 79 #define KPAD_GC_BUTTON_DOWN PAD_BUTTON_DOWN 80 #define KPAD_GC_BUTTON_UP PAD_BUTTON_UP 81 #define KPAD_GC_TRIGGER_Z PAD_TRIGGER_Z 82 #define KPAD_GC_TRIGGER_R PAD_TRIGGER_R 83 #define KPAD_GC_TRIGGER_L PAD_TRIGGER_L 84 #define KPAD_GC_BUTTON_Z PAD_TRIGGER_Z 85 #define KPAD_GC_BUTTON_R PAD_TRIGGER_R 86 #define KPAD_GC_BUTTON_L PAD_TRIGGER_L 87 #define KPAD_GC_BUTTON_A PAD_BUTTON_A 88 #define KPAD_GC_BUTTON_B PAD_BUTTON_B 89 #define KPAD_GC_BUTTON_X PAD_BUTTON_X 90 #define KPAD_GC_BUTTON_Y PAD_BUTTON_Y 91 #define KPAD_GC_BUTTON_START PAD_BUTTON_START 92 #endif // end of WPADEMU 93 94 #define KPAD_BUTTON_MASK 0x0000ffff 95 #define KPAD_BUTTON_RPT 0x80000000 96 97 #define KPAD_RING_BUFS 12 98 #define KPAD_MAX_READ_BUFS 10 99 100 101 typedef struct Vec2{ 102 f32 x; 103 f32 y; 104 } Vec2; 105 106 typedef struct Rect { 107 f32 left; 108 f32 top; 109 f32 right; 110 f32 bottom; 111 } Rect; 112 113 typedef union KPADEXStatus{ 114 struct { 115 Vec2 stick ; 116 117 Vec acc ; 118 f32 acc_value ; 119 f32 acc_speed ; 120 } fs ; 121 122 struct { 123 u32 hold; 124 u32 trig; 125 u32 release; 126 127 Vec2 lstick; 128 Vec2 rstick; 129 130 f32 ltrigger; 131 f32 rtrigger; 132 } cl ; 133 134 struct { 135 Vec2 stick ; 136 Vec2 substick ; 137 138 f32 ltrigger ; 139 f32 rtrigger ; 140 } gc ; 141 } KPADEXStatus ; 142 143 #ifdef __MWERKS__ 144 #pragma warn_padding off 145 #endif 146 typedef struct KPADStatus{ 147 u32 hold ; 148 u32 trig ; 149 u32 release ; 150 151 Vec acc ; 152 f32 acc_value ; 153 f32 acc_speed ; 154 155 Vec2 pos ; 156 Vec2 vec ; 157 f32 speed ; 158 159 Vec2 horizon ; 160 Vec2 hori_vec ; 161 f32 hori_speed ; 162 163 f32 dist ; 164 f32 dist_vec ; 165 f32 dist_speed ; 166 167 Vec2 acc_vertical ; 168 169 u32 dev_type ; 170 171 KPADEXStatus ex_status ; 172 173 s8 dpd_valid_fg ; 174 s8 wpad_err ; 175 // 2 bytes padding 176 } KPADStatus ; 177 #ifdef __MWERKS__ 178 #pragma warn_padding reset 179 #endif 180 181 182 void KPADInit ( void ) ; 183 void KPADReset( void ) ; 184 s32 KPADRead ( s32 chan, KPADStatus samplingBufs[], u32 length ) ; 185 186 void KPADSetPosParam ( s32 chan, f32 play_radius, f32 sensitivity ) ; 187 void KPADSetHoriParam( s32 chan, f32 play_radius, f32 sensitivity ) ; 188 void KPADSetDistParam( s32 chan, f32 play_radius, f32 sensitivity ) ; 189 void KPADSetAccParam ( s32 chan, f32 play_radius, f32 sensitivity ) ; 190 191 void KPADSetBtnRepeat( s32 chan, f32 delay_sec, f32 pulse_sec ) ; 192 193 void KPADSetObjInterval ( f32 interval ) ; 194 s32 KPADCalibrateDPD ( s32 chan ) ; 195 void KPADSetSensorHeight ( s32 chan, f32 level ) ; 196 197 WPADStatus *KPADGetWPADRingBuffer ( s32 chan ) ; 198 WPADFSStatus *KPADGetWPADFSRingBuffer( s32 chan ) ; 199 WPADCLStatus *KPADGetWPADCLRingBuffer( s32 chan ) ; 200 201 void KPADSetFSStickClamp ( s8 min, s8 max ) ; 202 203 void KPADDisableDPD( s32 chan ); 204 void KPADEnableDPD ( s32 chan ); 205 206 #define KPAD_STATE_CTRL_DPD_START 0 207 #define KPAD_STATE_CTRL_DPD_FINISHED 1 208 209 typedef void ( *KPADControlDpdCallback )( s32 chan, s32 reason ); 210 211 void KPADSetControlDpdCallback( s32 chan, KPADControlDpdCallback callback ); 212 213 214 void KPADEnableAimingMode ( s32 chan ); 215 void KPADDisableAimingMode( s32 chan ); 216 217 void KPADGetProjectionPos( Vec2 *dst, const Vec2 *src, const Rect *projRect, f32 viRatio ); 218 219 #ifdef WPADEMU 220 void KPADSetGCStickClamp ( s8 min, s8 max ) ; 221 void KPADSetGCSubstickClamp( s8 min, s8 max ) ; 222 void KPADSetGCTriggerClamp ( u8 min, u8 max ) ; 223 #endif // end of WPADEMU 224 225 226 227 228 #ifdef __cplusplus 229 } 230 #endif 231 232 #endif // __KPADOLD_H__ 233