Author: janderwald
Date: Mon Dec 26 03:37:22 2011
New Revision: 54762
URL:
http://svn.reactos.org/svn/reactos?rev=54762&view=rev
Log:
[USB-BRINGUP]
- Halfplement mouse hid driver, WIP, untested
Added:
branches/usb-bringup/drivers/hid/mouhid/ (with props)
branches/usb-bringup/drivers/hid/mouhid/CMakeLists.txt (with props)
branches/usb-bringup/drivers/hid/mouhid/mouhid.c (with props)
branches/usb-bringup/drivers/hid/mouhid/mouhid.h (with props)
branches/usb-bringup/drivers/hid/mouhid/mouhid.rc (with props)
Modified:
branches/usb-bringup/drivers/hid/CMakeLists.txt
branches/usb-bringup/drivers/hid/hidclass/hidclass.c
Modified: branches/usb-bringup/drivers/hid/CMakeLists.txt
URL:
http://svn.reactos.org/svn/reactos/branches/usb-bringup/drivers/hid/CMakeLi…
==============================================================================
--- branches/usb-bringup/drivers/hid/CMakeLists.txt [iso-8859-1] (original)
+++ branches/usb-bringup/drivers/hid/CMakeLists.txt [iso-8859-1] Mon Dec 26 03:37:22 2011
@@ -1,3 +1,4 @@
add_subdirectory(hidclass)
add_subdirectory(hidparse)
-add_subdirectory(hidusb)
+add_subdirectory(hidusb)
+add_subdirectory(mouhid)
Modified: branches/usb-bringup/drivers/hid/hidclass/hidclass.c
URL:
http://svn.reactos.org/svn/reactos/branches/usb-bringup/drivers/hid/hidclas…
==============================================================================
--- branches/usb-bringup/drivers/hid/hidclass/hidclass.c [iso-8859-1] (original)
+++ branches/usb-bringup/drivers/hid/hidclass/hidclass.c [iso-8859-1] Mon Dec 26 03:37:22
2011
@@ -111,14 +111,13 @@
return Status;
}
-NTSTATUS
+VOID
NTAPI
HidClassDriverUnload(
IN PDRIVER_OBJECT DriverObject)
{
UNIMPLEMENTED
ASSERT(FALSE);
- return STATUS_NOT_IMPLEMENTED;
}
NTSTATUS
Propchange: branches/usb-bringup/drivers/hid/mouhid/
------------------------------------------------------------------------------
--- bugtraq:logregex (added)
+++ bugtraq:logregex Mon Dec 26 03:37:22 2011
@@ -1,0 +1,2 @@
+([Ii]ssue|[Bb]ug)s? #?(\d+)(,? ?#?(\d+))*(,? ?(and |or )?#?(\d+))?
+(\d+)
Propchange: branches/usb-bringup/drivers/hid/mouhid/
------------------------------------------------------------------------------
bugtraq:message = See issue #%BUGID% for more details.
Propchange: branches/usb-bringup/drivers/hid/mouhid/
------------------------------------------------------------------------------
bugtraq:url =
http://www.reactos.org/bugzilla/show_bug.cgi?id=%BUGID%
Propchange: branches/usb-bringup/drivers/hid/mouhid/
------------------------------------------------------------------------------
tsvn:logminsize = 10
Added: branches/usb-bringup/drivers/hid/mouhid/CMakeLists.txt
URL:
http://svn.reactos.org/svn/reactos/branches/usb-bringup/drivers/hid/mouhid/…
==============================================================================
--- branches/usb-bringup/drivers/hid/mouhid/CMakeLists.txt (added)
+++ branches/usb-bringup/drivers/hid/mouhid/CMakeLists.txt [iso-8859-1] Mon Dec 26
03:37:22 2011
@@ -1,0 +1,13 @@
+
+add_definitions(-DDEBUG_MODE)
+
+include_directories(${REACTOS_SOURCE_DIR}/ntoskrnl/include)
+
+add_library(mouhid SHARED mouhid.c mouhid.rc)
+
+set_module_type(mouhid kernelmodedriver)
+add_importlibs(mouhid ntoskrnl hidparse)
+add_cab_target(mouhid 2)
+
+add_cab_target(mouhid 2)
+
Propchange: branches/usb-bringup/drivers/hid/mouhid/CMakeLists.txt
------------------------------------------------------------------------------
svn:eol-style = native
Added: branches/usb-bringup/drivers/hid/mouhid/mouhid.c
URL:
http://svn.reactos.org/svn/reactos/branches/usb-bringup/drivers/hid/mouhid/…
==============================================================================
--- branches/usb-bringup/drivers/hid/mouhid/mouhid.c (added)
+++ branches/usb-bringup/drivers/hid/mouhid/mouhid.c [iso-8859-1] Mon Dec 26 03:37:22 2011
@@ -1,0 +1,514 @@
+/*
+ * PROJECT: ReactOS HID Stack
+ * LICENSE: GPL - See COPYING in the top level directory
+ * FILE: drivers/hid/mouhid/mouhid.c
+ * PURPOSE: Mouse HID Driver
+ * PROGRAMMERS:
+ * Michael Martin (michael.martin(a)reactos.org)
+ * Johannes Anderwald (johannes.anderwald(a)reactos.org)
+ */
+
+#include "mouhid.h"
+
+NTSTATUS
+NTAPI
+MouHid_Create(
+ IN PDEVICE_OBJECT DeviceObject,
+ IN PIRP Irp)
+{
+ UNIMPLEMENTED
+ ASSERT(FALSE);
+ return STATUS_NOT_IMPLEMENTED;
+}
+
+
+NTSTATUS
+NTAPI
+MouHid_Close(
+ IN PDEVICE_OBJECT DeviceObject,
+ IN PIRP Irp)
+{
+ UNIMPLEMENTED
+ ASSERT(FALSE);
+ return STATUS_NOT_IMPLEMENTED;
+}
+
+NTSTATUS
+NTAPI
+MouHid_DeviceControl(
+ IN PDEVICE_OBJECT DeviceObject,
+ IN PIRP Irp)
+{
+ PIO_STACK_LOCATION IoStack;
+ PMOUSE_ATTRIBUTES Attributes;
+ PMOUHID_DEVICE_EXTENSION DeviceExtension;
+ PCONNECT_DATA Data;
+
+ /* get current stack location */
+ IoStack = IoGetCurrentIrpStackLocation(Irp);
+
+ /* get device extension */
+ DeviceExtension = (PMOUHID_DEVICE_EXTENSION)DeviceObject->DeviceExtension;
+
+ /* handle requests */
+ if (IoStack->Parameters.DeviceIoControl.IoControlCode ==
IOCTL_MOUSE_QUERY_ATTRIBUTES)
+ {
+ /* verify output buffer length */
+ if (IoStack->Parameters.DeviceIoControl.OutputBufferLength <
sizeof(MOUSE_ATTRIBUTES))
+ {
+ /* invalid request */
+ Irp->IoStatus.Status = STATUS_BUFFER_TOO_SMALL;
+ IoCompleteRequest(Irp, IO_NO_INCREMENT);
+ return STATUS_BUFFER_TOO_SMALL;
+ }
+
+ /* get output buffer */
+ Attributes = (PMOUSE_ATTRIBUTES)Irp->AssociatedIrp.SystemBuffer;
+
+ /* type of mouse */
+ Attributes->MouseIdentifier = DeviceExtension->MouseIdentifier;
+
+ /* number of buttons */
+ Attributes->NumberOfButtons = DeviceExtension->Buttons;
+
+ /* sample rate not used for usb */
+ Attributes->SampleRate = 0;
+
+ /* queue length */
+ Attributes->InputDataQueueLength = 2;
+
+ /* complete request */
+ Irp->IoStatus.Information = sizeof(MOUSE_ATTRIBUTES);
+ Irp->IoStatus.Status = STATUS_SUCCESS;
+ IoCompleteRequest(Irp, IO_NO_INCREMENT);
+ return STATUS_SUCCESS;
+ }
+ else if (IoStack->Parameters.DeviceIoControl.IoControlCode ==
IOCTL_INTERNAL_MOUSE_CONNECT)
+ {
+ /* verify input buffer length */
+ if (IoStack->Parameters.DeviceIoControl.InputBufferLength <
sizeof(CONNECT_DATA))
+ {
+ /* invalid request */
+ Irp->IoStatus.Status = STATUS_INVALID_PARAMETER;
+ IoCompleteRequest(Irp, IO_NO_INCREMENT);
+ return STATUS_INVALID_PARAMETER;
+ }
+
+ /* is it already connected */
+ if (DeviceExtension->ClassService)
+ {
+ /* already connected */
+ Irp->IoStatus.Status = STATUS_SHARING_VIOLATION;
+ IoCompleteRequest(Irp, IO_NO_INCREMENT);
+ return STATUS_SHARING_VIOLATION;
+ }
+
+ /* get connect data */
+ Data = (PCONNECT_DATA)IoStack->Parameters.DeviceIoControl.Type3InputBuffer;
+
+ /* store connect details */
+ DeviceExtension->ClassDeviceObject = Data->ClassDeviceObject;
+ DeviceExtension->ClassService = Data->ClassService;
+
+ /* completed successfully */
+ Irp->IoStatus.Status = STATUS_SUCCESS;
+ IoCompleteRequest(Irp, IO_NO_INCREMENT);
+ return STATUS_SUCCESS;
+ }
+ else if (IoStack->Parameters.DeviceIoControl.IoControlCode ==
IOCTL_INTERNAL_MOUSE_DISCONNECT)
+ {
+ /* not supported */
+ Irp->IoStatus.Status = STATUS_NOT_IMPLEMENTED;
+ IoCompleteRequest(Irp, IO_NO_INCREMENT);
+ return STATUS_NOT_IMPLEMENTED;
+ }
+ else if (IoStack->Parameters.DeviceIoControl.IoControlCode ==
IOCTL_INTERNAL_MOUSE_ENABLE)
+ {
+ /* not supported */
+ Irp->IoStatus.Status = STATUS_NOT_SUPPORTED;
+ IoCompleteRequest(Irp, IO_NO_INCREMENT);
+ return STATUS_NOT_SUPPORTED;
+ }
+ else if (IoStack->Parameters.DeviceIoControl.IoControlCode ==
IOCTL_INTERNAL_MOUSE_DISABLE)
+ {
+ /* not supported */
+ Irp->IoStatus.Status = STATUS_INVALID_DEVICE_REQUEST;
+ IoCompleteRequest(Irp, IO_NO_INCREMENT);
+ return STATUS_INVALID_DEVICE_REQUEST;
+ }
+
+ /* unknown request not supported */
+ Irp->IoStatus.Status = STATUS_NOT_SUPPORTED;
+ IoCompleteRequest(Irp, IO_NO_INCREMENT);
+ return STATUS_NOT_SUPPORTED;
+}
+
+NTSTATUS
+NTAPI
+MouHid_InternalDeviceControl(
+ IN PDEVICE_OBJECT DeviceObject,
+ IN PIRP Irp)
+{
+ PMOUHID_DEVICE_EXTENSION DeviceExtension;
+
+ /* get device extension */
+ DeviceExtension = (PMOUHID_DEVICE_EXTENSION)DeviceObject->DeviceExtension;
+
+ /* skip stack location */
+ IoSkipCurrentIrpStackLocation(Irp);
+
+ /* pass and forget */
+ return IoCallDriver(DeviceExtension->NextDeviceObject, Irp);
+}
+
+NTSTATUS
+NTAPI
+MouHid_Power(
+ IN PDEVICE_OBJECT DeviceObject,
+ IN PIRP Irp)
+{
+ UNIMPLEMENTED
+ ASSERT(FALSE);
+ return STATUS_NOT_IMPLEMENTED;
+}
+
+NTSTATUS
+MouHid_SubmitRequest(
+ PDEVICE_OBJECT DeviceObject,
+ ULONG IoControlCode,
+ ULONG InputBufferSize,
+ PVOID InputBuffer,
+ ULONG OutputBufferSize,
+ PVOID OutputBuffer)
+{
+ KEVENT Event;
+ PMOUHID_DEVICE_EXTENSION DeviceExtension;
+ PIRP Irp;
+ NTSTATUS Status;
+ IO_STATUS_BLOCK IoStatus;
+
+ /* get device extension */
+ DeviceExtension = (PMOUHID_DEVICE_EXTENSION)DeviceObject->DeviceExtension;
+
+ /* init event */
+ KeInitializeEvent(&Event, NotificationEvent, FALSE);
+
+ /* build request */
+ Irp = IoBuildDeviceIoControlRequest(IoControlCode,
DeviceExtension->NextDeviceObject, InputBuffer, InputBufferSize, OutputBuffer,
OutputBufferSize, FALSE, &Event, &IoStatus);
+ if (!Irp)
+ {
+ /* no memory */
+ return STATUS_INSUFFICIENT_RESOURCES;
+ }
+
+ /* send request */
+ Status = IoCallDriver(DeviceExtension->NextDeviceObject, Irp);
+ if (Status == STATUS_PENDING)
+ {
+ /* wait for request to complete */
+ KeWaitForSingleObject(&Event, Executive, KernelMode, FALSE, NULL);
+ Status = IoStatus.Status;
+ }
+
+ /* done */
+ return Status;
+}
+
+NTSTATUS
+NTAPI
+MouHid_StartDevice(
+ IN PDEVICE_OBJECT DeviceObject)
+{
+ NTSTATUS Status;
+ ULONG Buttons;
+ HID_COLLECTION_INFORMATION Information;
+ PVOID PreparsedData;
+ HIDP_CAPS Capabilities;
+ ULONG ValueCapsLength;
+ HIDP_VALUE_CAPS ValueCaps;
+ PMOUHID_DEVICE_EXTENSION DeviceExtension;
+
+ /* get device extension */
+ DeviceExtension = (PMOUHID_DEVICE_EXTENSION)DeviceObject->DeviceExtension;
+
+ /* query collection information */
+ Status = MouHid_SubmitRequest(DeviceObject, IOCTL_HID_GET_COLLECTION_INFORMATION, 0,
NULL, sizeof(HID_COLLECTION_INFORMATION), &Information);
+ if (!NT_SUCCESS(Status))
+ {
+ /* failed to query collection information */
+ return Status;
+ }
+
+ /* lets allocate space for preparsed data */
+ PreparsedData = ExAllocatePool(NonPagedPool, Information.DescriptorSize);
+ if (PreparsedData)
+ {
+ /* no memory */
+ return STATUS_INSUFFICIENT_RESOURCES;
+ }
+
+ /* now obtain the preparsed data */
+ Status = MouHid_SubmitRequest(DeviceObject, IOCTL_HID_GET_DRIVER_CONFIG, 0, NULL,
Information.DescriptorSize, PreparsedData);
+ if (!NT_SUCCESS(Status))
+ {
+ /* failed to get preparsed data */
+ ExFreePool(PreparsedData);
+ return Status;
+ }
+
+ /* lets get the caps */
+ Status = HidP_GetCaps(PreparsedData, &Capabilities);
+ if (!NT_SUCCESS(Status))
+ {
+ /* failed to get capabilities */
+ ExFreePool(PreparsedData);
+ return Status;
+ }
+
+ /* verify capabilities */
+ if (Capabilities.Usage != HID_USAGE_GENERIC_POINTER && Capabilities.Usage !=
HID_USAGE_GENERIC_MOUSE || Capabilities.UsagePage != HID_USAGE_PAGE_GENERIC)
+ {
+ /* not supported */
+ ExFreePool(PreparsedData);
+ return STATUS_UNSUCCESSFUL;
+ }
+
+ /* get number of buttons */
+ Buttons = HidP_MaxUsageListLength(HidP_Input, HID_USAGE_PAGE_BUTTON, PreparsedData);
+ ASSERT(Buttons > 0);
+ /* store number of buttons */
+ DeviceExtension->Buttons = (USHORT)Buttons;
+
+ ValueCapsLength = 1;
+ HidP_GetSpecificValueCaps(HidP_Input, HID_USAGE_PAGE_GENERIC,
HIDP_LINK_COLLECTION_UNSPECIFIED, HID_USAGE_GENERIC_X, &ValueCaps,
&ValueCapsLength, PreparsedData);
+
+ ValueCapsLength = 1;
+ HidP_GetSpecificValueCaps(HidP_Input, HID_USAGE_PAGE_GENERIC,
HIDP_LINK_COLLECTION_UNSPECIFIED, HID_USAGE_GENERIC_Y, &ValueCaps,
&ValueCapsLength, PreparsedData);
+
+ /* now check for wheel mouse support */
+ ValueCapsLength = 1;
+ Status = HidP_GetSpecificValueCaps(HidP_Input, HID_USAGE_PAGE_GENERIC,
HIDP_LINK_COLLECTION_UNSPECIFIED, HID_USAGE_GENERIC_WHEEL, &ValueCaps,
&ValueCapsLength, PreparsedData);
+ if (Status == HIDP_STATUS_SUCCESS )
+ {
+ /* mouse has wheel support */
+ DeviceExtension->MouseIdentifier = WHEELMOUSE_HID_HARDWARE;
+ DeviceExtension->WheelUsagePage = ValueCaps.UsagePage;
+ }
+ else
+ {
+ /* check if the mouse has z-axis */
+ ValueCapsLength = 1;
+ Status = HidP_GetSpecificValueCaps(HidP_Input, HID_USAGE_PAGE_GENERIC,
HIDP_LINK_COLLECTION_UNSPECIFIED, HID_USAGE_GENERIC_Z, &ValueCaps,
&ValueCapsLength, PreparsedData);
+ if (Status == HIDP_STATUS_SUCCESS && ValueCapsLength == 1)
+ {
+ /* wheel support */
+ DeviceExtension->MouseIdentifier = WHEELMOUSE_HID_HARDWARE;
+ DeviceExtension->WheelUsagePage = ValueCaps.UsagePage;
+ }
+ }
+
+ /* completed successfully */
+ return STATUS_SUCCESS;
+}
+
+NTSTATUS
+NTAPI
+MouHid_StartDeviceCompletion(
+ IN PDEVICE_OBJECT DeviceObject,
+ IN PIRP Irp,
+ IN PVOID Context)
+{
+ KeSetEvent((PKEVENT)Context, 0, FALSE);
+ return STATUS_MORE_PROCESSING_REQUIRED;
+}
+
+NTSTATUS
+NTAPI
+MouHid_Pnp(
+ IN PDEVICE_OBJECT DeviceObject,
+ IN PIRP Irp)
+{
+ PIO_STACK_LOCATION IoStack;
+ KEVENT Event;
+ NTSTATUS Status;
+ PMOUHID_DEVICE_EXTENSION DeviceExtension;
+
+ /* get device extension */
+ DeviceExtension = (PMOUHID_DEVICE_EXTENSION)DeviceObject->DeviceExtension;
+
+ /* get current irp stack */
+ IoStack = IoGetCurrentIrpStackLocation(Irp);
+
+ if (IoStack->MinorFunction == IRP_MN_STOP_DEVICE || IoStack->MinorFunction ==
IRP_MN_CANCEL_REMOVE_DEVICE || IoStack->MinorFunction == IRP_MN_QUERY_STOP_DEVICE ||
IoStack->MinorFunction == IRP_MN_CANCEL_STOP_DEVICE)
+ {
+ /* indicate success */
+ Irp->IoStatus.Status = STATUS_SUCCESS;
+
+ /* skip irp stack location */
+ IoSkipCurrentIrpStackLocation(Irp);
+
+ /* dispatch to lower device */
+ return IoCallDriver(DeviceExtension->NextDeviceObject, Irp);
+ }
+ else if (IoStack->MinorFunction == IRP_MN_REMOVE_DEVICE)
+ {
+ /* FIXME synchronization */
+
+ /* cancel irp */
+ IoCancelIrp(DeviceExtension->Irp);
+
+ /* indicate success */
+ Irp->IoStatus.Status = STATUS_SUCCESS;
+
+ /* skip irp stack location */
+ IoSkipCurrentIrpStackLocation(Irp);
+
+ /* dispatch to lower device */
+ Status = IoCallDriver(DeviceExtension->NextDeviceObject, Irp);
+
+ IoFreeIrp(DeviceExtension->Irp);
+ IoDetachDevice(DeviceExtension->NextDeviceObject);
+ IoDeleteDevice(DeviceObject);
+ return Status;
+ }
+ else if (IoStack->MinorFunction == IRP_MN_START_DEVICE)
+ {
+ /* init event */
+ KeInitializeEvent(&Event, NotificationEvent, FALSE);
+
+ /* copy stack location */
+ IoCopyCurrentIrpStackLocationToNext (Irp);
+
+ /* set completion routine */
+ IoSetCompletionRoutine(Irp, MouHid_StartDeviceCompletion, &Event, TRUE, TRUE,
TRUE);
+ Irp->IoStatus.Status = 0;
+
+ /* pass request */
+ Status = IoCallDriver(DeviceExtension->NextDeviceObject, Irp);
+ if (Status == STATUS_PENDING)
+ {
+ KeWaitForSingleObject(&Event, Executive, KernelMode, FALSE, NULL);
+ Status = Irp->IoStatus.Status;
+ }
+
+ if (!NT_SUCCESS(Status))
+ {
+ /* failed */
+ Irp->IoStatus.Status = Status;
+ IoCompleteRequest(Irp, IO_NO_INCREMENT);
+ return Status;
+ }
+
+ /* lets start the device */
+ Status = MouHid_StartDevice(DeviceObject);
+ DPRINT1("MouHid_StartDevice %x\n", Status);
+
+ /* complete request */
+ Irp->IoStatus.Status = Status;
+ IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+ /* done */
+ return Status;
+ }
+ else
+ {
+ /* skip irp stack location */
+ IoSkipCurrentIrpStackLocation(Irp);
+
+ /* dispatch to lower device */
+ return IoCallDriver(DeviceExtension->NextDeviceObject, Irp);
+ }
+}
+
+NTSTATUS
+NTAPI
+MouHid_AddDevice(
+ IN PDRIVER_OBJECT DriverObject,
+ IN PDEVICE_OBJECT PhysicalDeviceObject)
+{
+ NTSTATUS Status;
+ PDEVICE_OBJECT DeviceObject, NextDeviceObject;
+ PMOUHID_DEVICE_EXTENSION DeviceExtension;
+ POWER_STATE State;
+
+ /* create device object */
+ Status = IoCreateDevice(DriverObject, sizeof(MOUHID_DEVICE_EXTENSION), NULL,
FILE_DEVICE_MOUSE, 0, FALSE, &DeviceObject);
+ if (!NT_SUCCESS(Status))
+ {
+ /* failed to create device object */
+ return Status;
+ }
+
+ /* now attach it */
+ NextDeviceObject = IoAttachDeviceToDeviceStack(DeviceObject, PhysicalDeviceObject);
+ if (!NextDeviceObject)
+ {
+ /* failed to attach */
+ IoDeleteDevice(DeviceObject);
+ return STATUS_DEVICE_NOT_CONNECTED;
+ }
+
+ /* get device extension */
+ DeviceExtension = (PMOUHID_DEVICE_EXTENSION)DeviceObject->DeviceExtension;
+
+ /* zero extension */
+ RtlZeroMemory(DeviceExtension, sizeof(MOUHID_DEVICE_EXTENSION));
+
+ /* init device extension */
+ DeviceExtension->MouseIdentifier = MOUSE_HID_HARDWARE;
+ DeviceExtension->Buttons = 0;
+ DeviceExtension->WheelUsagePage = 0;
+ DeviceExtension->NextDeviceObject = NextDeviceObject;
+ KeInitializeEvent(&DeviceExtension->Event, NotificationEvent, FALSE);
+ DeviceExtension->Irp = IoAllocateIrp(NextDeviceObject->StackSize, FALSE);
+
+ /* FIXME handle allocation error */
+ ASSERT(DeviceExtension->Irp);
+
+ /* FIXME query parameter 'FlipFlopWheel', 'WheelScalingFactor' */
+
+ /* set power state to D0 */
+ State.DeviceState = PowerDeviceD0;
+ PoSetPowerState(DeviceObject, DevicePowerState, State);
+
+ /* init device object */
+ DeviceObject->Flags |= DO_BUFFERED_IO | DO_POWER_PAGABLE;
+ DeviceObject->Flags &= ~DO_DEVICE_INITIALIZING;
+
+ /* completed successfully */
+ return STATUS_SUCCESS;
+}
+
+VOID
+NTAPI
+MouHid_Unload(
+ IN PDRIVER_OBJECT DriverObject)
+{
+ UNIMPLEMENTED
+ ASSERT(FALSE);
+}
+
+
+NTSTATUS
+NTAPI
+DriverEntry(
+ IN PDRIVER_OBJECT DriverObject,
+ IN PUNICODE_STRING RegPath)
+{
+ /* FIXME check for parameters 'UseOnlyMice',
'TreatAbsoluteAsRelative', 'TreatAbsolutePointerAsAbsolute' */
+
+ /* initialize driver object */
+ DriverObject->DriverUnload = MouHid_Unload;
+ DriverObject->DriverExtension->AddDevice = MouHid_AddDevice;
+ DriverObject->MajorFunction[IRP_MJ_CREATE] = MouHid_Create;
+ DriverObject->MajorFunction[IRP_MJ_CLOSE] = MouHid_Close;
+ DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = MouHid_DeviceControl;
+ DriverObject->MajorFunction[IRP_MJ_INTERNAL_DEVICE_CONTROL] =
MouHid_InternalDeviceControl;
+ DriverObject->MajorFunction[IRP_MJ_POWER] = MouHid_Power;
+ DriverObject->MajorFunction[IRP_MJ_PNP] = MouHid_Pnp;
+ DriverObject->DriverUnload = MouHid_Unload;
+ DriverObject->DriverExtension->AddDevice = MouHid_AddDevice;
+
+ /* done */
+ return STATUS_SUCCESS;
+}
Propchange: branches/usb-bringup/drivers/hid/mouhid/mouhid.c
------------------------------------------------------------------------------
svn:eol-style = native
Added: branches/usb-bringup/drivers/hid/mouhid/mouhid.h
URL:
http://svn.reactos.org/svn/reactos/branches/usb-bringup/drivers/hid/mouhid/…
==============================================================================
--- branches/usb-bringup/drivers/hid/mouhid/mouhid.h (added)
+++ branches/usb-bringup/drivers/hid/mouhid/mouhid.h [iso-8859-1] Mon Dec 26 03:37:22 2011
@@ -1,0 +1,23 @@
+#pragma once
+
+#define _HIDPI_NO_FUNCTION_MACROS_
+#include <ntddk.h>
+#include <hidclass.h>
+#include <hidpddi.h>
+#include <hidpi.h>
+#include <debug.h>
+#include <ntddmou.h>
+#include <kbdmou.h>
+
+
+typedef struct
+{
+ PDEVICE_OBJECT NextDeviceObject;
+ PIRP Irp;
+ KEVENT Event;
+ PDEVICE_OBJECT ClassDeviceObject;
+ PVOID ClassService;
+ USHORT Buttons;
+ USHORT MouseIdentifier;
+ USHORT WheelUsagePage;
+}MOUHID_DEVICE_EXTENSION, *PMOUHID_DEVICE_EXTENSION;
Propchange: branches/usb-bringup/drivers/hid/mouhid/mouhid.h
------------------------------------------------------------------------------
svn:eol-style = native
Added: branches/usb-bringup/drivers/hid/mouhid/mouhid.rc
URL:
http://svn.reactos.org/svn/reactos/branches/usb-bringup/drivers/hid/mouhid/…
==============================================================================
--- branches/usb-bringup/drivers/hid/mouhid/mouhid.rc (added)
+++ branches/usb-bringup/drivers/hid/mouhid/mouhid.rc [iso-8859-1] Mon Dec 26 03:37:22
2011
@@ -1,0 +1,5 @@
+#define REACTOS_VERSION_DLL
+#define REACTOS_STR_FILE_DESCRIPTION "USB HID Parser\0"
+#define REACTOS_STR_INTERNAL_NAME "hidparse\0"
+#define REACTOS_STR_ORIGINAL_FILENAME "hidparse.sys\0"
+#include <reactos/version.rc>
Propchange: branches/usb-bringup/drivers/hid/mouhid/mouhid.rc
------------------------------------------------------------------------------
svn:eol-style = native