Git conversion: Make reactos the root directory, move rosapps, rostests, wallpapers...
[reactos.git] / drivers / input / sermouse / sermouse.h
diff --git a/drivers/input/sermouse/sermouse.h b/drivers/input/sermouse/sermouse.h
new file mode 100644 (file)
index 0000000..7cbd05c
--- /dev/null
@@ -0,0 +1,117 @@
+#ifndef _SERMOUSE_PCH_
+#define _SERMOUSE_PCH_
+
+#include <ntddk.h>
+#include <ntddser.h>
+#include <kbdmou.h>
+
+#define SERMOUSE_TAG 'uoMS'
+
+typedef enum
+{
+  dsStopped,
+  dsStarted,
+  dsPaused,
+  dsRemoved,
+  dsSurpriseRemoved
+} SERMOUSE_DEVICE_STATE;
+
+typedef enum
+{
+       mtNone,      /* No Mouse */
+       mtMicrosoft, /* Microsoft Mouse with 2 buttons */
+       mtLogitech,  /* Logitech Mouse with 3 buttons */
+       mtWheelZ     /* Microsoft Wheel Mouse (aka Z Mouse) */
+} SERMOUSE_MOUSE_TYPE;
+
+/* Size for packet buffer used in interrupt routine */
+#define PACKET_BUFFER_SIZE  4
+
+/* Hardware byte mask for left button */
+#define LEFT_BUTTON_MASK     0x20
+/* Hardware to Microsoft specific code byte shift for left button */
+#define LEFT_BUTTON_SHIFT    5
+/* Hardware byte mask for right button */
+#define RIGHT_BUTTON_MASK    0x10
+/* Hardware to Microsoft specific code byte shift for right button */
+#define RIGHT_BUTTON_SHIFT   3
+/* Hardware byte mask for middle button */
+#define MIDDLE_BUTTON_MASK   0x20
+/* Hardware to Microsoft specific code byte shift for middle button */
+#define MIDDLE_BUTTON_SHIFT  3
+
+/* Microsoft byte mask for left button */
+#define MOUSE_BUTTON_LEFT    0x01
+/* Microsoft byte mask for right button */
+#define MOUSE_BUTTON_RIGHT   0x02
+/* Microsoft byte mask for middle button */
+#define MOUSE_BUTTON_MIDDLE  0x04
+
+typedef struct _SERMOUSE_DRIVER_EXTENSION
+{
+       USHORT NumberOfButtons;
+} SERMOUSE_DRIVER_EXTENSION, *PSERMOUSE_DRIVER_EXTENSION;
+
+typedef struct _SERMOUSE_DEVICE_EXTENSION
+{
+       PDEVICE_OBJECT LowerDevice;
+       SERMOUSE_DEVICE_STATE PnpState;
+       SERMOUSE_MOUSE_TYPE MouseType;
+       PSERMOUSE_DRIVER_EXTENSION DriverExtension;
+
+       HANDLE WorkerThreadHandle;
+       KEVENT StopWorkerThreadEvent;
+
+       ULONG ActiveQueue;
+       ULONG InputDataCount[2];
+       CONNECT_DATA ConnectData;
+       MOUSE_INPUT_DATA MouseInputData[2];
+       UCHAR PacketBuffer[PACKET_BUFFER_SIZE];
+       ULONG PacketBufferPosition;
+       ULONG PreviousButtons;
+       MOUSE_ATTRIBUTES AttributesInformation;
+} SERMOUSE_DEVICE_EXTENSION, *PSERMOUSE_DEVICE_EXTENSION;
+
+/************************************ createclose.c */
+
+DRIVER_DISPATCH SermouseCreate;
+
+DRIVER_DISPATCH SermouseClose;
+
+DRIVER_DISPATCH SermouseCleanup;
+
+/************************************ detect.c */
+
+SERMOUSE_MOUSE_TYPE
+SermouseDetectLegacyDevice(
+       IN PDEVICE_OBJECT LowerDevice);
+
+/************************************ fdo.c */
+
+DRIVER_ADD_DEVICE SermouseAddDevice;
+
+DRIVER_DISPATCH SermousePnp;
+
+/************************************ internaldevctl.c */
+
+DRIVER_DISPATCH SermouseInternalDeviceControl;
+
+/************************************ misc.c */
+
+NTSTATUS
+ForwardIrpAndWait(
+       IN PDEVICE_OBJECT DeviceObject,
+       IN PIRP Irp);
+
+NTSTATUS NTAPI
+ForwardIrpAndForget(
+       IN PDEVICE_OBJECT DeviceObject,
+       IN PIRP Irp);
+
+/************************************ readmouse.c */
+
+VOID NTAPI
+SermouseDeviceWorker(
+       PVOID Context);
+
+#endif /* _SERMOUSE_PCH_ */