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 */
23typedef 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
73typedef SHORT   GAME_POS;       /* some data formats require signed values */
74
75// simple 2-D position for each joystick
76typedef struct
77{
78        GAME_POS                x;
79        GAME_POS                y;
80}
81GAME_2DPOS_STRUCT;
82
83// struct defining the instantaneous state of both sticks and all buttons
84typedef struct
85{
86        GAME_2DPOS_STRUCT       A;
87        GAME_2DPOS_STRUCT       B;
88        USHORT                  butMask;
89}
90GAME_DATA_STRUCT;
91
92// struct to be used for calibration and digital response on each axis
93typedef struct
94{
95        GAME_POS                lower;
96        GAME_POS                centre;
97        GAME_POS                upper;
98}
99GAME_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
105typedef struct
106{
107        GAME_DATA_STRUCT        curdata;
108        USHORT                  b1cnt;
109        USHORT                  b2cnt;
110        USHORT                  b3cnt;
111        USHORT                  b4cnt;
112}
113GAME_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
136typedef 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}
147GAME_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
155typedef struct
156{
157        GAME_3POS_STRUCT        Ax;
158        GAME_3POS_STRUCT        Ay;
159        GAME_3POS_STRUCT        Bx;
160        GAME_3POS_STRUCT        By;
161}
162GAME_CALIB_STRUCT;
163/****************************************************************************/
164
165/****************************************************************************/
166// struct defining the digital response values for all axes
167typedef struct
168{
169        GAME_3POS_STRUCT        Ax;
170        GAME_3POS_STRUCT        Ay;
171        GAME_3POS_STRUCT        Bx;
172        GAME_3POS_STRUCT        By;
173}
174GAME_DIGSET_STRUCT;
175/****************************************************************************/
176
177#endif
178