summaryrefslogtreecommitdiffstats
path: root/public/sdk/inc/ntddjoy.h
blob: a52c11e68a842e9829a0230270102c112bc296c6 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
/*
Copyright (c) 1995  Microsoft Corporation

Module Name:
    ntddjoy.h

Abstract:
    Definitions of all constants and types for the joystick driver.
*/


#ifndef __NTDDJOY_H__
#define __NTDDJOY_H__

// Device Name
#define JOY_DD_DEVICE_NAME       "\\Device\\IBMJOY"
#define JOY_DD_DEVICE_NAME_U    L"\\Device\\IBMJOY"

// Device Parameters
#define JOY_DD_NAXES             "NumberOfAxes"
#define JOY_DD_NAXES_U          L"NumberOfAxes"

#define JOY_DD_DEVICE_ADDRESS    "DeviceAddress"
#define JOY_DD_DEVICE_ADDRESS_U L"DeviceAddress"

#define JOY_DD_TWOSTICKS         "Two Joysticks"
#define JOY_DD_TWOSTICKS_U      L"Two Joysticks"


// Device I/O Port Address
#define JOY_IO_PORT_ADDRESS    0x201

// Device specific bitmasks
#define X_AXIS_BITMASK	0x01

// Analog joystick bitmasks
#define JOYSTICK2_BUTTON2   0x80
#define JOYSTICK2_BUTTON1   0x40
#define JOYSTICK1_BUTTON2   0x20
#define JOYSTICK1_BUTTON1   0x10
#define JOYSTICK2_Y_MASK    0x08
#define JOYSTICK2_X_MASK    0x04
#define JOYSTICK1_R_MASK    0x08
#define JOYSTICK1_Z_MASK    0x04
#define JOYSTICK1_Y_MASK    0x02
#define JOYSTICK1_X_MASK    0x01


#define JOY_START_TIMERS    0

// Device specific timer values
#define ANALOG_POLL_TIMEOUT    16000  // 16 mS upper bound on analog polling, 8ms largest expected value, use 16 for safety
#define ANALOG_POLL_RESOLUTION   100  // 100 uS accuracy on polling time

// Joystick position information is transfered from the device driver to other
// drivers or applications using the JOY_DD_INPUT_DATA structure. Since
// the type of data returned varies whether the device is in analog mode or
// digital mode, a union is formed to convey both types of data. The Mode
// variable allows the recipient of the data to determing how to interpret
// the data.

typedef struct {

    // True if the device is unplugged. This is determined by a timeout mechanism
    BOOL    Unplugged;

    // The number of axi configured for this device (specified in the registry).
    DWORD   Axi;

    // current button state bitmask
    DWORD   Buttons;

    // X, Y, Z, and T axi positioning information contained below. The
    // values are expressed interms of microseconds. The values are
    // generated by measuring the duration of a pulse supplied by
    // the IBM compatable or Soundblaster game port. This is the raw
    // data, and it is the caller's responsibility to perform
    // calibration, ranging, hysteresis, etc.
    //
    // Because of inaccuracies in sampling this data, there is some
    // variation in readings of a stationary joystick.
    //
    // Analog Positioning information for typical joystick
    // values as follows (range information measured using a
    // Soundblaster analog game port).
    //
    //           apprx
    //  name     range        direction
    //  ----     -----        ---------
    //
    //  XTime  20..1600 uS    20 = leftmost, 1600 = rightmost
    //  YTime  20..1600 uS    20 = up,       1600 = down
    //  ZTime  20..1600 uS    20 = left,     1600 = right
    //  TTime  20..1600 uS    20 = forward   1600 = back
    //

    DWORD   XTime;   // Time in microseconds for X
    DWORD   YTime;   // Time in microseconds for Y
    DWORD   ZTime;   // Time in microseconds for Z if 3-axis
    DWORD   TTime;   // Time in microseconds for Throttle if 4 axis
    // return 3rd axis for 3 axis joysticks as TTime.

    } JOY_DD_INPUT_DATA, *PJOY_DD_INPUT_DATA;

#define JOY_TYPE 40001

// The following IOCTL code is used to obtain statistical information for
// debugging and performance testing the joystick driver.
#define IOCTL_JOY_GET_STATISTICS \
    CTL_CODE( JOY_TYPE, 0x903, METHOD_BUFFERED, FILE_READ_ACCESS)

// The following IOCTL code is used by the user-mode driver to determine
// the capabilities which the kernel-mode driver is capable of supporting.
#define IOCTL_JOY_GET_JOYREGHWCONFIG \
    CTL_CODE( JOY_TYPE, 0x906, METHOD_BUFFERED, FILE_READ_ACCESS)

// These stats are used for performance testing and debugging
typedef struct
{
    DWORD   Polls;
    DWORD   Timeouts;
    DWORD   Frequency;
    DWORD   dwQPCLatency;
    LONG    nQuiesceLoop;
    DWORD   Version;
    DWORD   PolledTooSoon;
    DWORD   NumberOfAxes;
    BOOL    bTwoSticks;
    DWORD   Redo;
} JOY_STATISTICS, *PJOY_STATISTICS;

#endif // __NTDDJOY_H__