1 /*---------------------------------------------------------------------------* 2 Project: KPAD library 3 File: kpad.h 4 Programmers: Keizo Ohta 5 HIRATSU Daisuke 6 7 Copyright 2005 Nintendo. All rights reserved. 8 9 These coded instructions, statements, and computer programs contain 10 proprietary information of Nintendo of America Inc. and/or Nintendo 11 Company Ltd., and are protected by Federal copyright law. They may 12 not be disclosed to third parties or copied or duplicated in any form, 13 in whole or in part, without the prior written consent of Nintendo. 14 *---------------------------------------------------------------------------*/ 15 16 #ifndef __KPAD_H__ 17 #define __KPAD_H__ 18 19 #include <revolution/wpad.h> 20 #include <revolution/types.h> 21 #include <revolution/mtx/GeoTypes.h> 22 23 #ifdef __cplusplus 24 extern "C" { 25 #endif 26 27 28 #define KPAD_BUTTON_LEFT WPAD_BUTTON_LEFT 29 #define KPAD_BUTTON_RIGHT WPAD_BUTTON_RIGHT 30 #define KPAD_BUTTON_DOWN WPAD_BUTTON_DOWN 31 #define KPAD_BUTTON_UP WPAD_BUTTON_UP 32 #define KPAD_BUTTON_A WPAD_BUTTON_A 33 #define KPAD_BUTTON_B WPAD_BUTTON_B 34 #define KPAD_BUTTON_HOME WPAD_BUTTON_HOME 35 36 #ifndef WPADEMU 37 #define KPAD_BUTTON_PLUS WPAD_BUTTON_PLUS 38 #define KPAD_BUTTON_MINUS WPAD_BUTTON_MINUS 39 #define KPAD_BUTTON_1 WPAD_BUTTON_1 40 #define KPAD_BUTTON_2 WPAD_BUTTON_2 41 #define KPAD_BUTTON_Z WPAD_BUTTON_Z 42 #define KPAD_BUTTON_C WPAD_BUTTON_C 43 #else 44 #define KPAD_BUTTON_START WPAD_BUTTON_START 45 #define KPAD_BUTTON_SELECT WPAD_BUTTON_SELECT 46 #define KPAD_BUTTON_SMALL_A WPAD_BUTTON_SMALL_A 47 #define KPAD_BUTTON_SMALL_B WPAD_BUTTON_SMALL_B 48 #define KPAD_BUTTON_Z1 WPAD_BUTTON_Z1 49 #define KPAD_BUTTON_Z2 WPAD_BUTTON_Z2 50 #endif // end of WPADEMU 51 52 #define KPAD_CL_BUTTON_UP WPAD_CL_BUTTON_UP 53 #define KPAD_CL_BUTTON_LEFT WPAD_CL_BUTTON_LEFT 54 #define KPAD_CL_TRIGGER_ZR WPAD_CL_TRIGGER_ZR 55 #define KPAD_CL_BUTTON_X WPAD_CL_BUTTON_X 56 #define KPAD_CL_BUTTON_A WPAD_CL_BUTTON_A 57 #define KPAD_CL_BUTTON_Y WPAD_CL_BUTTON_Y 58 #define KPAD_CL_BUTTON_B WPAD_CL_BUTTON_B 59 #define KPAD_CL_TRIGGER_ZL WPAD_CL_TRIGGER_ZL 60 #define KPAD_CL_RESERVED WPAD_CL_RESERVED 61 #define KPAD_CL_TRIGGER_R WPAD_CL_TRIGGER_R 62 #define KPAD_CL_BUTTON_PLUS WPAD_CL_BUTTON_PLUS 63 #define KPAD_CL_BUTTON_HOME WPAD_CL_BUTTON_HOME 64 #define KPAD_CL_BUTTON_MINUS WPAD_CL_BUTTON_MINUS 65 #define KPAD_CL_TRIGGER_L WPAD_CL_TRIGGER_L 66 #define KPAD_CL_BUTTON_DOWN WPAD_CL_BUTTON_DOWN 67 #define KPAD_CL_BUTTON_RIGHT WPAD_CL_BUTTON_RIGHT 68 69 70 #ifdef WPADEMU 71 #define KPAD_GC_BUTTON_LEFT PAD_BUTTON_LEFT 72 #define KPAD_GC_BUTTON_RIGHT PAD_BUTTON_RIGHT 73 #define KPAD_GC_BUTTON_DOWN PAD_BUTTON_DOWN 74 #define KPAD_GC_BUTTON_UP PAD_BUTTON_UP 75 #define KPAD_GC_TRIGGER_Z PAD_TRIGGER_Z 76 #define KPAD_GC_TRIGGER_R PAD_TRIGGER_R 77 #define KPAD_GC_TRIGGER_L PAD_TRIGGER_L 78 #define KPAD_GC_BUTTON_Z PAD_TRIGGER_Z 79 #define KPAD_GC_BUTTON_R PAD_TRIGGER_R 80 #define KPAD_GC_BUTTON_L PAD_TRIGGER_L 81 #define KPAD_GC_BUTTON_A PAD_BUTTON_A 82 #define KPAD_GC_BUTTON_B PAD_BUTTON_B 83 #define KPAD_GC_BUTTON_X PAD_BUTTON_X 84 #define KPAD_GC_BUTTON_Y PAD_BUTTON_Y 85 #define KPAD_GC_BUTTON_START PAD_BUTTON_START 86 #endif // end of WPADEMU 87 88 #define KPAD_BUTTON_MASK 0x0000ffff 89 #define KPAD_BUTTON_RPT 0x80000000 90 91 #define KPAD_RING_BUFS 12 92 #define KPAD_MAX_READ_BUFS 10 93 94 95 typedef struct Vec2{ 96 f32 x; 97 f32 y; 98 } Vec2; 99 100 typedef union KPADEXStatus{ 101 struct { 102 Vec2 stick ; 103 104 Vec acc ; 105 f32 acc_value ; 106 f32 acc_speed ; 107 } fs ; 108 109 struct { 110 u32 hold; 111 u32 trig; 112 u32 release; 113 114 Vec2 lstick; 115 Vec2 rstick; 116 117 f32 ltrigger; 118 f32 rtrigger; 119 } cl ; 120 121 struct { 122 Vec2 stick ; 123 Vec2 substick ; 124 125 f32 ltrigger ; 126 f32 rtrigger ; 127 } gc ; 128 } KPADEXStatus ; 129 130 #ifdef __MWERKS__ 131 #pragma warn_padding off 132 #endif 133 typedef struct KPADStatus{ 134 u32 hold ; 135 u32 trig ; 136 u32 release ; 137 138 Vec acc ; 139 f32 acc_value ; 140 f32 acc_speed ; 141 142 Vec2 pos ; 143 Vec2 vec ; 144 f32 speed ; 145 146 Vec2 horizon ; 147 Vec2 hori_vec ; 148 f32 hori_speed ; 149 150 f32 dist ; 151 f32 dist_vec ; 152 f32 dist_speed ; 153 154 Vec2 acc_vertical ; 155 156 u32 dev_type ; 157 158 KPADEXStatus ex_status ; 159 160 s8 dpd_valid_fg ; 161 s8 wpad_err ; 162 // 2 bytes padding 163 } KPADStatus ; 164 #ifdef __MWERKS__ 165 #pragma warn_padding reset 166 #endif 167 168 169 void KPADInit ( void ) ; 170 void KPADReset( void ) ; 171 s32 KPADRead ( s32 chan, KPADStatus samplingBufs[], u32 length ) ; 172 173 void KPADSetPosParam ( s32 chan, f32 play_radius, f32 sensitivity ) ; 174 void KPADSetHoriParam( s32 chan, f32 play_radius, f32 sensitivity ) ; 175 void KPADSetDistParam( s32 chan, f32 play_radius, f32 sensitivity ) ; 176 void KPADSetAccParam ( s32 chan, f32 play_radius, f32 sensitivity ) ; 177 178 void KPADSetBtnRepeat( s32 chan, f32 delay_sec, f32 pulse_sec ) ; 179 180 void KPADSetObjInterval ( f32 interval ) ; 181 s32 KPADCalibrateDPD ( s32 chan ) ; 182 void KPADSetSensorHeight ( s32 chan, f32 level ) ; 183 void KPADGetCalibratedDPD( Vec2* dst, const Vec2* src ) ; 184 185 WPADStatus *KPADGetWPADRingBuffer ( s32 chan ) ; 186 WPADFSStatus *KPADGetWPADFSRingBuffer( s32 chan ) ; 187 WPADCLStatus *KPADGetWPADCLRingBuffer( s32 chan ) ; 188 189 void KPADSetFSStickClamp ( s8 min, s8 max ) ; 190 191 #ifdef WPADEMU 192 void KPADSetGCStickClamp ( s8 min, s8 max ) ; 193 void KPADSetGCSubstickClamp( s8 min, s8 max ) ; 194 void KPADSetGCTriggerClamp ( u8 min, u8 max ) ; 195 #endif // end of WPADEMU 196 197 #ifdef __cplusplus 198 } 199 #endif 200 201 #endif // __KPAD_H__ 202