1190
+ − 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