From e611b132f9b8abe35b362e5870b74bce94a1e58e Mon Sep 17 00:00:00 2001 From: Adam Date: Sat, 16 May 2020 20:51:50 -0700 Subject: initial commit --- public/sdk/inc/ntddjoy.h | 132 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 132 insertions(+) create mode 100644 public/sdk/inc/ntddjoy.h (limited to 'public/sdk/inc/ntddjoy.h') diff --git a/public/sdk/inc/ntddjoy.h b/public/sdk/inc/ntddjoy.h new file mode 100644 index 000000000..a52c11e68 --- /dev/null +++ b/public/sdk/inc/ntddjoy.h @@ -0,0 +1,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__ -- cgit v1.2.3