]> icculus.org git repositories - btb/d2x.git/blob - arch/include/joy.h
add axis invert cvars
[btb/d2x.git] / arch / include / joy.h
1 /*
2 THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX
3 SOFTWARE CORPORATION ("PARALLAX").  PARALLAX, IN DISTRIBUTING THE CODE TO
4 END-USERS, AND SUBJECT TO ALL OF THE TERMS AND CONDITIONS HEREIN, GRANTS A
5 ROYALTY-FREE, PERPETUAL LICENSE TO SUCH END-USERS FOR USE BY SUCH END-USERS
6 IN USING, DISPLAYING,  AND CREATING DERIVATIVE WORKS THEREOF, SO LONG AS
7 SUCH USE, DISPLAY OR CREATION IS FOR NON-COMMERCIAL, ROYALTY OR REVENUE
8 FREE PURPOSES.  IN NO EVENT SHALL THE END-USER USE THE COMPUTER CODE
9 CONTAINED HEREIN FOR REVENUE-BEARING PURPOSES.  THE END-USER UNDERSTANDS
10 AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE.
11 COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION.  ALL RIGHTS RESERVED.
12 */
13
14 /*
15  *
16  * Header for joystick functions
17  *
18  */
19
20 #ifndef _JOY_H
21 #define _JOY_H
22
23 #include "pstypes.h"
24 #include "fix.h"
25 #include "console.h"
26
27
28 // added October 24, 2000 20:40  Steven Mueller: more than 4 joysticks now
29 #define MAX_JOY_DEVS 8
30 #define JOY_1_BUTTON_A  1
31 #define JOY_1_BUTTON_B  2
32 #define JOY_2_BUTTON_A  4
33 #define JOY_2_BUTTON_B  8
34 #define JOY_ALL_BUTTONS (1+2+4+8)
35
36 #define JOY_1_X_AXIS        1
37 #define JOY_1_Y_AXIS        2
38 #define JOY_1_Z_AXIS        4
39 #define JOY_1_R_AXIS        16
40 #define JOY_1_U_AXIS        32
41 #define JOY_1_V_AXIS        64
42
43 #define JOY_MAX_AXES        32
44
45 #if defined USE_LINUX_JOY
46 #define JOY_NUM_AXES        5
47 #else
48 #define JOY_NUM_AXES        4
49 #endif
50
51 #define JOY_2_X_AXIS        4
52 #define JOY_2_Y_AXIS        8
53 #define JOY_ALL_AXIS        (1+2+4+8)
54
55 #define JOY_SLOW_READINGS       1
56 #define JOY_POLLED_READINGS     2
57 #define JOY_BIOS_READINGS       4
58 /* not present in d2src, maybe we don't really need it? */
59 #define JOY_FRIENDLY_READINGS   8
60
61 #ifdef USE_LINUX_JOY
62 #define JOY_MAX_BUTTONS 64
63 #else
64 #define JOY_MAX_BUTTONS 32
65 #endif
66
67
68 // Axis mapping cvars
69 // 0 = no action
70 // 1 = move forward/back
71 // 2 = look up/down
72 // 3 = move left/right
73 // 4 = look left/right
74 // 5 = move up/down
75 // 6 = bank left/right
76
77 extern cvar_t joy_advaxes[];
78 extern cvar_t joy_invert[];
79
80
81 //==========================================================================
82 // This initializes the joy and does a "quick" calibration which
83 // assumes the stick is centered and sets the minimum value to 0 and
84 // the maximum value to 2 times the centered reading. Returns 0 if no
85 // joystick was detected, 1 if everything is ok.
86 // joy_init() is called.
87
88 extern int joy_init();
89 extern void joy_close();
90
91 extern char joy_installed;
92 extern char joy_present;
93
94
95 //==========================================================================
96 // The actual number of available axes.  If the arch can't set this
97 // properly, it should set joy_num_axes=JOY_NUM_AXES;
98 extern int joy_num_axes;
99
100
101 //==========================================================================
102 // The following 3 routines can be used to zero in on better joy
103 // calibration factors. To use them, ask the user to hold the stick
104 // in either the upper left, lower right, or center and then have them
105 // press a key or button and then call the appropriate one of these
106 // routines, and it will read the stick and update the calibration factors.
107 // Usually, assuming that the stick was centered when joy_init was
108 // called, you really only need to call joy_set_lr, since the upper
109 // left position is usually always 0,0 on most joys.  But, the safest
110 // bet is to do all three, or let the user choose which ones to set.
111
112 extern void joy_set_ul();
113 extern void joy_set_lr();
114 extern void joy_set_cen();
115
116
117 //==========================================================================
118 // This reads the joystick. X and Y will be between -128 and 127.
119 // Takes about 1 millisecond in the worst case when the stick
120 // is in the lower right hand corner. Always returns 0,0 if no stick
121 // is present.
122
123 extern void joy_get_pos(int *x, int *y);
124
125 //==========================================================================
126 // This just reads the buttons and returns their status.  When bit 0
127 // is 1, button 1 is pressed, when bit 1 is 1, button 2 is pressed.
128 extern int joy_get_btns();
129
130 //==========================================================================
131 // This returns the number of times a button went either down or up since
132 // the last call to this function.
133 #define joy_get_button_up_cnt(btn) key_up_count(KEY_JB1 + (btn))
134 #define joy_get_button_down_cnt(btn) key_down_count(KEY_JB1 + (btn))
135
136 //==========================================================================
137 // This returns how long (in approximate milliseconds) that each of the
138 // buttons has been held down since the last call to this function.
139 // It is the total time... say you pressed it down for 3 ticks, released
140 // it, and held it down for 6 more ticks. The time returned would be 9.
141 #define joy_get_button_down_time(btn) key_down_time(KEY_JB1 + (btn))
142
143 extern ubyte joy_read_raw_buttons();
144 extern ubyte joystick_read_raw_axis(ubyte mask, int *axis);
145 extern void joy_flush();
146 extern ubyte joy_get_present_mask();
147 extern void joy_set_timer_rate(int max_value);
148 extern int joy_get_timer_rate();
149
150 extern int joy_get_button_state(int btn);
151 extern void joy_set_cen_fake(int channel);
152 extern ubyte joy_read_stick(ubyte masks, int *axis);
153 extern void joy_get_cal_vals(int *axis_min, int *axis_center, int *axis_max);
154 extern void joy_set_cal_vals(int *axis_min, int *axis_center, int *axis_max);
155 extern void joy_set_btn_values(int btn, int state, fix timedown, int downcount, int upcount);
156 extern int joy_get_scaled_reading(int raw, int axn);
157 extern void joy_set_slow_reading(int flag);
158
159 #endif // _JOY_H