1 /* $Id: joy.h,v 1.6 2003-12-18 09:56:13 btb Exp $ */
3 THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX
4 SOFTWARE CORPORATION ("PARALLAX"). PARALLAX, IN DISTRIBUTING THE CODE TO
5 END-USERS, AND SUBJECT TO ALL OF THE TERMS AND CONDITIONS HEREIN, GRANTS A
6 ROYALTY-FREE, PERPETUAL LICENSE TO SUCH END-USERS FOR USE BY SUCH END-USERS
7 IN USING, DISPLAYING, AND CREATING DERIVATIVE WORKS THEREOF, SO LONG AS
8 SUCH USE, DISPLAY OR CREATION IS FOR NON-COMMERCIAL, ROYALTY OR REVENUE
9 FREE PURPOSES. IN NO EVENT SHALL THE END-USER USE THE COMPUTER CODE
10 CONTAINED HEREIN FOR REVENUE-BEARING PURPOSES. THE END-USER UNDERSTANDS
11 AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE.
12 COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED.
17 * Header for joystick functions
20 * Revision 1.17 1995/10/07 13:22:30 john
21 * Added new method of reading joystick that allows higher-priority
22 * interrupts to go off.
24 * Revision 1.16 1995/02/14 11:17:13 john
25 * Added BIOS readings for stick.
27 * Revision 1.15 1995/02/14 10:09:58 john
30 * Revision 1.14 1994/12/28 13:49:20 john
31 * Added function to set joystick for slow reading
33 * Revision 1.13 1994/10/13 11:36:06 john
34 * Made joy_down_time be kept track of in fixed seconds,
37 * Revision 1.12 1994/10/12 17:03:16 john
38 * Added prototype for joy_get_scaled_reading.
40 * Revision 1.11 1994/10/12 16:57:55 john
41 * Added function to set a joystick button's state.
43 * Revision 1.10 1994/09/22 16:09:00 john
44 * Fixed some virtual memory lockdown problems with timer and
47 * Revision 1.9 1994/08/31 09:54:57 john
48 * *** empty log message ***
50 * Revision 1.8 1994/08/29 21:02:24 john
51 * Added joy_set_cal_values...
53 * Revision 1.7 1994/08/29 20:51:52 john
54 * Added better cyberman support; also, joystick calibration
55 * value return funcctiionn,
57 * Revision 1.6 1994/07/01 10:55:44 john
58 * Fixed some bugs... added support for 4 axis.
60 * Revision 1.5 1994/06/30 20:36:51 john
61 * Revamped joystick code.
63 * Revision 1.4 1994/04/22 12:52:10 john
64 * *** empty log message ***
66 * Revision 1.3 1994/01/18 13:53:39 john
67 * Made all joystick functions return int's instead of
68 * shorts. Also made the stick reading be CPU speed
69 * independant by using the timer_get_Stamp_64
72 * Revision 1.2 1994/01/18 10:58:42 john
73 * *** empty log message ***
75 * Revision 1.1 1993/07/10 13:10:39 matt
87 #define JOY_1_BUTTON_A 1
88 #define JOY_1_BUTTON_B 2
89 #define JOY_2_BUTTON_A 4
90 #define JOY_2_BUTTON_B 8
91 #define JOY_ALL_BUTTONS (1+2+4+8)
93 #define JOY_1_X_AXIS 1
94 #define JOY_1_Y_AXIS 2
95 #define JOY_1_Z_AXIS 4
96 #define JOY_1_R_AXIS 16
97 #define JOY_1_U_AXIS 32
98 #define JOY_1_V_AXIS 64
101 #define JOY_NUM_AXES 7
102 #elif defined USE_LINUX_JOY
103 #define JOY_NUM_AXES 5
105 #define JOY_NUM_AXES 4
110 #define JOY_ALL_AXIS (1+2+4+8)
111 #define JOY_EXT_AXIS (16+32+64)
113 #define JOY_2_X_AXIS 4
114 #define JOY_2_Y_AXIS 8
115 #define JOY_ALL_AXIS (1+2+4+8)
118 #define JOY_SLOW_READINGS 1
119 #define JOY_POLLED_READINGS 2
120 #define JOY_BIOS_READINGS 4
121 /* not present in d2src, maybe we don't really need it? */
122 #define JOY_FRIENDLY_READINGS 8
125 #define MAX_BUTTONS 64
127 #define MAX_BUTTONS 20
130 //==========================================================================
131 // This initializes the joy and does a "quick" calibration which
132 // assumes the stick is centered and sets the minimum value to 0 and
133 // the maximum value to 2 times the centered reading. Returns 0 if no
134 // joystick was detected, 1 if everything is ok.
135 // joy_init() is called.
139 extern int joy_init(int joy, int spjoy);
141 extern int joy95_init_stick(int joy, int spjoy);
143 extern int joy_init();
145 extern void joy_close();
147 extern char joy_installed;
148 extern char joy_present;
150 //==========================================================================
151 // The following 3 routines can be used to zero in on better joy
152 // calibration factors. To use them, ask the user to hold the stick
153 // in either the upper left, lower right, or center and then have them
154 // press a key or button and then call the appropriate one of these
155 // routines, and it will read the stick and update the calibration factors.
156 // Usually, assuming that the stick was centered when joy_init was
157 // called, you really only need to call joy_set_lr, since the upper
158 // left position is usually always 0,0 on most joys. But, the safest
159 // bet is to do all three, or let the user choose which ones to set.
161 extern void joy_set_ul();
162 extern void joy_set_lr();
163 extern void joy_set_cen();
166 //==========================================================================
167 // This reads the joystick. X and Y will be between -128 and 127.
168 // Takes about 1 millisecond in the worst case when the stick
169 // is in the lower right hand corner. Always returns 0,0 if no stick
172 extern void joy_get_pos(int *x, int *y);
174 //==========================================================================
175 // This just reads the buttons and returns their status. When bit 0
176 // is 1, button 1 is pressed, when bit 1 is 1, button 2 is pressed.
177 extern int joy_get_btns();
179 //==========================================================================
180 // This returns the number of times a button went either down or up since
181 // the last call to this function.
182 extern int joy_get_button_up_cnt(int btn);
183 extern int joy_get_button_down_cnt(int btn);
185 //==========================================================================
186 // This returns how long (in approximate milliseconds) that each of the
187 // buttons has been held down since the last call to this function.
188 // It is the total time... say you pressed it down for 3 ticks, released
189 // it, and held it down for 6 more ticks. The time returned would be 9.
190 extern fix joy_get_button_down_time(int btn);
192 extern ubyte joy_read_raw_buttons();
193 extern ubyte joystick_read_raw_axis(ubyte mask, int *axis);
194 extern void joy_flush();
195 extern ubyte joy_get_present_mask();
196 extern void joy_set_timer_rate(int max_value);
197 extern int joy_get_timer_rate();
199 extern int joy_get_button_state(int btn);
200 extern void joy_set_cen_fake(int channel);
201 extern ubyte joy_read_stick(ubyte masks, int *axis);
202 extern void joy_get_cal_vals(int *axis_min, int *axis_center, int *axis_max);
203 extern void joy_set_cal_vals(int *axis_min, int *axis_center, int *axis_max);
204 extern void joy_set_btn_values(int btn, int state, fix timedown, int downcount, int upcount);
205 extern int joy_get_scaled_reading(int raw, int axn);
206 extern void joy_set_slow_reading(int flag);