|
1 /*****************************************************************************/ |
|
2 /* */ |
|
3 /* COPYRIGHT Copyright (C) 1995 IBM Corporation */ |
|
4 /* */ |
|
5 /* The following IBM OS/2 source code is provided to you solely for */ |
|
6 /* the purpose of assisting you in your development of OS/2 device */ |
|
7 /* drivers. You may use this code in accordance with the IBM License */ |
|
8 /* Agreement provided in the IBM Device Driver Source Kit for OS/2. This */ |
|
9 /* Copyright statement may not be removed. */ |
|
10 /* */ |
|
11 /*****************************************************************************/ |
|
12 #ifndef JOYOS2_H |
|
13 #define JOYOS2_H |
|
14 |
|
15 /****** GAMEPORT.SYS joystick definitions, start *****************************/ |
|
16 #define GAME_VERSION 0x20 /* 2.0 First IBM version */ |
|
17 #define GAMEPDDNAME "GAME$ " |
|
18 #define IOCTL_CAT_USER 0x80 |
|
19 #define GAME_PORT_GET 0x20 /* read GAMEPORT.SYS values */ |
|
20 #define GAME_PORT_RESET 0x60 /* reset joystick mask with given value */ |
|
21 |
|
22 #pragma pack(1) /* pack structure size is 1 byte */ |
|
23 typedef struct { /* GAMEPORT.SYS structure */ |
|
24 USHORT usJs_AxCnt; /* Joystick_A X position */ |
|
25 USHORT usJs_AyCnt; /* Joystick_A Y position */ |
|
26 USHORT usJs_BxCnt; /* Joystick_B X position */ |
|
27 USHORT usJs_ByCnt; /* Joystick_B Y position */ |
|
28 USHORT usJs_ButtonA1Cnt; /* button A1 press count */ |
|
29 USHORT usJs_ButtonA2Cnt; /* button A2 press count */ |
|
30 USHORT usJs_ButtonB1Cnt; /* button B1 press count */ |
|
31 USHORT usJs_ButtonB2Cnt; /* button B2 press count */ |
|
32 UCHAR ucJs_JoyStickMask; /* mask of connected joystick pots */ |
|
33 UCHAR ucJs_ButtonStatus; /* bits of switches down */ |
|
34 ULONG ulJs_Ticks; /* joystick clock ticks */ |
|
35 } GAME_PORT_STRUCT; |
|
36 #pragma pack() /*reset to normal pack size */ |
|
37 /****** GAMEPORT.SYS joystick definitions, end *******************************/ |
|
38 |
|
39 |
|
40 /****************************************************************************/ |
|
41 #define GAME_GET_VERSION 0x01 |
|
42 #define GAME_GET_PARMS 0x02 |
|
43 #define GAME_SET_PARMS 0x03 |
|
44 #define GAME_GET_CALIB 0x04 |
|
45 #define GAME_SET_CALIB 0x05 |
|
46 #define GAME_GET_DIGSET 0x06 |
|
47 #define GAME_SET_DIGSET 0x07 |
|
48 #define GAME_GET_STATUS 0x10 |
|
49 #define GAME_GET_STATUS_BUTWAIT 0x11 |
|
50 #define GAME_GET_STATUS_SAMPWAIT 0x12 |
|
51 /****************************************************************************/ |
|
52 |
|
53 /****************************************************************************/ |
|
54 // bit masks for each axis |
|
55 #define JOY_AX_BIT 0x01 |
|
56 #define JOY_AY_BIT 0x02 |
|
57 #define JOY_A_BITS (JOY_AX_BIT|JOY_AY_BIT) |
|
58 #define JOY_BX_BIT 0x04 |
|
59 #define JOY_BY_BIT 0x08 |
|
60 #define JOY_B_BITS (JOY_BX_BIT|JOY_BY_BIT) |
|
61 #define JOY_ALLPOS_BITS (JOY_A_BITS|JOY_B_BITS) |
|
62 |
|
63 // bit masks for each button |
|
64 #define JOY_BUT1_BIT 0x10 |
|
65 #define JOY_BUT2_BIT 0x20 |
|
66 #define JOY_BUT3_BIT 0x40 |
|
67 #define JOY_BUT4_BIT 0x80 |
|
68 #define JOY_ALL_BUTS (JOY_BUT1_BIT|JOY_BUT2_BIT|JOY_BUT3_BIT|JOY_BUT4_BIT) |
|
69 /****************************************************************************/ |
|
70 |
|
71 /****************************************************************************/ |
|
72 // 1-D position struct used for each axis |
|
73 typedef SHORT GAME_POS; /* some data formats require signed values */ |
|
74 |
|
75 // simple 2-D position for each joystick |
|
76 typedef struct |
|
77 { |
|
78 GAME_POS x; |
|
79 GAME_POS y; |
|
80 } |
|
81 GAME_2DPOS_STRUCT; |
|
82 |
|
83 // struct defining the instantaneous state of both sticks and all buttons |
|
84 typedef struct |
|
85 { |
|
86 GAME_2DPOS_STRUCT A; |
|
87 GAME_2DPOS_STRUCT B; |
|
88 USHORT butMask; |
|
89 } |
|
90 GAME_DATA_STRUCT; |
|
91 |
|
92 // struct to be used for calibration and digital response on each axis |
|
93 typedef struct |
|
94 { |
|
95 GAME_POS lower; |
|
96 GAME_POS centre; |
|
97 GAME_POS upper; |
|
98 } |
|
99 GAME_3POS_STRUCT; |
|
100 /****************************************************************************/ |
|
101 |
|
102 /****************************************************************************/ |
|
103 // status struct returned to OS/2 applications: |
|
104 // current data for all sticks as well as button counts since last read |
|
105 typedef struct |
|
106 { |
|
107 GAME_DATA_STRUCT curdata; |
|
108 USHORT b1cnt; |
|
109 USHORT b2cnt; |
|
110 USHORT b3cnt; |
|
111 USHORT b4cnt; |
|
112 } |
|
113 GAME_STATUS_STRUCT; |
|
114 /****************************************************************************/ |
|
115 |
|
116 /****************************************************************************/ |
|
117 /* in use bitmasks originating in 0.2b */ |
|
118 #define GAME_USE_BOTH_OLDMASK 0x01 /* for backward compat with bool */ |
|
119 #define GAME_USE_X_NEWMASK 0x02 |
|
120 #define GAME_USE_Y_NEWMASK 0x04 |
|
121 #define GAME_USE_X_EITHERMASK (GAME_USE_X_NEWMASK|GAME_USE_BOTH_OLDMASK) |
|
122 #define GAME_USE_Y_EITHERMASK (GAME_USE_Y_NEWMASK|GAME_USE_BOTH_OLDMASK) |
|
123 #define GAME_USE_BOTH_NEWMASK (GAME_USE_X_NEWMASK|GAME_USE_Y_NEWMASK) |
|
124 |
|
125 /* only timed sampling implemented in version 1.0 */ |
|
126 #define GAME_MODE_TIMED 1 /* timed sampling */ |
|
127 #define GAME_MODE_REQUEST 2 /* request driven sampling */ |
|
128 |
|
129 /* only raw implemented in version 1.0 */ |
|
130 #define GAME_DATA_FORMAT_RAW 1 /* [l,c,r] */ |
|
131 #define GAME_DATA_FORMAT_SIGNED 2 /* [-l,0,+r] */ |
|
132 #define GAME_DATA_FORMAT_BINARY 3 /* {-1,0,+1} */ |
|
133 #define GAME_DATA_FORMAT_SCALED 4 /* [-10,+10] */ |
|
134 |
|
135 // parameters defining the operation of the driver |
|
136 typedef struct |
|
137 { |
|
138 USHORT useA; /* new bitmasks: see above */ |
|
139 USHORT useB; |
|
140 USHORT mode; /* see consts above */ |
|
141 USHORT format; /* see consts above */ |
|
142 USHORT sampDiv; /* samp freq = 32 / n */ |
|
143 USHORT scale; /* scaling factor */ |
|
144 USHORT res1; /* must be 0 */ |
|
145 USHORT res2; /* must be 0 */ |
|
146 } |
|
147 GAME_PARM_STRUCT; |
|
148 /****************************************************************************/ |
|
149 |
|
150 /****************************************************************************/ |
|
151 // calibration values for each axis: |
|
152 // - upper limit on value to be considered in lower range |
|
153 // - centre value |
|
154 // - lower limit on value to be considered in upper range |
|
155 typedef struct |
|
156 { |
|
157 GAME_3POS_STRUCT Ax; |
|
158 GAME_3POS_STRUCT Ay; |
|
159 GAME_3POS_STRUCT Bx; |
|
160 GAME_3POS_STRUCT By; |
|
161 } |
|
162 GAME_CALIB_STRUCT; |
|
163 /****************************************************************************/ |
|
164 |
|
165 /****************************************************************************/ |
|
166 // struct defining the digital response values for all axes |
|
167 typedef struct |
|
168 { |
|
169 GAME_3POS_STRUCT Ax; |
|
170 GAME_3POS_STRUCT Ay; |
|
171 GAME_3POS_STRUCT Bx; |
|
172 GAME_3POS_STRUCT By; |
|
173 } |
|
174 GAME_DIGSET_STRUCT; |
|
175 /****************************************************************************/ |
|
176 |
|
177 #endif |