summaryrefslogtreecommitdiffstats
path: root/public/sdk/inc/ntddsjoy.h
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--public/sdk/inc/ntddsjoy.h367
1 files changed, 367 insertions, 0 deletions
diff --git a/public/sdk/inc/ntddsjoy.h b/public/sdk/inc/ntddsjoy.h
new file mode 100644
index 000000000..e45dcf98a
--- /dev/null
+++ b/public/sdk/inc/ntddsjoy.h
@@ -0,0 +1,367 @@
+/*++ BUILD Version: 0001 // Increment this if a change has global effects
+
+
+Copyright (c) 1995 Microsoft Corporation
+
+Module Name:
+
+ swndr3p.h
+
+Abstract:
+
+ Definitions of all constants and types for the Sidewinder 3p joystick.
+
+Author:
+
+ edbriggs 30-Nov-95
+
+
+Revision History:
+
+
+--*/
+
+
+#ifndef __NTDDSJOY_H__
+#define __NTDDSJOY_H__
+
+
+
+#define UnusedParameter(x) x = x
+
+
+
+//
+// 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_TYPE "DeviceType"
+#define JOY_DD_DEVICE_TYPE_U L"DeviceType"
+
+#define JOY_DD_DEVICE_ADDRESS "DeviceAddress"
+#define JOY_DD_DEVICE_ADDRESS_U L"DeviceAddress"
+
+
+
+
+//
+// Device Types
+//
+
+#define JOY_TYPE_UNKNOWN 0x00
+#define JOY_TYPE_SIDEWINDER 0x01
+
+//
+// Device I/O Port Address
+//
+
+#define JOY_IO_PORT_ADDRESS 0x201
+
+//
+// Device specific bitmasks
+//
+
+
+#define X_AXIS_BITMASK 0x01
+#define CLOCK_BITMASK 0x10
+#define DATA0_BITMASK 0x20
+#define DATA1_BITMASK 0x40
+#define DATA2_BITMASK 0x80
+#define ALLDATA_BITMASK 0xE0
+#define ALLAXIS_BITMASK 0x0F
+
+
+//
+// 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 5000 // 5 mS upper bound on analog polling
+#define ANALOG_POLL_RESOLUTION 100 // 100 uS accuracy on polling time
+
+#define ANALOG_XA_VERYSLOW 1500
+#define ANALOG_XA_SLOW 1200
+#define ANALOG_XA_MEDIUM 900
+#define ANALOG_XA_FAST 300
+#define ANALOG_XA_VERYFAST 100
+
+#define DIGITAL_XA_VERYSLOW 1100
+#define DIGITAL_XA_SLOW 700
+#define DIGITAL_XA_MEDIUM 510
+#define DIGITAL_XA_FAST 100
+#define DIGITAL_XA_VERYFAST 50
+
+#define GODIGITAL_BASEDELAY_VERYSLOW 25
+#define GODIGITAL_BASEDELAY_SLOW 50
+#define GODIGITAL_BASEDELAY_MEDIUM 75
+#define GODIGITAL_BASEDELAY_FAST 120
+#define GODIGITAL_BASEDELAY_VERYFAST 130
+
+
+//
+// Device specific operating mode. Both INVALID_MODE and MAXIMUM_MODE are for
+// assertion checking and do not correspond to real operating modes
+//
+
+
+#define SIDEWINDER3P_INVALID_MODE 0
+#define SIDEWINDER3P_ANALOG_MODE 1
+#define SIDEWINDER3P_DIGITAL_MODE 2
+#define SIDEWINDER3P_ENHANCED_DIGITAL_MODE 3
+#define SIDEWINDER3P_MAXIMUM_MODE 4
+
+
+#define CLOCK_RISING_EDGE 0
+#define CLOCK_FALLING_EDGE 1
+
+
+//
+// These constants define how polling errors will be handled
+//
+
+#define MAX_ENHANCEDMODE_ATTEMPTS 10
+
+
+//
+// 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 mode is a value used to allow the recipient to determine how to
+ // interpret the data and the union. Valid values are:
+ //
+ // SIDEWINDER3P_ANALOG_MODE,
+ // SIDEWINDER3P_DIGITAL_MODE,
+ // SIDEWINDER3P_ENHANCED_DIGITAL_MODE
+ //
+
+ DWORD Mode;
+
+
+ union {
+
+ //
+ // Digital mode data packet
+ //
+
+ struct {
+
+ //
+ // Digital Positioning information values as follows
+ //
+ // name range direction
+ // ---- ----- ---------
+ //
+ // XOffset [0..1024) 0 = leftmost, 1023 = rightmost
+ // YOffset [0..1024) 0 = up, 1023 = down
+ // RzOffset [0..512) 0 = left, 511 = right
+ // TOffset [0..1024) Throttle position
+ //
+
+ WORD XOffset;
+ WORD YOffset;
+ WORD RzOffset;
+ WORD TOffset;
+
+ //
+ // hat position. The hat is an eight position switch.
+ // 0 = Not Pressed; 1 = 0 degrees, 2 = 45, 3 = 90 ... 8 = 315
+ // 0 degrees is up.
+ //
+
+ BYTE Hat;
+
+ //
+ // Button states. Buttons are bitmapped into the low order
+ // bit 0 - 7. Depressed = 0, released = 1.
+ //
+
+ BYTE Buttons;
+
+ //
+ // Checksum for packet
+ //
+
+ BYTE Checksum;
+
+ //
+ // Switch indicating whether we are emulating a CH Joystick or a
+ // Thrustmaster Joystick.
+ //
+
+ BYTE Switch_CH_TM;
+
+ //
+ // Driver Internal processing determines if the checksum and framing
+ // of the packet are correct. The following boolean values reflect
+ // the findings
+ //
+
+ BOOL fChecksumCorrect;
+ BOOL fSyncBitsCorrect;
+
+ } DigitalData;
+
+
+ //
+ // Analog mode data packet
+ //
+
+ struct {
+
+ //
+ // 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 callers 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 Microsoft Sidewinder IIId P
+ // 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
+
+ } AnalogData;
+
+ } u;
+
+} JOY_DD_INPUT_DATA, *PJOY_DD_INPUT_DATA;
+
+
+
+//
+// The following IOCTL codes are used for testing the device driver. They
+// export internal functions of the driver which will not be needed in the
+// final version of the driver
+//
+
+#define JOY_TYPE 40001
+
+#define IOCTL_JOY_GET_DRIVER_MODE_DWORD \
+ CTL_CODE( JOY_TYPE, 0x900, METHOD_BUFFERED, FILE_READ_ACCESS)
+
+#define IOCTL_JOY_GET_DEVICE_MODE_DWORD \
+ CTL_CODE( JOY_TYPE, 0x901, METHOD_BUFFERED, FILE_READ_ACCESS)
+
+#define IOCTL_JOY_SET_DIGITAL_MODE \
+ CTL_CODE( JOY_TYPE, 0x902, METHOD_BUFFERED, FILE_READ_ACCESS)
+
+#define IOCTL_JOY_GET_STATISTICS \
+ CTL_CODE( JOY_TYPE, 0x903, METHOD_BUFFERED, FILE_READ_ACCESS)
+
+#define IOCTL_JOY_SET_ENHANCED_MODE \
+ CTL_CODE( JOY_TYPE, 0x904, METHOD_BUFFERED, FILE_READ_ACCESS)
+
+#define IOCTL_JOY_SET_ANALOG_MODE \
+ CTL_CODE( JOY_TYPE, 0x905, METHOD_BUFFERED, FILE_READ_ACCESS)
+
+#define IOCTL_JOY_GET_JOYREGHWCONFIG \
+ CTL_CODE( JOY_TYPE, 0x906, METHOD_BUFFERED, FILE_READ_ACCESS)
+
+
+
+typedef union
+{
+ BYTE Byte;
+ WORD Word;
+ DWORD Dword;
+
+} JOY_IOCTL_INFO, *PJOY_IOCTL_INFO;
+
+
+typedef struct
+{
+ DWORD Retries[MAX_ENHANCEDMODE_ATTEMPTS];
+ DWORD EnhancedPolls;
+ DWORD EnhancedPollTimeouts;
+ DWORD EnhancedPollErrors;
+ DWORD Frequency;
+ DWORD dwQPCLatency;
+ LONG nReadLoopMax;
+ DWORD nVersion;
+ DWORD nPolledTooSoon;
+ DWORD nReset;
+} JOY_STATISTICS, *PJOY_STATISTICS;
+
+
+
+#endif // __NTDDJOY_H__
+
+
+
+